먼저 타원의 정의와 방정식부터 아셔야 합니다. 아래 링크를 참고하시고...
http://blog.daum.net/whitebrow09/96
중심이 a,b 이고, 장축이 2a, 단축이 2b인 타원을 그리는(?) 방법입니다.
f1, f2는 두 초점을 나타냅니다.
d는 중심에서 초점까지의 거리구요.
아래와 같이 하시면 되겠습니다.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int a=20;
int b=15;
int d=Sqrt(a*a-b*b);
int f1x=a-d;
int f1y=b;
int f2x=a+d;
int f2y=b;
int **EllipseArray = new int*[a*2+1];
for (int i = 0; i < a*2+1; i++) {
EllipseArray[i]= new int[b*2+1];
}
for(int nY = 0; nY<=b*2; nY++)
{
for(int nX = 0; nX<=a*2; nX++)
{
if (a*2 >= ( Sqrt((nX-f1x)*(nX-f1x) + (nY-f1y)*(nY-f1y)) + Sqrt((nX-f2x)*(nX-f2x) + (nY-f2y)*(nY-f2y))))
{
EllipseArray[nX][nY] = 1;
}
else
{
EllipseArray[nX][nY] = 0;
}
}
}
TMemo *Memo1 = new TMemo(this);
Memo1->Parent=this;
Memo1->Align=alClient;
Memo1->Lines->Clear();
Memo1->Font->Name="SYSTEM";
for(int nY = 0; nY <= b*2; nY++)
{
AnsiString str="";
for(int nX = 0; nX <= a*2; nX++)
{
if (EllipseArray[nX][nY])
{
str=str+"■";
}
else
{
str=str+"□";
}
}
Memo1->Lines->Add(str);
}
}
|