2009-05-01 5 views

답변

9

trimesh가 이라고 가정하면 (볼록하지 않든 그렇지 않든) 방법이 있습니다!

dmckee가 지적한 것처럼, 일반적인 접근법은 각 표면 삼각형에서 사면체를 형성 한 다음 명백한 수학을 적용하여 각 tet의 질량 및 순간 기여도를 합산합니다. 속임수는 몸의 표면이 참조 점이 무엇이든간에 볼 때 내부 포켓을 만드는 오목면을 가질 때 발생합니다.

시작하려면 시작점을 선택하십시오 (모델 좌표의 원점이 잘 작동 함). 몸 안쪽에있을 필요도 없습니다. 모든 삼각형에 대해 삼각형의 세 점을 참조 점에 연결하여 사면체를 형성합니다. 위의 트릭은 다음과 같습니다. 삼각형의 표면 법선을 사용하여 삼각형이 참조 점을 향하거나 멀리 향하는 지 알아냅니다 (법선의 내적 부호와 중심을 나타내는 벡터의 부호를보고 찾을 수 있음) 삼각형의). 삼각형이 기준점에서 멀어지는 경우 질량과 모멘트를 정상적으로 처리합니다. 그러나 기준점을 향하고 있으면 (기준점과 솔리드 바디 사이에 빈 공간이 있음을 의미) 해당 테트에 대한 결과를 무효화합니다 .

효과적으로 볼륨의 덩어리를 초과 한 다음 해당 영역이 솔리드 바디의 일부가 아닌 것으로 표시되면 수정합니다. 시체에 많은 수분이 많은 플랜지와 그로테스크 한 주름이 있다면 (그 이미지를 가지고 있습니까?), 볼륨의 특정 부분은 상당한 요소에 의해 과잉 계산 될 수 있습니다. 그러나 메쉬가 있으면 그것을 제거하기에 충분한 시간을 뺍니다 닫은. 이 방법으로 작업하면 객체의 내부 공간 거품을 처리 할 수도 있습니다 (법선이 올바르게 설정되었다고 가정). 또한 각 삼각형을 독립적으로 처리 할 수 ​​있으므로 원하는대로 병렬 처리 할 수 ​​있습니다. 즐겨!

사후 고려 사항 : 해당 내적 제품이 0 또는 그와 비슷한 값을 가질 때 어떤 일이 발생하는지 궁금 할 수 있습니다. 이것은 삼각형면이 평행 (법선이 수직 일 때) 인 경우에만 발생합니다. 어쨌든 작거나 0 인 영역을 가진 퇴화 된 tets에서만 발생합니다. 즉, tet의 기여도를 더하거나 뺀다는 결정은 tet가 아무 것도 기여하지 않을 때만 의문의 여지가 있습니다.

+2

니스. 나는 이것을보아야했다. 점이 내부 또는 외부의 도형이라면 이전의 "교차점 계산"접근법을 학습의 연장으로 확장 한 것입니다. – dmckee

1

나는 이걸 계산하기위한 상당히 견고한 알고리즘이다.

1

개체를 선택한 내부 점을 중심으로 tetrahedrons 세트로 분해합니다. (각 삼각형면 요소와 선택된 중심을 사용하는 솔리드입니다.)

각 요소의 볼륨을 검색 할 수 있어야합니다. moment of inertia도 사용할 수 있습니다.

표면이 볼록하지 않으면 오히려 더 문제가됩니다.


필자는 명칭으로 기억이 잘못되어있는 것처럼 보였고, 왜곡은 내가 원한 형용사가 아니 었습니다. 나는 비정규라는 뜻.

+0

물체가 볼록하지 않은 경우 (때로는 그렇다고하더라도), tets 로의 테셀레이션은 단순히 질량을 직접 계산하는 것보다 훨씬 더 복잡합니다. –

+0

@ 리피드 코세이지 : 나는 당신의 말씀을 받아 들일 것입니다. 내가 제공 한 솔루션은 확실히 순진합니다. – dmckee

1

다단계가 복잡하면 다차원 적분에 자주 사용되는 몬테 카를로 통합을 사용하는 것이 좋습니다.둘러싼 하이퍼 큐브가 필요하며, 주어진 점이 다면체 내부 또는 외부에 있는지 테스트 할 수 있어야합니다. 몬테 카를로 통합이 느려지므로 인내심을 가져야합니다.

위키 피 디아에서 평상시처럼 시작한 다음 추가 링크를 보려면 외부 링크 페이지를 따르십시오.

몬테카를로 통합에 익숙하지 않은 분은 여기에 포함 된 하이퍼 큐브의 한 점을 선택하고 point_total 카운터에 추가합니다. 다면체입니까? 그렇다면 point_internal 카운터에 추가하십시오. 이 많은 (융합 및 오류가 견적을 바인딩을 참조하십시오.) 그런 다음

mass_polyhedron/mass_hypercube \approx points_internal/points_total.

을 관성 모멘트를 들어, 기준 축에 지점의 거리의 제곱에 의해 각 수를 가중치.

까다로운 부분은 포인트가 내부에 있는지 테스트하는 것입니다. 또는 당신의 다면체 밖에서. 나는 거기에 계산 기하학 알고리즘이 있다고 확신한다.

1

D. Eberly의 "Game Physics, Second Edition"책에서 다룹니다. chapter 2.5.5 및 샘플 코드는 온라인에서 사용할 수 있습니다. (방금 발견했지만 아직 시도하지 않았습니다.)

또한 다면체가 수식에 대해 볼록 할 필요는 없으며 단지 simple이어야합니다.