実行したところエラーがでました

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Ten

実行したところエラーがでました

#1

投稿記事 by Ten » 14年前

次のプログラムをコンパイルしたところ、”浮動小数点演算例外です”というエラーがでたのですが、どこを直せばいいのか分かりません。どこを直したらいいのか教えてください。




#include <stdio.h>
#include <GL/glut.h>
#include <stdlib.h>
#include <math.h>

#define IMG_X 500
#define IMG_Y 500
#define Focus 10

unsigned char image[IMG_Y][IMG_X][3];

void swap(int *nx, int *ny)
{
int temp = *nx;
*nx = *ny;
*ny = temp;
}

double viewport[3][3]={{IMG_X/2,0,IMG_Y/2},
{0,-IMG_Y/2,IMG_X/2},
{0,0,1}};

double toushi[3][4]={{Focus,0,0,0},
{0,Focus,0,0},
{0,0,1,0}};

double modelview[4][4]={{1,0,0,0},
{0,1/2,1.7320508/2,0},
{0,-1.7320508/2,1/2,0},
{0,0,0,1}};


double martrix[3][4];
double martrix2[3][4];

void clearImage(void) {
int x,y;
for(y = 0; y < IMG_Y; y++) {
for(x = 0; x < IMG_X; x++) {
image[y][x][0] = 0;
image[y][x][1] = 0;
image[y][x][2] = 0;
}
}
}


void drawLine(int xs, int ys, int zs, int xe, int ye ,int ze) {
int a, x, y, z, changex, changey;
int dx, dy, dyy;
int sum;

x = xs;
y = ys;
z = zs;
xs = martrix2[0][0]*x+martrix2[0][1]*y+martrix2[0][2]*z+martrix2[0][3];
ys = martrix2[1][0]*x+martrix2[1][1]*y+martrix2[1][2]*z+martrix2[1][3];

x = xe;
y = ye;
z = ze;
xe = martrix2[0][0]*x+martrix2[0][1]*y+martrix2[0][2]*z+martrix2[0][3];
ye = martrix2[1][0]*x+martrix2[1][1]*y+martrix2[1][2]*z+martrix2[1][3];


if(xs > xe){
swap(&xs,&xe);
swap(&ys,&ye);
}

dx = xe - xs;
dy = ye - ys;

z=dy/dx;
if(z>0){
if(z<1){
y = ys;
sum = dx / 2;
for(x = xs; x <= xe; x++) {
image[y][x][0] = 255;
image[y][x][1] = 255;
image[y][x][2] = 255;
sum += dy;
if(sum >= dx) {
sum -= dx;
y++;
}
}
}else{
x = xs;
sum = dy / 2;
for(y = ys; y <= ye; y++) {
image[y][x][0] = 255;
image[y][x][1] = 255;
image[y][x][2] = 255;
sum += dx;
if(sum >= dy) {
sum -= dy;
x++;
}
}
}
}else{
if(z>-1){
y = ys;
sum = dx / 2;
for(x = xs; x <= xe; x++) {
image[y][x][0] = 255;
image[y][x][1] = 255;
image[y][x][2] = 255;
sum -= dy;
if(sum >= dx) {
sum -= dx;
y--;
}
}
}else{
x = xs;
sum = dy / 2;
for(y = ys; y <= ye; y++) {
image[y][x][0] = 255;
image[y][x][1] = 255;
image[y][x][2] = 255;
sum -= dx;
if(sum >= dy) {
sum -= dy;
x--;
}
}
}
}
}


void display(void) {
clearImage();
drawLine(100, 100, 100, 400, 400, 400);
//drawLine(400, 250, 100, 150);
//drawLine(100, 100, 200, 400);
//drawLine(100, 400, 200, 100);

glRasterPos2i(-1, 1);
glPixelZoom(1, -1);
glDrawPixels(IMG_X, IMG_Y, GL_RGB, GL_UNSIGNED_BYTE, image);

glutSwapBuffers();
}

int main(int argc, char *argv[]) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
glutInitWindowSize(IMG_X, IMG_Y);
glutCreateWindow(argv[0]);
glutDisplayFunc(display);

glutMainLoop();
return 0;
}

toyo

Re:実行したところエラーがでました

#2

投稿記事 by toyo » 14年前

double martrix2[3][4];
に何らかのデータを代入しないといけないのでは
すべて0に初期化されているので
drawLine関数の
z=dy/dx;
が0の除算になりました

ゆーずぃ

Re:実行したところエラーがでました

#3

投稿記事 by ゆーずぃ » 14年前

もしもVC++を使っているのならステップ実行でどこまで実行できるかを教えてもらってもいいですか?
それかエラーメッセージが出た行数が載っていると思うのでそれを載せてもらってもいいですか?

ゆーずぃ

Re:実行したところエラーがでました

#4

投稿記事 by ゆーずぃ » 14年前

toyoさんさすがです(;^ω^)
被ってしまったので、違うところに突っ込もうかと思いますw
a,dyy,changex,changeyは使われていないようなのですがこれは仕様ですか?
何かの名残だというのなら消しといた方がこの先余計な混乱やバグを招かなくていいですよ。

閉鎖

“C言語何でも質問掲示板” へ戻る