2010-07-06 7 views
3

Je suis totalement vide d'esprit en ce moment.Position de l'intersection d'un vecteur 3d et d'un cube

J'ai un cube (voxel) qui est défini par un point central et une largeur, hauteur et profondeur de 1. Si j'ai un vecteur avec une origine du centre de la boîte (par exemple (-0.7, - 0.7, -0.7)) comment calculer le point d'intersection du vecteur avec l'extérieur de la boîte?

EDIT: La boîte est toujours alignée sur l'axe. Le problème est en 3D.

Merci

+0

(Désolé pour ne pas comprendre) Si votre boîte est en 3D mais votre vecteur est 2D, vous pouvez sûrement jamais savoir si elle a recoupé une face du cube. –

+0

Je pense que vous voulez utiliser l'algorithme de Liang-Barsky. Voir: http://en.wikipedia.org/wiki/Liang%E2%80%93Barsky et http://www.siggraph.org/education/materials/HyperGraph/scanline/clipping/cliplb.htm – jts

+0

Désolé , essayait de commencer en 2D, puis en 3D. Ce devrait être un vecteur 3D. – paintstripper

Répondre

2

Tout point sur la surface de votre boîte aura au moins une coordonnée égale à 0,5 ou -0,5, et tous les autres seront -0,5 < = c < = 0,5. Donc, trouvez la coordonnée avec la plus grande valeur absolue, puis redimensionnez le vecteur pour que cette coordonnée soit égale à +/- 0,5.

Quelque chose comme cela pourrait fonctionner:

if (fabs(x) > fabs(y) && fabs(x) > fabs(z)) 
    y *= 0.5/fabs(x) 
    z *= 0.5/fabs(x) 
    x *= 0.5/fabs(x) 
else if (fabs(y) > fabs(z)) 
    x *= 0.5/fabs(y) 
    z *= 0.5/fabs(y) 
    y *= 0.5/fabs(y) 
else 
    x *= 0.5/fabs(z) 
    y *= 0.5/fabs(z) 
    z *= 0.5/fabs(z) 
+0

Est-ce que cela suppose que le vecteur est normalisé? – paintstripper

+0

Non, il n'a pas besoin d'être normalisé –

+0

Ok, cela semble fonctionner. Nice and simple - Merci, c'est exactement ce dont j'avais besoin. – paintstripper

Questions connexes