C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[64156] 감사 합니다. 해결 했습니다.
unitas [kjlee1] 1282 읽음    2011-04-13 19:05
저는 생각을 못했는데 사랑니 님이 말씀하신 내용을 찬찬히 읽다가 될거 같아서 아래처럼
구현했습니다.
현재 까지는 이상없이 잘 됩니다.

감사합니다.

답글 주신 다른분들도 모두 감사 드립니다.


void TfrmMain::Click_Point(double x, double y)    // x, y 마우스로 클릭한 좌표
{
    int dx, dy;
    double  d_ang1e1, d_angle2, d_dist;

    dx = x;
    dy = y;

    // 원의 중심 좌표 (a, b), 반지름 r   

    if( dx >= a )
        dx = dx - a;
    else
        dx = a - dx;

    if( dy >= b )
        dy = dy - b;
    else
        dy = b - dy;


    // 마우스로 클릭한 점과 원 중심의 거리
    d_dist  = sqrt( pow(dx, 2.0) + pow(dy, 2.0) );
   
    d_ang1e1   = acos( dx / d_dist );
    d_angle2    = asin( dy / d_dist );

    // radian을 degree 로 변환해주는 공식 (degree로 변환해줘야 정확한 각도 나옵니다.)
    // ang1e1 와 ang1e2 같은 값이 나옵니다.
    d_ang1e1   = d_ang1e1 / M_PI * 180.0;
    d_angle2    = d_angle2 / M_PI * 180.0;

// 원을 중심에서 평행, 수직으로 해서 4 사분면으로 나누었을때
// 원 중심에서 우상, 좌상, 좌하, 우하 에 따라 아래처럼 해주면 정확한 각도 나옵니다.
// 원 중심에서 평행선을 그렸을때 오른쪽 선이 기준입니다.

    if( (x < a) && (y < b) )
    {
        d_ang1e1 = 180 - d_ang1e1;
        d_angle2 = 180 - d_angle2;
    }
    else if( (x < a) && (y > b) )
    {
        d_ang1e1 = 180 + d_ang1e1;
        d_angle2 = 180 + d_angle2;
    }
    else if( (x > a) && (y > b) )
    {
        d_ang1e1 = 360 - d_ang1e1;
        d_angle2 = 360 - d_angle2;
    }

    if( d_dist <= r)
    {
        if( (d_ang1e1 >= 0) && (d_ang1e1 < 60) )  // sector 2
            // 처리

        else if( (d_ang1e1 >= 60) && (d_ang1e1 < 120) ) // sector 1
            // 처리

        else if( (d_ang1e1 >= 120) && (d_ang1e1 < 180) ) // sector 6
            // 처리

        else if( (d_ang1e1 >= 180) && (d_ang1e1 < 240) ) // sector 5
            // 처리

        else if( (d_ang1e1 >= 240) && (d_ang1e1 < 300) ) // sector 4
            // 처리

        else if( (d_ang1e1 >= 300) && (d_ang1e1 < 360) ) // sector 3
            // 처리
    }
}


사랑니 님이 쓰신 글 :
: 부채꼴의 중심점 좌표는 아셨다고 하셨고,
:
: 먼저 부채꼴 아크쪽을 제외하고 삼각형의 내부좌표를 구분해두시구요, 삼각형에 포함되지 않은
: 아크쪽은 부채꼴의 각도범위 안에 마우스 XY좌표가 존재하고(&&) 반지름 내에 있는지 확인하면 되지않을까요..
:
: 좀 무식하지만..ㅎㅎ
:

+ -

관련 글 리스트
64139 [질문]부채꼴 모양에 마우스로 클릭했는지 알수 있습니까? unitas 2046 2011/04/12
64150     Re:[질문]부채꼴 모양에 마우스로 클릭했는지 알수 있습니까? nansama 1283 2011/04/13
64153         Re:Re:그런 함수가 있었네요. unitas 1241 2011/04/13
64148     Re:[질문]부채꼴 모양에 마우스로 클릭했는지 알수 있습니까? locke 1256 2011/04/13
64149         Re:Re:[질문]부채꼴 모양에 마우스로 클릭했는지 알수 있습니까? unitas 1174 2011/04/13
64152             Re:Re:Re:[질문]부채꼴 모양에 마우스로 클릭했는지 알수 있습니까? 사랑니 2900 2011/04/13
64156                 감사 합니다. 해결 했습니다. unitas 1282 2011/04/13
64155                 Re:Re:Re:Re: 말씀하신 내용 가능할것 같습니다. unitas 1655 2011/04/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.