透視投影図形の回転
C言語で透視投影の図形(3次元)を作成しました。
プログラムは下のような感じになりました。
static struct {int f; double x,y,z;}a[]
...(略)
for(j=0; a[j].f!=-999; j++){//-999が来るまで描画
h=-a[j].x*sin(ay)/vp+a[j].z*cos(ay)/vp+n/vp+1;
px=(a[j].x*cos(ay)+a[j].z*sin(ay)+1)/h;
py=(a[j].y+m)/h;
if(a[j].f==-1) //-1が先頭にあるなら
pDC->MoveTo(px+200,-py+200);//描画の始点
else //そうでないなら
pDC->LineTo(px+200,-py+200);//線の終点
}
これに、わかっているx軸まわり・y軸まわりの回転変換マトリックスを掛け合わせた、統合変換マトリックスの式
x=x*cosθ-z*sinθ
y=x*sin^2θ+y*cosθ+z*sinθcosθ
z=x*sinθcosθ-y*sinθ+z*cos^2θ
を使用して図形を回転させたいのですが、プログラム中にはpDC->MoveTo(px+200,-py+200);のようにxとyしか出力がなく、z=をどう出力しようかと悩んでいます。また、回転を表示させるのに、
描画→回転させたx,y座標の算出→一度画面を白く塗りつぶす→描画
ということをfor文でやっていこうと思うのですが、画面がとてもちらついてしまいます。ちらつかない方法があれば教えてください。