掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
円(ここでは1/4円)を描く過程を見る (ID:33987)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
以下は円(ここでは1/4円)を描く過程を見るためのプログラムです。このフォームだけじっと見ていると(^^;)意図したとおりの動きをするのですが、他のソフトでフォームを隠す意地悪をすると先に行き過ぎてしまいます。これを避けるためにはどうしたらいいでしょう? //実座標から表示座標を求める function TForm1.RealToDispX(x: Extended): Integer; begin Result := Round(FOx+x*20); end; function TForm1.RealToDispY(y: Extended): Integer; begin Result := Round(FOy-y*20); end; procedure TForm1.FDrawCircleRadius(TargetCanvas: TCanvas); begin with TargetCanvas do begin //円の半径を描く Pen.Width := 1; Pen.Color := clGreen; FTh := FTh+Pi/36; //角度の変化(180/36 = 5度) FEx := 10*Sin(FTh); FEy := 10*Cos(FTh); Pen.Color := clGreen; MoveTo( RealToDispX(0),RealToDispY(0) ); LineTo( RealToDispX(FEx),RealToDispY(FEy) ); end; end; procedure TForm1.FDrawCircle(TargetCanvas: TCanvas; Last: Integer); var i: Integer; Ex,Ey,Th : Extended; begin //円を描く with TargetCanvas do begin Pen.Width := 1; Pen.Color := clGreen; Th := 0; Ex := 0; Ey := 10; MoveTo( RealToDispX(Ex),RealToDispY(Ey) ); i := 0; while i < Last do begin Th := Th+Pi/36; Ex := 10*Sin(Th); Ey := 10*Cos(Th); LineTo( RealToDispX(Ex),RealToDispY(Ey) ); Inc(i,20); //5:全円 10:半円 20:1/4円 end; end; end; procedure TForm1.FDraw; begin FUraBmp.Canvas.Brush.Color := clWhite; FUraBmp.Canvas.FillRect(PaintBox1.Canvas.ClipRect); FDrawCircleRadius(FUraBmp.Canvas); FDrawCircle(FUraBmp.Canvas,Fi); PaintBox1.Canvas.Draw(0, 0, FUraBmp); end; procedure TForm1.FormCreate(Sender: TObject); begin Fi := 20; //5:全円 10:半円 20:1/4円 FTh := 0; FEx := 0; FEy := 0; FOx := PaintBox1.Width div 2; //原点-x FOy := PaintBox1.Height div 2; //原点-y FUraBmp := TBitmap.Create; //裏画面 FUraBmp.Width := PaintBox1.Width; FUraBmp.Height := PaintBox1.Height; Timer1.Interval := 500; Timer1.Enabled := True; end; procedure TForm1.FormDestroy(Sender: TObject); begin FUraBmp.Free; end; procedure TForm1.PaintBox1Paint(Sender: TObject); begin FDraw; end; procedure TForm1.Timer1Timer(Sender: TObject); begin Inc(Fi,20); //5:全円 10:半円 20:1/4円 PaintBox1Paint(Nil); if Fi >= 360 then begin Fi := 0; FTh := 0; FEx := 0; FEy := 0; end; end; end.
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.