Q&A

  • 각도계산 (부탁합니다) ?
교차하는 두직선의 각도를 알고 싶습니다.

예를 들면 100,100-200,120과 80,80-170,180 이란 직선이

존재할 경우 두 선의 각도는 어떻게 계산하나요 ?

2  COMMENTS
  • Profile
    홍성락 2001.11.02 00:58
    초보 wrote:

    > 교차하는 두직선의 각도를 알고 싶습니다.

    > 예를 들면 100,100-200,120과 80,80-170,180 이란 직선이

    > 존재할 경우 두 선의 각도는 어떻게 계산하나요 ?

    //////////////////////////////////////////////////////////////////////////

    두선각도를 달리 구하는 방법도 있으나 교차하지 않을때도 고려

    (시작점 끝점이 정해진것은 교차점확인이 선행되야함, 지금은 무한 라인으로 교차됨을 고려함)

    또한 좌표계는 4/4분면인 Y측은 위로 + 아래로 - 고려(화면좌표계는 반대임)



    구하는 방법은 한라인의 시작점과 끝점의 방향을 가진 각도를 구하여

    (시작점과 끝점이 바뀌면 구하는 각도가 4/4분면에의해 달라짐)

    각각의 라인의 방향각을 뺀것이 두라인의 각도가됩니다.



    //*************************************************************************

    //두점의 각도구하기 : 동쪽0 반시계방향

    function GetAngle(X1,Y1,X2,Y2: double) : double;

    var

    dx, dy : double;

    angle : double;

    begin

    dx := X2 - X1;

    dy := Y2 - Y1;



    if (dx = 0) and (dy > 0) then begin

    angle := 90;

    end else if (dx > 0) and (dy = 0) then begin

    angle := 0;

    end else if (dx = 0) and (dy < 0) then begin

    angle := 270;

    end else if (dx < 0) and (dy = 0) then begin

    angle := 180;

    end

    else begin

    angle := RadToDeg(ArcTan(dy/dx));//유닛에 Math선언해야함

    if (dx < 0) then begin//2/4, 3/4분면일때

    angle := 180 + angle;

    end

    else if (dx > 0)and(dy < 0) then begin//4/4분면일때

    angle := 360 - angle;

    end;

    end;

    result := angle;

    end;

    //*************************************************************************

    procedure TForm1.Button1Click(Sender: TObject);

    var

    X1,Y1,X2,Y2,L1,L2: double;

    begin

    X1 := 100;

    Y1 := 100;

    X2 := 200;

    Y2 := 120;

    L1 := GetAngle(X1,Y1,X2,Y2);



    X1 := 80;

    Y1 := 80;

    X2 := 170;

    Y2 := 180;

    L2 := GetAngle(X1,Y1,X2,Y2);



    Edit1.Text := FloatToStr(ABS(L1-L2)) + '도 입니다';

    end;

    //*************************************************************************



  • Profile
    김우현 2008.07.11 18:48
    테스트해보니 angle := 360 - angle; 가 아니라 angle := 360 + angle; 이네요