Q&A

  • 알고리즘 질문입니다. 마우스관련


안녕하세요. 오랫만이네요. 간만에 나타나서 뜬금없는 얘길하나 하고 갑니다. ^^;
좋은 알고리즘이 떠오르지 않아 여쭤봅니다.

먼저, 마우스의 시작 위치는 아무때나 상관없습니다.
GetCursorPos 를 이용하면 시작위치의 X, Y의 값을 알 수 있겠죠 ^^;

이제부터가 문제인데, 이 X, Y의 위치에서 원을 그리며 점점점 그 반경을 넓혀 가는 겁니다. 그림을 그리자면 다음과 같겠죵 ^^;

일정 간격을 유지하면서 점차적으로 넓게 퍼지는 형태입니다. ^^;
반경은 사용자가 주어진 반경만큼 되겠죵 ?
그리고, 1024*768의 일반화면에서 생각하자면 반경은 그리 크지는 않아도 됩니다. ^^
시간나실때 한번 구상해봐주세용~~~ ^^
1  COMMENTS
  • Profile
    조규춘 2004.09.19 01:16


    안녕하셔요.. ^^

    님이 올린 그림을 보면서 만들어 봤습니다.

    저두 그림을 올립니다.

    보시면 빨간 엑수가 있는디.. 그건 제가 기냥 잡은 시작점이구요..

    처음에 나온 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.
    • 구창민
      2004.09.21 19:37
      안녕하세요.. 아래 문장을 사용하시면 해결 되실거 같아요.. A1+ #10#13 + B1 + #10#13 + C1+ #10#13...
    • 제리스
    • 2004.09.21 10:00
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 하얀까마귀
      2004.09.21 17:13
      좀더 설명을 해주심 좋을텐데.. 일단 왜안되는지는 모르는거구요. 게시판에 콤포넌트 소스가 있다면 원...
    • 제리스
      2004.09.24 04:21
      고맙습니다! 덕분에 무사히 설치 했습니다 뉴_누
    • 최수림
    • 2004.09.21 05:50
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 박상윤
      2004.09.21 23:00
      direct show란 윈도우 기반하에서. 멀티미디어를 다루기위한 SDK를 말하는 것입니다. 음 MS에서 기본적으...
    • 구창민
      2004.09.21 20:48
      안녕하세요.. www.delphiKorea.com 에 가셔서 "directShow" 로 검색해보시면 좋은 결과를 얻으실 수 ...
    • 파멸의슬픔
      2004.09.21 04:47
      procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin   Form2.sho...
    • 하얀까마귀
      2004.09.21 17:09
      OnClose 전에 OnCloseQuery라는게 있습니다. procedure TForm1.FormCloseQuery(Sender: TObject; var C...
    • 전연식
      2004.09.22 04:15
      말씀하신데로 해보니 잘 되는군요.. 워낙 초보라 계속 의문이 생기고 진도가 안 나가네요..ㅠ.ㅠ F...
    • 일그니
      2004.09.22 05:19
      MessageDlg함수를 도움말에서 찾아보세요... 함수의 도움말에 예제까지 아주 자세히 되있습니다. For...
    • 델팡
    • 2004.09.21 01:39
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 최영환
    • 2004.09.21 00:33
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2004.09.21 19:34
      아래 내용 참고하셔서 즐거운 프로그래밍 하세요~ // Image1의 BtiMap에 체크가 되었있는 그림을 넣음...
    • 구창민
      2004.09.21 19:31
      안녕하세요.. 관련내용을 보면 델파이6 두번째 팻치를 해야 한다고 하네요.. 아래 참고하시고 즐거운...
    • 김광민
      2004.09.21 19:39
      앗.. 감사합니다. 이것때문에 전혀 진전이 안되고 있었는데.. 희망이 조금씩 보이는군요. 근데 패...
    • 허권호
    • 2004.09.20 22:20
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2004.09.21 19:25
      안녕하세요... 아래 사이트 참고하시면 원하시는 결과를 얻으실 수 있을 거예요.. http://www.djpate...
    • 김만석
    • 2004.09.20 01:39
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 박준철
      2004.09.20 18:53
      인스톨 패키지에 보면 라이브러리 디렉토리 설정이 안되어 있으신거 아닌가요?
    • 석주현
      2004.09.20 07:11
      Rs232 쪽 통신 컴포넌트 이름이 맞습니다. 설치하신 디렉토리를 델파이에서 Path를 등록시켜 보세요. ...
    • 김만석
      2004.09.22 00:17
      이 통신컴포언트 좀 구할 수 없나요... 저는 인터넷을 아무리 뒤져도 찾지 못하겠습니다. 부탁 좀 드릴께...
    • 구자균
    • 2004.09.19 10:04
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 석주현
      2004.09.20 07:32
      procedure TForm1.Button1Click(Sender: TObject); begin   if Form1.Width <> tmpWidth...
    • 허강우
      2004.09.18 21:24
      아래 명령을 사용하면 되네요. imgText.Canvas.FillRect(TheRect);
    • 석주현
      2004.09.20 07:39
      전체를 지우는 거라면 아래처럼 ClientRect 를 쓰는게 조금더 편하겠죠..^   Image.Canvas.Fi...
    • 김강수
    • 2004.09.18 20:16
    • 1 COMMENTS
    • /
    • 1 LIKES
    • 조규춘
      2004.09.19 01:16
      안녕하셔요.. ^^ 님이 올린 그림을 보면서 만들어 봤습니다. 저두 그림을 올립니다. 보시면 ...
    • 일그니
      2004.09.18 20:11
    • 유응철
    • 2004.09.18 19:03
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 착한천사
      2004.09.19 02:09
      이기종간의 join에 대해서 조회를 해보시는게 어떨지.. 저도 이기종간에 join에 대해서 몇번 글을 썼던적...
    • ㉳㉥ㅗ㉣ㅐ㉧ㅛ
      2004.09.18 19:14
      서로 다른 DB간의 조인은 안되는 걸루 알고 있습니다. MDB에 있는 두개의 테이블을 조인해서 결과...
    • 김유신
    • 2004.09.18 18:16
    • 1 COMMENTS
    • /
    • 0 LIKES
    • ㉳㉥ㅗ㉣ㅐ㉧ㅛ
      2004.09.18 18:49
      Try 커리... 파란색 execpt 실패할경우 빨간색 end; 를 이용해서 하면 될것 같네요...
    • 이두형
    • 2004.09.18 10:20
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 원종진
      2004.09.18 20:07
      저도 언젠가 델마당 게시판에서 검색을 해보았는데 Rudora 님께서 올려주신 글에 저런 내용이 있더...
    • 박성준
      2004.09.18 22:03
      종진님, 해보니깐 안되던데요... =.= Edit1.CharCase := TCharCase(9); 이런식으로하라는것 말씀하...
    • 원종진
      2004.09.20 18:39
      대신에 TEdit1 상속받아서 간단히 만들수이는 컴포넌트 소스를 찾아왔어요. ======================...
    • 박성준
      2004.09.18 19:37
      집에 델파이리소스북(Delphi Resource Book)이라는 책이있는데요? 책을 막 뒤져보니깐, TFnpNumericEdit 1...
    • ㉳㉥ㅗ㉣ㅐ㉧ㅛ
      2004.09.18 18:50
      힘들면 자료실을 뒤져보세요.... 그럼 오른쪽 정렬이 가능한 Edit 가 있을 겁니다.
    • 석주현
      2004.09.18 05:51
      var   CmdStr : String; begin   for i := 0 to Count - 1 do    ...
    • 김춘경
      2004.09.18 18:16
      개발 시점에 정품을 구입하셨다면, 최종 컴파일된 프로그램(상용 제품)은 판매에 아무런 문제가 없는걸로 ...