안녕하세요. 오랫만이네요. 간만에 나타나서 뜬금없는 얘길하나 하고 갑니다. ^^;
좋은 알고리즘이 떠오르지 않아 여쭤봅니다.
먼저, 마우스의 시작 위치는 아무때나 상관없습니다.
GetCursorPos 를 이용하면 시작위치의 X, Y의 값을 알 수 있겠죠 ^^;
이제부터가 문제인데, 이 X, Y의 위치에서 원을 그리며 점점점 그 반경을 넓혀 가는 겁니다. 그림을 그리자면 다음과 같겠죵 ^^;
일정 간격을 유지하면서 점차적으로 넓게 퍼지는 형태입니다. ^^;
반경은 사용자가 주어진 반경만큼 되겠죵 ?
그리고, 1024*768의 일반화면에서 생각하자면 반경은 그리 크지는 않아도 됩니다. ^^
시간나실때 한번 구상해봐주세용~~~ ^^
안녕하셔요.. ^^
님이 올린 그림을 보면서 만들어 봤습니다.
저두 그림을 올립니다.
보시면 빨간 엑수가 있는디.. 그건 제가 기냥 잡은 시작점이구요..
처음에 나온 Distance는 처음 선을 그릴때 시작점에서 의 거리구요
이거는 Gap of Distance 의 값으로 선을 그릴때 마다 증가됩니다.
글구 Angle 은 처음 시작점에서 수직선으로 시계방향 각도가 됩니다.
이 값은 Gap of Angle에 의해서 살짝 범위가 벌어지게 되죠.
# of Lines 는 물론 그려질 직선의 갯수를 의미합니다.
님이 원하시는 건지 모르겠네요..
저두 간만에 한델 오네요.. ^^
악~~~ 소스는 안올려 놓구... "글쓰기" 눌렀네요.. ㅋㅋ
전체 소스를 올려봅니다.
===============================================================
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
Button1: TButton;
Button2: TButton;
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Edit2: TEdit;
Edit3: TEdit;
Label3: TLabel;
Edit4: TEdit;
Label4: TLabel;
Edit5: TEdit;
Label5: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
lengthLine: Integer;
Angle: Integer;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
originX, originY, oldX, oldY, newX, newY, i, tmpAngle: Integer;
numberOfLines: Integer;
begin
lengthLine := StrToIntDef(Edit1.Text, 100);
Angle := StrToIntDef(Edit2.Text, 30);
tmpAngle := Angle;
originX := Form1.Width div 2;
originY := Form1.Height div 2;
oldX := originX;
oldY := originY - lengthLine;
newX := oldX;
newY := oldY;
numberOfLines := StrToInt(Edit3.text);
for i := 1 to numberOfLines do
begin
Form1.Canvas.MoveTo(oldX, oldY);
newX := trunc(originX + lengthLine * Sin((Pi * Angle)/180));
newY := trunc(originY - lengthLine * Cos((Pi * Angle)/180));
Form1.Canvas.LineTo(newX, newY);
Angle := Angle + 5; // 5 is gap
lengthLine := lengthLine + 5; // is distance
oldX := trunc(originX + lengthLine * Sin((Pi * Angle)/180));
oldY := trunc(originY - lengthLine * Cos((Pi * Angle)/180));
Angle := Angle + tmpAngle;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Repaint;
end;
end.