태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

선분교차 알고리즘

2009/09/15 09:53
int isIntersection(NsDPoint ptA1, NsDPoint ptA2,NsDPoint ptB1,NsDPoint ptB2)
{    
    if ((Direction(ptA1, ptA2, ptB1) *
        Direction(ptA1, ptA2, ptB2) <= 0) &&
        (Direction(ptB1, ptB2, ptA1) *
        Direction(ptB1, ptB2, ptA2) <= 0))
        return true;
    else return false;    
} 
int Direction(NsDPoint A,NsDPoint B,NsDPoint C) {     double dxAB, dxAC, dyAB, dyAC;     int Dir;     dxAB = B.x - A.x; dyAB = B.y - A.y;     dxAC = C.x - A.x; dyAC = C.y - A.y;     if (dxAB * dyAC > dyAB * dxAC) Dir = 1;     if (dxAB * dyAC < dyAB * dxAC) Dir = -1;     if (dxAB * dyAC == dyAB * dxAC) {         if (dxAB == 0 && dyAB == 0) Dir = 0;         if ((dxAB * dxAC < 0) || (dyAB * dyAC < 0)) Dir = -1;         else if ((dxAB * dxAB + dyAB * dyAB) >=             (dxAC * dxAC + dyAC*dyAC)) Dir = 0;         else Dir = 1;     }     return Dir; }
크리에이티브 커먼즈 라이선스
Creative Commons License

유리한 코드창고

  1. struct NsDPoint { double x,y; };
    로 가정.
    struct NsDLine { NsDPoint pt1,pt2; };
    로 만들어서 쓰던지.

    어딘가에서 긁어온거 약간 수정함.

  2. Blog Icon
    난 누규?

    #include<iostream>
    using namespace std;

    typedef struct
    {
    int m_nTop;
    int m_nBottom;
    int m_nLeft;
    int m_nRight;
    }STRect, *PSTRect;

    bool IsScopeCheck( int a_nStart , int a_nEnd , int a_nNumber )
    {
    if ( a_nStart <= a_nNumber && a_nEnd >= a_nNumber ) return true;

    return false;
    }


    bool IsOverlapRect(STRect& a_stRect1 , STRect& a_stRect2)
    {
    if ( IsScopeCheck( a_stRect1.m_nLeft , a_stRect1.m_nRight , a_stRect2.m_nLeft ) ||
    IsScopeCheck( a_stRect1.m_nLeft , a_stRect1.m_nRight , a_stRect2.m_nRight ) )
    if ( IsScopeCheck( a_stRect1.m_nBottom , a_stRect1.m_nTop , a_stRect2.m_nBottom ) ||
    IsScopeCheck( a_stRect1.m_nBottom , a_stRect1.m_nTop , a_stRect2.m_nTop ) ) return true;


    return false;
    }


    int main()
    {
    STRect stRect1,stRect2;

    cin >> stRect1.m_nLeft >> stRect1.m_nBottom >> stRect1.m_nRight >> stRect1.m_nTop;
    cin >> stRect2.m_nLeft >> stRect2.m_nBottom >> stRect2.m_nRight >> stRect2.m_nTop;


    if ( true == IsOverlapRect( stRect1 , stRect2 ) )
    cout << "Overlap" << endl;
    else
    cout << "Not Overlap" << endl;


    return 0;
    }

  3. 하지만 이건 사각형인걸요 ㅠㅜ