次のプログラムをコンパイルしたところ、”浮動小数点演算例外です”というエラーがでたのですが、どこを直せばいいのか分かりません。どこを直したらいいのか教えてください。
#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;
}
実行したところエラーがでました
Re:実行したところエラーがでました
double martrix2[3][4];
に何らかのデータを代入しないといけないのでは
すべて0に初期化されているので
drawLine関数の
z=dy/dx;
が0の除算になりました
に何らかのデータを代入しないといけないのでは
すべて0に初期化されているので
drawLine関数の
z=dy/dx;
が0の除算になりました
Re:実行したところエラーがでました
もしもVC++を使っているのならステップ実行でどこまで実行できるかを教えてもらってもいいですか?
それかエラーメッセージが出た行数が載っていると思うのでそれを載せてもらってもいいですか?
それかエラーメッセージが出た行数が載っていると思うのでそれを載せてもらってもいいですか?
Re:実行したところエラーがでました
toyoさんさすがです(;^ω^)
被ってしまったので、違うところに突っ込もうかと思いますw
a,dyy,changex,changeyは使われていないようなのですがこれは仕様ですか?
何かの名残だというのなら消しといた方がこの先余計な混乱やバグを招かなくていいですよ。
被ってしまったので、違うところに突っ込もうかと思いますw
a,dyy,changex,changeyは使われていないようなのですがこれは仕様ですか?
何かの名残だというのなら消しといた方がこの先余計な混乱やバグを招かなくていいですよ。