본문 바로가기
파이썬

파이썬 한 점이 선분의 다른 두 점 사이에 있는지 어떻게 확인할 수 있습니까?

by º기록 2020. 11. 17.
반응형

각 점에 대해 x 정수와 y 정수로 표시되는 2 개의 점 (a 및 b라고 함)이있는 2 차원 평면이 있다고 가정 해 보겠습니다.

다른 점 c가 a와 b로 정의 된 선분에 있는지 어떻게 확인할 수 있습니까?

나는 파이썬을 가장 많이 사용하지만 어떤 언어로 된 예제가 도움이 될 것입니다.

 

해결 방법

 

Darius Bacon이 말한 것처럼 (b-a)와 (c-a)의 교차 곱 이 0인지 확인하면 점 a, b, c가 정렬되어 있는지 알려줍니다.

하지만 c가 a와 b 사이인지 알고 싶기 때문에 (ba)와 (ca)의 내적 양수 인지 확인해야합니다. a와 b 사이 거리의 제곱보다 작습니다 .

최적화되지 않은 의사 코드에서 :

def isBetween(a, b, c):
    crossproduct = (c.y - a.y) * (b.x - a.x) - (c.x - a.x) * (b.y - a.y)

    # compare versus epsilon for floating point values, or != 0 if using integers
    if abs(crossproduct) > epsilon:
        return False

    dotproduct = (c.x - a.x) * (b.x - a.x) + (c.y - a.y)*(b.y - a.y)
    if dotproduct < 0:
        return False

    squaredlengthba = (b.x - a.x)*(b.x - a.x) + (b.y - a.y)*(b.y - a.y)
    if dotproduct > squaredlengthba:
        return False

    return True

 

참조 페이지 https://stackoverflow.com/questions/328107

 

 

반응형

댓글