- 締切済み
学校の授業で3Dの描画を行っています。
学校の授業で3Dの描画を行っています。 今回の課題は ベクトルP0P1とベクトルP1P2の外積ベクトルを計算せよ。 このベクトルをP0上に緑色で描け。 以下の外積関数を製作すること。 Hint for(i=0;i<3;i++) v0[i]=p1[i]-p0[i]; for(i=0;i<3;i++) v1[i]=p2[i]-p1[i]; gaiseki(v0, v1, v2); for(i=0;i<3;i++) p3[i]=p0[i]+v2[i]; void gaiseki(double a[], double b[], double c[]) { c[0]=a[1]*b[2]-a[2]*b[1]; c[1]=-a[0]*b[2]+a[2]*b[0]; c[2]=a[0]*b[1]-a[1]*b[0]; } というものでした。 私の書いたプログラムは以下の通りですが、33,34,36行目に構文のエラーが出てしまいます。 原因はなんなのでしょうか。 よろしくお願い致します。 /* 3Dシステムデザイン ベクトルの外積 */ #include <sfcgl.h> #include <math.h> double p0[3]={-1.0,-1.0,0.}; double p1[3]={1.3,-1.0,0.}; double p2[3]={1.1,1.1,0.}; double xr=0.; double yr=0.; double p3[3]={0,0,0.}; double v0[3]={0,0,0.}; double v1[3]={0,0,0.}; double v2[3]={0,0,0.}; void gaiseki(double a[], double b[], double c[]) { c[0]=(a[1]*b[2])-(a[2]*b[1]); c[1]=(-a[0]*b[2])+(a[2]*b[0]); c[2]=(a[0]*b[1])-(a[1]*b[0]); } void display() { BGColor(255,255,255); WireColor(0,0,0); LineWidth(2); SGBeginEdit(); Rotate(xr,1,0,0); Rotate(yr,0,1,0); double i=0; for(i=0;i<3;i=i+1){ v0[%f]=p1[%f]-p0[%f];} //ここと// for(i=0;i<3;i=i+1){ v1[%f]=p2[%f]-p1[%f];} //ここと// gaiseki(v0, v1, v2); for(i=0;i<3;i=i+1){ p3[%f]=p0[%f]+v2[%f];} //ここ// DrawLine(p0[0],p0[1],p0[2],p1[0],p1[1],p1[2]); DrawLine(p1[0],p1[1],p1[2],p2[0],p2[1],p2[2]); DrawLine(p2[0],p2[1],p2[2],p0[0],p0[1],p0[2]); WireColor(0,255,0); DrawLine(p0[0],p0[1],p0[2],p3[0],p3[1],p3[2]); SGEndEdit(); SGSwapFrames(); } void key(unsigned char c, int x, int y) { if(c=='x') xr+=5.; if(c=='y') yr+=5.; if(c=='a') p2[2]+=0.2; if(c=='b') p2[2]-=0.2; SGPostRedisplay(); } int main(int argc, char** argv) { SGInit(argc, argv); SGOpenWindow(50,50,600,600); SGSetViewPoint(0,0,5); SGSetDisplay(display); SGKeyBoard(key); SGCallBack(); return 0; }
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- koi1234
- ベストアンサー率53% (1866/3459)
多分#1さんの書かれているように変数i を入れたいのではないかと思いますが 問題は変数 i は double で定義されているので実数となります (そのため%fとかやったような気がする・・・・でもそれは間違い) 配列の中身に実数は使えません 一旦整数変数に代入しなおすか i 自体を整数で定義してください 何でわざわざ実数にしたのか良くわかりませんが記載プログラムでは 整数変数で十分ではないかと思います
- t_nojiri
- ベストアンサー率28% (595/2071)
>for(i=0;i<3;i=i+1){ v0[%f]=p1[%f]-p0[%f];} //ここと// >for(i=0;i<3;i=i+1){ v1[%f]=p2[%f]-p1[%f];} //ここと// >gaiseki(v0, v1, v2); >for(i=0;i<3;i=i+1){ p3[%f]=p0[%f]+v2[%f];} //ここ// ええと、フォントの関係? %fとなってますが、ループの中なので、変数iなのかな? %付きは、printfとかscanf等の変換形式指定ですよ。