2012-04-11 4 views
0

2 개의 섹션을 포함하는 Segment 클래스가 있고, 각 섹션에는 X와 Y 좌표가 2 포인트 포함됩니다.두 섹션 간의 겹침을 찾는 가장 좋은 방법은 무엇입니까?

포인트 클래스에는 getX() 및 getX() 메소드가 있습니다.

public double overlap (Segment other) 
{ 

} 

이 그것을 찾을 수있는 방법 (단, X 축은 중첩)

2 절 평행 :

public class Segment 
{ 
    private Point pointLeft; 
    private Point pointRight; 
} 

나는 2 개 섹션 사이 (이된다)의 중첩을 찾을 X 축 (각 섹션에는 동일한 Y가 있음)

+0

"X 축만 겹치다"는 것은 무엇을 의미합니까? 그리고 오버랩 영역을 정의하는 오버랩 또는 다른 세그먼트의 크기가 필요합니까? –

+3

이 숙제가 있습니까? 그것은 매우 숙제와 같은 질문입니다. 그렇다면 태그로 지정해야합니다. – raveturned

+1

매우 관련 : http://stackoverflow.com/questions/3838329/how-can-i-check-if-two-segments-intersect – vcsjones

답변

1

나의 이해는 먼저 X 축에 두 줄을 투사 한 다음 자신의 교차점을 발견 할 것입니다. 이다

enter image description here

, 당신은 위의 이미지에서 X 축에있는 회색 부분의 길이를 원한다.

당신은 다음과 같이 4 개 부분으로 그것을 수행 할 수 있습니다 :

if (other.pointLeft.X <= pointLeft.X && other.pointRight.X >= pointRight.X) 
    return pointRight.X - pointLeft.X; 

if (pointLeft.X <= other.pointLeft.X && pointRight.X >= other.pointRight.X) 
    return other.pointRight.X - other.pointLeft.X; 

if (pointLeft.X <= other.pointLeft.X && pointRight.X <= other.pointRight.X) 
    return pointRight.X - other.pointLeft.X; 

if (pointLeft.X >= other.pointLeft.X && pointRight.X >= other.pointRight.X) 
    return other.pointRight.X - pointLeft.X; 

return 0; 

주, 나는 장소에 코딩했습니다, 그리고 그것을 테스트 할 기회가 없었어요. 그러나 그것은 당신에게해야 할 일에 대한 기본적인 아이디어를 줄 것입니다.

+0

X 축에 평행 한 2 개의 섹션 (각 섹션에는 동일한 Y가 있음) – falukky

+0

코드가 y paremter를 무시하기 때문에 여전히 작동해야합니다. –

1

두 개의 점으로 직사각형을 정의 할 수 있습니다.

Rectangle.Intersect 메서드를 찾으십니까? 질문의

http://msdn.microsoft.com/en-us/library/y10fyck0.aspx

+0

내 질문 업데이트 - X 축에 평행 한 두 섹션과 X 축에 평행 한 두 섹션 각 섹션은 동일한 Y를 가짐) – falukky

관련 문제