2013-04-10 4 views
1

클리핑 알고리즘에는 Cohen-Sutherland, 2D 선 클리핑을위한 Cyrus-Beck 알고리즘, Circle 및 Polygon에 대한 많은 알고리즘이 있습니다. 하지만 벨으로 이미지 설명처럼 C의 삼각형 창 ++로 라인을 클립하는 등의 방법을 찾고 있어요 : enter image description here선을 삼각형으로 자르기 C++

그래서 내가 먼저 1 ~ 3 사건을 가지고하면 선이 그려해야 삼각형 내부에 있다는 것입니다 두 번째 경우는 밖으로 그려서는 안되는 삼각형입니다. 세 번째 경우는 삼각형 내부에 끝점이 있고 두 번째면은 삼각형 경계에 잘릴 필요가 있습니다. 따라서이 점을 삼각형 경계에 맞추는 가장 좋은 방법은 무엇입니까? 처리 성능?!

+1

선의 양 끝이 삼각형 외부에 있지만 선이 삼각형 경계를 교차하는 네 번째 경우가 있습니다. (케이스 1을 생각하면 양방향으로 라인이 확장됩니다.)이 케이스에 대해 걱정합니까? – jkerian

+0

당신이 이야기하고있는이 사건은 예를 들어 들어 오거나 나가는 사건 중 하나에 속하며, 어떻게 든 논리에 속합니다. – Alyafey

+1

도트 제품, 많은 내적 제품. :) –

답변

3

여기에 필요한 기본 원리는 삼각형의 각 변의 교차점을 계산하고 교차점이 모서리 내부 또는 교차점 알고리즘 (교차 알고리즘이 제공해야 함) 이상인지 여부를 확인하는 것입니다.

기본적으로 삼각형면 CD에 대한 선분 AB의 교차점은 A와 C가 시간 = 0을 나타내고 B와 D가 시간 1을 나타내는 교차 시간을 제공합니다. 두 선의 0과 1 사이의 값 세그먼트가 교차한다는 것을 의미하므로, 삼각형 외부의 점이 교차점에 놓 이도록 테스트중인 선분을 수정해야합니다. 이 범위를 벗어나는 값은 삼각형의 해당면을 무시할 수 있음을 의미합니다. (선분이 삼각형의 바깥쪽에 있거나 다른 두 변과 함께 자릅니다.)

차례대로 각 선분을 처리하면됩니다.