ダイヤモンドパターンを回転させる
こんにちは。
次の問題がわかりません(>_<)
【グラッフィックスのダイヤモンドパターンを回転させる】問題です。
平面図形(正八角形、正十二角形とか)がくるくる回るようにしたいのですが、図形が崩れた感じで奇妙な(?)回転になります。一応、プログラムは書いてみましたが、どこが間違っているのかわかりません。
下に自分で考えたプログラムの流れとソースを記しておきました。わかる方ご回答願います。
※ 実行結果は無限に設定してあるので、Ctrl+C でプログラムを強制的に終わらせることとします。
【プログラムの流れ】
(1) 座標を計算(半径1のもの)
(2) ダイヤモンドパターンを書く
(3) 座標を回転
(4) ちょっと待つ
(5) 画面を消去する→(2)に戻る
【プログラム】
-----------------------------------------------------------
/* ダイヤモンドパターンを回転させる */
#include <stdio.h>
#include <math.h>
#include <gucc/gucc.h>
#define PAI 3.141593
void main( void )
{
int i, j, np, k, t1,c,t2,rad,u,v;
double x[100], y[100], z[100];
int R[5]={0,64,128,192,255};
int G[5]={0,64,128,192,255};
int B[5]={0,64,128,192,255};
double rs, ang;
rs = 150.0;/*円の半径*/
printf("頂点数? ");
scanf( "%d",&np );/*npは頂点数*/
for( i=0; i<np; i++ ){
ang = 2.0 * PAI * (i-1) /np ;/*PAIはπ*/
/*半径1の円周上の点*/
x[i] = cos(ang);
y[i] = sin(ang);
}
G_INIT();/*グラフィックモードの切り替えと初期化*/
G_CLS();
do{
/*図形を描く*/
for( i=0; i<np-1; i++ ){
for( j=i+1; j<np; j++ ){
G_LINE( rs*x[i]+ 300.0, rs*y[i]+ 240.0, rs*x[j]+ 300.0 , rs*y[j]+ 240.0 );
}
}
/*座標を回転 */
for( i=0; i<np-1; i++ ){
rad=rad+0.05;
z[i] = x[i] * cos(0.05) + y[i] * sin(0.05);
y[i] = -x[i] * sin(0.05) + y[i] * cos(0.05);
x[i]=z[i];
}
/*ちょっと待つ*/
t1=time(&t2);
while(t1==time(&t2));
/*画面を消去*/
G_CLS();
}while(1);
}
----------------------------------------------------------------
補足
早速の回答ありがとうございます。 私も同じページにいきあたったのですが、 この「舞台裏にて」のポーランド語原典(タイトル名だけでも)を探してるのですが見つからなくて・・・ 説明不足ですみません。