2017-09-20 3 views
0

축이 정렬되지 않은 상자가있는 경우 내부에 점이 있는지 가장 쉽게 확인할 수 있습니까? (나는 three.js를 사용하고 있기 때문에 거기에서 어떤 유틸리티도 도움이 될 수 있습니다 .Sub.js는 테두리 상자 개념을 포함하고 있지만 축 정렬 경계 상자입니다.)포인트가 상자 안에 있는지 확인하는 방법 (three.js)?

+0

? 변형을 사용하고 있습니까? 아니면 그러한 방향으로 명시 적으로 배치 된 형상입니까? – TheJim01

+0

많은 접근법이 있습니다. 무엇이 최선인가 - 그 상자가 어떻게 정의되는지에 달려있다. – MBo

+0

@ TheJim01 상자를 만들고 번역 한 다음 회전합니다. – croraf

답변

1

상자가 THREE.BoxGeometry 인 경우 v를 변환하는 경우 변환 된 내부

  • vm
  • 검사 역으로 상자를 변환 : 그것은 당신의 점 v 교차하는 경우는 회전은, 번역 및 조정, 당신은 찾기 위해 변환 행렬 m을 사용할 수 있습니다 상자 (이제 축 정렬 됨)
  • 여기

코드입니다 :

var box = <Your non-aligned box> 
var point = <Your point> 

box.geometry.computeBoundingBox(); // This is only necessary if not allready computed 
box.updateMatrixWorld(true); // This might be necessary if box is moved 

var boxMatrixInverse = new THREE.Matrix4().getInverse(box.matrixWorld); 

var inverseBox = box.clone(); 
var inversePoint = point.clone(); 

inverseBox.applyMatrix(boxMatrixInverse); 
inversePoint.applyMatrix4(boxMatrixInverse); 

var bb = new THREE.Box3().setFromObject(inverseBox); 

var isInside = bb.containsPoint(inversePoint); 

그리고 여기 실행중인 데모입니다 https://jsfiddle.net/holgerl/q0z979uy/

이 아닌 축 정렬 상자가 비 정렬에 넣고 어떻게
+0

이것은 내 첫 번째 아이디어였다. 이것이 최선의 접근 방법이라면, 그들은 이것을하는 three.js에서 유틸리티 메소드를 만들어야합니다. – croraf

+1

@croraf 좀 더 일반적인 접근 방식으로 나의 대답을 바꾸고 이제는이 코드를 추가했습니다. 이 방법이 효과가 있습니까? –

+0

@HolgerL 초당 240 개체를 불필요하게 인스턴스화합니다. – WestLangley

관련 문제