2013-05-02 2 views
12

2 개의 선분 L1 (p1, p2)과 L2 (p3, p4)가 서로 교차하는지 어떻게 확인합니까? 교차점이 필요하지 않습니다. 교차하는지 아닌지를 알아야합니다. 내 응용 프로그램이 많이 계산하기 때문에 빠른 솔루션을 찾아야합니다.두 선 세그먼트가 교차하는지 확인하는 방법은 무엇입니까?

감사

+1

무한히 확장되는 기하학적 선을 참조합니까? – likeitlikeit

+0

@ra_htial : 귀하가 정말로 묻고있는 것에 대해 토론하고 있습니다. Andreas Wederbrand의 답변 아래의 토론을 참조하십시오. 편집 한 내용에 의도가 반영되지 않으면 다시 편집하십시오. 자바의 java.awt.geom.Line2D에 대해 궁금한 점이 있나요? (문서에 따르면 "(x, y) 좌표 공간의 선분을 나타냄") 또는 기하학적 선이 무한대로 확장됩니까? – oligofren

+0

@ra_htial : 질문하시는 내용에 대한 답변을 수락 하시거나 토론에 대한 의견을 제시해주십시오. – oligofren

답변

23

두 선분이 교차 여부를 테스트하려면 사용할 수 있습니다 자바의 2D API, 구체적으로 Line2D의 메소드. 코드가 사용자의 특정 도메인에 빨리 만들 수 있는지 확인하기 위해 어떻게 작동하는지 당신이 알아 내기에 관심이 있다면

Line2D line1 = new Line2D.Float(100, 100, 200, 200); 
Line2D line2 = new Line2D.Float(150, 150, 150, 200); 
boolean result = line2.intersectsLine(line1); 
System.out.println(result); // => true 

// Also check out linesIntersect() if you do not need to construct the line objects 
// It will probably be faster due to putting less pressure on the garbage collector 
// if running it in a loop 
System.out.println(Line2D.linesIntersect(100,100,200,200,150,150,150,200)); 

, 당신은 the code for OpenJDK implementation을 확인할 수 있습니다. 그러나 최적화하기 전에 항상 프로필을 기억하십시오. 아마 충분히 빠릅니다.

+2

하나도 교차점 후에 있다면? – aaronsnoswell

+0

미안하지만, 당신이 묻는 것을 얻지 못합니다. 교차점 이후에 뭐야? – oligofren

+2

나는 그가 세그먼트가 교차 한 곳을 알고 싶다는 것을 의미한다고 생각한다. Btw, 선의 끝점을 제외 할 수있는 방법이 있습니까? '(0,0,1,1)'과'(1,1,2,2)'는 교차하지 않습니까? –

8

당신이 그것을 다시 구현하려는 경우 간단히 말해서 나는 당신을 위해 그것을 수행하는 방법을 사용하거나 소스 코드를 볼 것입니다 : Line2D.linesIntersect()

+0

동일하게, linesIntersect는 세그먼트가 아닌 라인을 확인합니다. 그리고 선들이 교차하고 있지만 선들이 교차하지 않는 경우가 많이 있습니다. – anvarik

+5

javadoc에서는 다음과 같이 말합니다 : (x1, y1)에서 (x1, y1)까지의 ** ** 세그먼트 **가 (**, x3, y3) ~ (x4, y4) (강조선). –

+0

감자의 거룩한 어머니 :) 내 나쁜, 하나 투표가 너희들을 위해 간다 – anvarik

관련 문제