Top > マクロで楕円

任意のポリゴンを描画する例として楕円を描いてみる。

問題は、sinやcosなどの数学関数が存在しなそうなところ。 この例では、テーラー展開を使ってsinをcos実現している。 メインルーチンとsin、cosルーチンのみ、最初の3行は省いています。

double Cos(double x){
	double t;
 	double  y;
	int n;
	y = 1.0;
	t = 1.0;
	for (n=1; n<=10 ; n++){
		t = - t*x*x/((2*n)*(2*n-1));
		y = y + t;
	}
	return y;
}
double Sin(double x){
	double t;
	double  y;
	int n;
	y = x;
	t = x;
	for (n=1; n<=10 ; n++){
		t = - t*x*x/((2*n)*(2*n+1));
		y = y + t;
	}
	return y;
}

int main(){
	layers::num[1].visible=true;
	layers::num[1].setColor(255,100,0);
	layers::num[1].setStyle(5);
	int pn;
	pn=40;
	double pi;
	pi=3.14159265358979;
	double cx,cy,lx,ly;
	cx=0.0;
	cy=0.0;
	lx=10000.0; //10um
	ly=20000.0; //10um
	double step;
	step=2*pi/pn;
	pointArray epoints;
	epoints.resize(pn+1);
	double x,y;
	// for loop
	int i;
	for (i=0; i<=pn ; i++){
		x=cx+lx*Cos(step*i);
		y=cy+ly*Sin(step*i);
		//set(int i,int x,int y);
		epoints.set(i,x,y);
	}
	//addPolygon(pointArray, layer);
	element *e=layout->drawing->currentCell->addPolygon(epoints, 1);
}

味噌となるのは「pointArray epoints;」と「epoints.resize(pn+1);」、「element *e=layout->drawing->currentCell->addPolygon(epoints, 1);」の部分だろう。


Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup Referer   Help   RSS of recent changes
Last-modified: Tue, 05 Sep 2006 06:22:09 HADT (5131d)