// MakeCircle.v 円周座標データ作成

#define SIZE 512

module MakeCircle(out,c_x,c_y,radius,PlotNum,circle_x,circle_y:parameter)
int out[SIZE][SIZE];
#vios mutex out off min
int c_x[1];
#vios mutex c_x off max
int c_y[1];
#vios mutex c_y off max
int radius[1];
#vios mutex radius off max
int PlotNum[1];
#vios mutex PlotNum off max
int circle_x[];
#vios mutex circle_x off max
int circle_y[];
#vios mutex circle_y off max
{
    {
	int theta;
	int l_cx,l_cy;
	int l_radius,pnum;
	float rad;
	
	l_radius = radius[0];
	l_cx = c_x[0];
	l_cy = c_y[0];
	pnum = PlotNum[0];

	// 指定された半径、中心、プロット数の円周座標を
	// 配列に格納します
	for(theta = 0; theta < pnum; theta++){
	    rad = 2.*M_PI*(float)theta/pnum;
	    circle_x[theta] = (int)(l_radius*cos(rad) + l_cx);
	    circle_y[theta] = (int)(l_radius*sin(rad) + l_cy);
	}
    }
    // 以下のコードは円周座標を画像にプロットするためのものです
    {
	int x,y;

	// 画像を背景色で初期化します
	for(y = 0; y < SIZE; y++){
	    for(x = 0; x < SIZE; x++){
		out[x][y] = 255;
	    }
	}
    }
    {
	int theta,x,y;
	int pnum;
	pnum = PlotNum[0];

	// 円周データが保持する座標の位置に点をプロットします
	for(theta = 0; theta < pnum; theta++){
	    x = circle_x[theta];
	    y = circle_y[theta];
	    out[x][y] = 0;
	}
    }

}
スネークメインフローへ戻る

VIOS トップページ