정말 귀하의 질문에 세 부분이 아닌 두 가지가 있습니다
- 어떤 데이터 구조해야 메쉬를 나타내는 데 사용됩니까?
- 메쉬 데이터 구조에서 에지를 추출하기 위해 어떤 알고리즘을 사용해야합니까?
- 결과로 나타나는 모서리 세트는 어떻게 표현되어야합니까?
적절한 답변을 찾으려면 추가 질문이 필요합니다.
메쉬를 나타 내기 위해 사용되는 데이터 구조는 무엇입니까?
처리해야하는 요소 유형은 무엇입니까?
다각형 (닫힌 루프)과 단순한 노드 (모든 노드가 4 면체와 같이 요소의 모든 다른 노드에 연결됨) 만 처리해야하는 경우 가장자리가 포함될 수 있으므로 순서가 지정된 노드 목록이면 충분합니다. 노드 목록. 한편, 육면체, 프리즘 또는 일반적인 다면체와 같은 요소 유형을 처리해야하는 경우 요소 토폴로지에 대한 추가 정보가 필요합니다. 가장자리 매핑의 간단한 배열로도 충분합니다. 이것은 주어진 요소 유형에 대해 도트를 연결하는 방법을 알려주는 요소의 노드 목록에 대한 배열의 배열 [2]입니다.
Chris가 설명한 하프 엣지 구조는 2D에만 적합합니다. 3D에서는 두 개가 아닌 각 가장자리에 임의의 수의 요소가 부착 될 수 있습니다. 제 생각에는 핀휠 구조라고 불리는 하프 에지 표현에 대한 3D 확장이 있습니다.
임의의 요소 유형을 지원해야하는 경우 요소 토폴로지를 나타내는 데 더 완전한 데이터 구조를 선호합니다. 일반적인 옵션은 가장자리와 가장자리를 사용하는 것입니다. 연결된 각 쌍의 노드에 대한 에지 구조가 있으며 요소의 각 에지 사용에 대한 공동 에지가 있습니다. 이것은 바람개비 접근 방식과 비슷하지만 좀 더 명확합니다.
요소에서 가장자리를 추출하는 데 사용해야하는 알고리즘은 무엇입니까?
속도 또는 메모리의 중요도는 어느 정도입니까? 결과에는 요소 당 한 번씩 각 가장자리가 포함되어야합니까? 아니면 몇 개의 요소가 사용되던 지 한 번만 포함해야합니까? 결과의 가장자리 순서가 중요합니까? 각 가장자리의 노드 순서가 중요합니까?
각 가장자리를 한 번만 방문하는 임의의 요소 유형에 대한 알고리즘을 생각해내는 것은 꽤 어렵습니다. 각 엣지가 한 번만 나타나게하려면 결과를 필터링하거나 조금씩 해치울 수 있고 각 엣지에 "방문한"비트를 유지하여 결과에 두 번 겹치지 않도록 할 수 있습니다.
어떻게 결과를 나타내야합니까?
결과를 사용하는 방법에 대해 중요한 점은 무엇입니까?
계산 집약적 인 계산에서 결과를 사용하려는 경우 큰 좌표 배열이 최선의 방법 일 수 있습니다. 계산 중에 노드 좌표를 계속해서 다시 가져오고 싶지는 않습니다. 그러나 중복 에지를 제거하기 위해 결과를 필터링하는 경우 좌표 (노드 쌍의 경우 6 배)를 비교하는 것은 길이 아닙니다. 필터링하는 경우 먼저 가장자리 구조에 대한 포인터 목록을 생성 한 다음 중복을 필터링하면 이 표시되고은 좌표 목록을 생성합니다. 이 접근법을 노드 쌍에도 사용할 수 있지만 가장자리 당 두 노드 주문에 대해 필터링해야하므로 필터링하는 데 걸리는 시간이 두 배로 늘어납니다.
메모리보다 성능이 중요 할 경우 에지 포인터 목록을 사용할 수도 있습니다. 그러나 가장자리 목록을 좌표 목록으로 변환하는 대신 계산 중에 좌표를 조회합니다. 노드 좌표를 얻는 것은 그렇게 느리지 만 커다란 좌표 목록을 만드는 것을 피할 수 있습니다. 가장자리 당 6 개의 double 대신에 가장자리 당 하나의 포인터를 저장합니다.
많은 메시 응용 프로그램은 모든 좌표를 큰 전역 배열에 저장하며 각 노드에는 배열에 대한 인덱스가 있습니다. 이 경우 가장자리 목록을 좌표 배열로 변환하는 대신 전역 좌표 배열로 색인 목록으로 변환하십시오. 퍼포먼스는 로컬 좌표 배열에서 많이 떨어져서는 안되지만 메모리와 퍼시스턴트 오버 헤드없이 이루어져야합니다.