2010-05-11 5 views
4

2D 폴리곤의 경 사진 모서리를 프로그래밍 방식으로 생성하려고합니다. 나를 이해할 수없는있다2D 폴리곤의 경 사진 모서리 생성

_________ 
|\ _____ /| 
| |  | | 
| |  | | 
| |_____| | 
|/_______\| 

그러나 내부 모양의 정점을 계산 : 예를 들어, 사각형을 정의하는 4 개 정점의 배열을 지정해,이 같은 뭔가를 생성합니다.

일반적으로 원래 모양의 복사본을 만들고 크기를 줄이면 작동하지 않습니다. (이 방법으로 N 자 모양의 다각형을 사면을 상상해보십시오)

내 알고리즘은 인접한 가장자리 (정점의 세배, 예 : 정사각형의 왼쪽 아래, 왼쪽 위 및 오른쪽 꼭지점) 분석을 포함합니다.). 거기에서, 나는 그들 사이의 각도를 찾고, 그 경사각을 따라 원하는 정도에 따라 그 각도를 따라 어딘가에 정점을 만들어야합니다.

그리고 수학 배경이별로 없기 때문에 그것이 내가 붙어있는 곳입니다. 센터 앵글을 어떻게 찾습니까? 아니면이 문제를 공격하는 훨씬 간단한 방법이 있습니까? 각 팀의

사본을 만들어 경사의 그것 안쪽으로 '원하는 폭을 밀어 :

+0

항상 4 개의 정점이 있습니까? 아니면 임의의 수에 대해 작동 할 솔루션이 필요합니까? – Skywalker

+0

어떤면에서 단순히 크기를 축소해도 작동하지 않습니까? – mathmike

+0

@Skywalker 모든 볼록 또는 오목 폴리곤에 적용 할 수있는 일반적인 솔루션이 필요합니다. – Metaphile

답변

1

일반적인 알고리즘은 꽤 복잡합니다. 찾고자하는 작업은 다각형을 오프셋하는 것으로 알려져 있습니다. 주변을 검색하면 포인터/논문 등을 찾을 수 있습니다.

C++ 또는 그 근처에서 작업하는 경우 CGAL을 시도 할 수 있습니다.

+0

이것은 내가 찾고있는 대답 인 것 같습니다. 그러나 그것은 내가 기대했던 것보다 더 복잡합니다. 나는 지금 베벨을 버려야 할 것입니다. – Metaphile

2

나는 같은 것을 할 것입니다. ('안쪽'은 측면의 수직 벡터를 따른다). 이 작업을 완료하면 새 복사본 (및 이전에 교차 한면의 복사본) 사이의 교차점을 찾고 내부 모양의 꼭지점으로 사용합니다. 교차점의 경우 오목한 지역의면이 커지므로 세그먼트가 아닌 실제 선을 고려해야합니다.

당신이 베벨 크기의 너비보다 두배 적은 영역을 가진 모양에 사용하려고하면이 작업은 끔찍한 일이지만, 그렇지 않으면 괜찮을 것입니다. (이 경우를 처리하기 위해 무언가를 추가 할 수있을 것이라고 확신하지만 다른 토론입니다.)

베벨 너비를 정점에 상대적으로 사용하려는 경우 동일한 원리를 사용하여 '안쪽으로'밀어 넣을 수도 있습니다 . 연결하는 법선의 평균을 구하여 꼭지점의 법선 각도를 추정합니다.

0

포인트가 p1이고 인접한 모서리를 만드는 포인트가 포인트 p2와 포인트 p3입니다. 그런 다음 벡터를 p1에서 p2로, p1에서 p3으로 가져옵니다. like -

v1 = p2 - p1 
v2 = p3 - p1 

v1과 v2 사이의 각도를 찾고 포인트를 생성하십시오. this을 사용하여 각도를 찾을 수 있습니다.