こんにちは。
現在、5角形をMoveTo、LineToを使用して作成しているのですが、
これを正5角形にしたいのですが、どうすればいいかがわかりません。
各辺の長さがいっしょになればいいのは、分かるんですが・・・。
ご教授をよろしくお願い致します。
こんな感じ?
procedure TForm1.Button1Click(Sender: TObject);
var i,x,y :integer;
begin
with Canvas do
begin
for i:=0 to 5 do
begin
x := round( 200*sin(2*3.1416*i/5) +200);
y := round( 200*cos(2*3.1416*i/5) +200);
if i>0 then LineTo(x,y)
else MoveTo(x,y);
end;
end;
end;
すでに回答がありますが、正多角形を描く関数をつくってみました。
type
TVexArray = array of TPoint;
function GetRegularPolygonVertexes(NumVertex:integer;Radius:Single;Center:TPoint;
var VexArray:TVexArray):Boolean;
var
i:integer;
begin
result := false;
if NumVertex < 3 then exit;
SetLength(VexArray,NumVertex);
for i := 0 to NumVertex-1 do begin
VexArray[i].x := Round(Radius * cos((pi/2)-(2*pi*i/NumVertex))+Center.x);
VexArray[i].y := Round(-Radius * sin((pi/2)-(2*pi*i/NumVertex))+Center.y);
end;
result := true;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
va:TVexArray;
Center:TPoint;
Radius:Single;
NumVertex:integer;
begin
NumVertex := 5; // 正五角形
Center := Point(150,150);
Radius := 100;
GetRegularPolygonVertexes(NumVertex,Radius,Center,va);
with Canvas do begin
Pen.Width := 3;
Pen.Color := clNavy;
Brush.Color := clAqua;
Polygon(va);
end;
end;
ウォレスさん、jokさん返信ありがとうございます。
無事解決致しました。
sin関数、cos関数は使ったことがなかったので、
現在提示していただいたソースを見ながら
勉強しています。
ツイート | ![]() |