0
라이브러리를 사용하지 않고 두 폴리 라인이 교차하는지 테스트 할 간단한 솔루션이 있습니까?폴리 라인을 파이썬을 사용하여 교차하는지 테스트하십시오.
같은
PL1 = ((-1, -1), (1, -1), (1, 2)), PL2 = ((0, 1), (2, 1))
PL1.intersect(PL2)
나는 단지 2 점 라인에 대한 해결책을 찾을 수 있어요.
라이브러리를 사용하지 않고 두 폴리 라인이 교차하는지 테스트 할 간단한 솔루션이 있습니까?폴리 라인을 파이썬을 사용하여 교차하는지 테스트하십시오.
같은
PL1 = ((-1, -1), (1, -1), (1, 2)), PL2 = ((0, 1), (2, 1))
PL1.intersect(PL2)
나는 단지 2 점 라인에 대한 해결책을 찾을 수 있어요.
주석에서 언급했듯이 폴리곤의 모든 구성 요소 선 사이에 선 교차점 (this for example)의 전통적인 알고리즘을 적용 할 수 있습니다. 예 :
def line_intersection(line1, line2):
xdiff = (line1[0][0] - line1[1][0], line2[0][0] - line2[1][0])
ydiff = (line1[0][1] - line1[1][1], line2[0][1] - line2[1][1])
def det(a, b):
return a[0] * b[1] - a[1] * b[0]
div = det(xdiff, ydiff)
if div == 0:
return None
d = (det(*line1), det(*line2))
x = det(d, xdiff)/div
y = det(d, ydiff)/div
return x, y
def poly_intersection(poly1, poly2):
for i, p1_first_point in enumerate(poly1[:-1]):
p1_second_point = poly1[i + 1]
for j, p2_first_point in enumerate(poly2[:-1]):
p2_second_point = poly2[j + 1]
if line_intersection((p1_first_point, p1_second_point), (p2_first_point, p2_second_point)):
return True
return False
PL1 = ((-1, -1), (1, -1), (1, 2))
PL2 = ((0, 1), (2, 1))
print poly_intersection(PL1, PL2)
감사합니다. 나는 코드의 아주 단순하고 마지막 부분을 확신하지 못했다. 방금 루프를 반복해야했습니다. –
라이브러리를 사용하지 않고 있습니다!? 왜 바퀴를 재발견합니까? – tnknepp
@tnkneppp에 동의합니다. 'PL1'과'PL2'에서 정확히 비슷한 튜플이 있다면 비교할 것이기 때문에 코드가 작동하지 않습니다. 또한'intersect' 메소드에'set'이 필요합니다. – Sebastian
폴리선은 두 개의 점이있는 여러 줄의 연속입니다. 두 개의 점선에 대해 사용하는 것과 동일한 기술을 사용하여 모든 세그먼트의 교차점을 확인하는 것이 가장 좋은 이유는 무엇입니까? 폴리 라인이 실제로 곡선이 아닌 한. –