2010-07-06 83 views
3

此刻此刻我对此有一个总体空白。3d矢量与立方体的交点位置

我有一个由中心点和宽度,高度和深度定义的立方体(体素)。 如果我有一个从框中心起点的向量(例如(-0.7, - 0.7,-0.7))如何计算矢量与盒子外部相交的点?

编辑:框始终与轴对齐。 问题在于3d。

由于

+0

(对不起,我不理解)如果你的盒子是3D的,但你的载体是2D的,想必你永远无法知道它是否相交的立体面。 – 2010-07-06 07:00:18

+0

我想你想要使用Liang-Barsky算法。参见: http://en.wikipedia.org/wiki/Liang%E2%80%93Barsky and http://www.siggraph.org/education/materials/HyperGraph/scanline/clipping/cliplb.htm – jts 2010-07-06 07:00:41

+0

对不起,试图先用2D处理它,然后转换到3D。它应该是一个3D矢量。 – paintstripper 2010-07-06 07:04:09

回答

2

你的盒子将具有的表面上的任何点的至少一个坐标等于0.5或-0.5,和所有其他人将-0.5 < = C < = 0.5。

因此,找到绝对值最大的坐标,然后缩放矢量使该坐标等于+/- 0.5。

像这样的东西可能会奏效:

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

这是否假设矢量被归一化? – paintstripper 2010-07-06 07:32:08

+0

不,它不需要正常化 – 2010-07-06 07:37:31

+0

好吧,这似乎工作。好而简单 - 谢谢,这正是我需要的。 – paintstripper 2010-07-06 07:51:05