2014-12-08 4 views
6

두 개의 폴리곤 세트 사이를 삼각형 분할하고 싶습니다. 하나의 세트는 항상 다른 세트의 내부에 있습니다. 사실, 바깥 쪽 다각형은 원래 세트의 오프셋으로 생성됩니다. 삼각형 분할은 같은 평면에 있으면 쉽지만 외부 폴리곤을 평행하지만 다른 평면으로 이동하여 깊이를 추가하고 싶습니다. 내가 사용하는 삼각형 화를위한 일반적인 방법 (glu tesselator)은 작동하지 않습니다. 그 대안이 있을까요?다른 평면에있는 폴리곤 간의 삼각 분할

+3

나는 당신이 원하는 것을 이해하지 못합니다.더 명확하게 설명 할 수 있습니까? 일러스트와 함께? 소스 데이터가 무엇입니까? 끝내고 싶은게 뭐야? 예제를 추가 할 수 있습니까? 감사합니다 :) –

+0

글꼴에서 만든 일련의 등고선 (또는 다각형) 있습니다. 또한 첫 번째 세트에서 지정된 오프셋에 외곽선으로 작성된 다른 일련의 윤곽이 있습니다. 나는 이것들에서 3D 모델을 만들고 윤곽선을 경 사진 모서리로 사용하고 싶습니다. 그러나 모든 윤곽선이 같은 평면에 있지 않으면 보통 제가 사용하는 glu 테셀레이터는 실패합니다. – aronsatie

+0

실제로 다각형에 3 개의 꼭지점이 모두있는 삼각형을 만들지 않도록 강제로 삼각 폴리곤을 만들 수 있다면 솔루션을 얻을 수 있습니다. – aronsatie

답변

5

2D에서 작동하는 삼각 측량 방법이 있다고 말합니다. 벌금. 두 윤곽을 같은 평면에 놓고 z = 0, 2D 삼각 측량을 수행 한 다음 바깥 윤곽의 정점 ​​좌표 을 필요한 값으로 설정합니다. 앞에서 말한 것처럼 외부 윤곽선을 평행 평면으로 이동합니다.

왜이 방법이 적합하지 않습니까?

예, 세 개의 꼭지점 모두에 z 좌표가있는 몇 개의 수평 삼각형이 생길 수 있습니다. "실제"3D 삼각 측량을 사용하면 동일한 수평 삼각형으로 끝날 수도 있습니다. 그것은 모두 형상과 알고리즘의 모양에 달려 있습니다.

이 같은 수평 삼각형을 가지고 허용하지 않으면 당신이 그들을 제거하려고 두 번째 패스를 추가 할 수 있습니다

수평 삼각형을 찾을 수 있습니다. 두 개의 가장자리는 원본 내부 또는 원래 외부 윤곽 중 하나에 속합니다. 세 번째 가장자리는 원래 윤곽의 정점을 "단락"합니다. 위에서 설명한 "세 번째"모서리와 같은 모서리를 가진 다른 삼각형을 찾습니다. 이 삼각형 쌍은 마름모를 이룹니다. 마름모를 삼각형 화하는 데는 두 가지 방법 밖에 없습니다. 당신이 가지고있는 것은 받아 들일 수 없기 때문에 다른 방법으로 마름모꼴을 다시 삼각형 화합니다.

그림이 없으면 설명하기 어렵습니다.

+0

나는 너를 완벽하게 이해한다고 생각한다. 나는 잘못된 삼각형을 바로 잡을 생각을했지만, 방금 제안한 것을 생각해 내지 못했습니다. 이것이 아주 좋은 해결책 인 것처럼 보이기 때문에 나는 그것에 대해 확실히 생각할 것입니다! – aronsatie

+0

이보다 조금 더 복잡해 보입니다. 나는 하나의 '거짓'삼각형 이상의 것을 얻었으므로, 청소는 마름모꼴로 대체 삼각형을 만드는 것 이상의 것을 요구합니다. 아직도 이것이 이것이가는 길이라고 생각합니다. 누군가가 더 좋은 아이디어를 가지고 있지 않으면, 현상금은 당신 것이어야한다고 생각합니다. – aronsatie

+0

음, 그렇습니다. 초기 삼각 측량 후에는 서로 인접한 거짓/편평/수평 삼각형이 많이 생길 수 있습니다. 두 번째 패스가 여러 번 실행되어야 함을 의미합니다. "수정"프로세스를 실행할 때마다 하나의 평평한 삼각형이 수정됩니다. 해결할 삼각형을 찾을 수 없으면 루프를 중지하십시오. 또한 평평한 삼각형뿐만 아니라 외부 윤곽에 속한 하나 이상의 꼭지점과 내부 윤곽에 속하는 하나 이상의 꼭지점이있는 그런 평면 삼각형을 찾아야합니다. 평평한 삼각형의 모든 꼭지점이 같은 컨투어에 속하면 수정할 수 없습니다 (아직이 패스에서). –

3

IMO 외곽 다각형을 움직일 때 예를 들어 외곽선을 사용하여 3 차원 삼각 측량을 시도 할 수 있습니다. Cgal은 3D 삼각 측량을 할 수 있습니다. 난 당신이 제대로 요구하는지 이해하는 경우가 종종있어이
an example extrusion처럼 압출라는 일을하려는 것처럼

+0

더 작고 간단한 것들을 알고 있습니까? 나는 하나의 작업을 위해 큰 라이브러리를 피하는 것을 선호한다. – aronsatie

+0

@aronsatie : 아니요. 그러나 알고리즘을 시도 할 수 있습니다 (예 : 외계인이있는 bowyer-watson). 사실 그것의 cgal 알고리즘. – Bytemain

+0

고마워, 내가 살펴 보겠다. 내 윤곽이 임의의 일련의 점이 아니기 때문에 나는 더 간단한 해결책을 원했다. 원본 폴리곤과 오프셋으로 계산 된 수정 된 버전 사이를 삼각 분할하고 싶습니다. 오프셋은 원본과 평행 한 다른 평면으로 이동하기 때문에 문제는 단지 3D입니다. – aronsatie

3

, 그것은 소리.
OpenGL을 위해 할 수있는 많은 글꼴 라이브러리가 있습니다. 이 page에 대한 정보는 다소 날짜가 있지만, GLTT에 대한 좋은 소식을 들었습니다.

직접 해보고 싶다면 두 윤곽선을 연결하는 단순한 삼각형 스트립으로 빠져 나갈 수 있습니다. [수학적 그래프의 의미로 연결되어 있다고 가정하고] 테셀레이터가 필요하지 않을 수 있습니다. 첫 번째 윤곽선 생성).

"내부"윤곽선이 테셀레이터에서 방출 된 윤곽선이라고 가정하고 그 주변 정점을 기록합니다. 그런 다음 여러분이 말하듯이 각 내부 정점을 오프셋 (아마도 정점에서 접선과 직각을 이루는 등)을 사용하여 오프셋으로 변환하여 "외부"윤곽 (오프셋하려는 윤곽)을 만듭니다 그런 다음 돌출 깊이를 추가하십시오. 동일한 일반 토폴로지 (즉, 각 버텍스에 대해 동일한 수의 버텍스 및 동일한 연결 정보)를 유지하면 그 컨투어 세트를 단일 삼각형 스트립으로 "스티치"할 수 있습니다. 찾고자하는 효과에 따라 외부 윤곽에 꼭지점을 추가해야 심미적으로 기분을 좋게 할 수 있습니다. 그것은 실제 문제가 아닙니다. 윤곽선을 연결하는 삼각형 스트립이 조금 더 복잡해집니다.

+0

이미 원본과 오프셋의 정점이 있습니다. 오프셋은 그보다 조금 더 복잡하기 때문에 점의 수가 다릅니다. 그것들을 함께 연결하는 것은 내가 현재하려고하는 것이기는하지만 사소한 것이 아닙니다. 날카로운 변화에도 여전히 문제가 있습니다. – aronsatie