2017-09-20 12 views
0

Si nous avons une boîte non alignée sur les axes, comment pouvons-nous mieux vérifier si un point se trouve à l'intérieur? (J'utilise three.js, donc n'importe quel utilitaire à partir de là peut être utile .. Three.js contient le concept de la boîte englobante, mais c'est la boîte englobante alignée sur l'axe)Comment déterminer si le point est dans la boîte (three.js)?

+0

Comment est votre boîte non-axe aligné mis en non-alignement? Utilisez-vous une transformation, ou est-ce la géométrie qui est explicitement positionnée dans une telle orientation? – TheJim01

+0

Il y a beaucoup d'approches. Quel est le meilleur - dépend de la façon dont cette boîte est définie. – MBo

+0

@ TheJim01 Je crée la boîte, la traduis et la fais tourner. – croraf

Répondre

1

Si votre boîte est une TROIS.BoxGeometry pivotée, traduit et mis à l'échelle, vous pouvez utiliser la matrice de transformation m pour trouver si elle croise votre point v:

  • transform v et la boîte par l'inverse de m
  • vérifier si transformé v est à l'intérieur de la transformée boîte (qui est maintenant alignée sur l'axe)

Voici le code:

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); 

Et voici une démonstration en cours d'exécution: https://jsfiddle.net/holgerl/q0z979uy/

+0

C'était ma première idée. Si c'est la meilleure approche, ils devraient faire une méthode utilitaire dans three.js qui fait cela. – croraf

+1

@croraf J'ai changé ma réponse pour une approche plus générale et j'ai ajouté le code qui fait cela maintenant. Est-ce que ça marche pour toi? –

+0

@HolgerL Vous instanciez inutilement 240 objets par seconde. – WestLangley