正5角形の作成について

解決


HARUKA  2004-05-11 01:03:09  No: 8860

こんにちは。
現在、5角形をMoveTo、LineToを使用して作成しているのですが、
これを正5角形にしたいのですが、どうすればいいかがわかりません。
各辺の長さがいっしょになればいいのは、分かるんですが・・・。

ご教授をよろしくお願い致します。


ウォレス  2004-05-11 02:33:15  No: 8861

こんな感じ?
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;


jok  2004-05-11 09:21:13  No: 8862

すでに回答がありますが、正多角形を描く関数をつくってみました。

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;


HARUKA  2004-05-11 19:20:54  No: 8863

ウォレスさん、jokさん返信ありがとうございます。
無事解決致しました。
sin関数、cos関数は使ったことがなかったので、
現在提示していただいたソースを見ながら
勉強しています。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加