2016-07-26 44 views
-5

我需要尽可能好的解决方案,并且如果可能的话,不要弄脏代码,而应该使用一些智能代码。确定一个点是否在3D立方体中

我不熟悉3D编程。

我必须编写一个函数,如果一个点在3D空间(x,y,z)中,将返回该函数。将提供空间立方体的范围(例如范围{{1,2,1},{5,6,4}})

任何想法?

+4

您是否想过通过该问题?例如,你会如何确定x坐标满足单轴? –

+1

这功课吗?这不是一个问题,但不期望完整的“聪明”的代码。正确方向的指针会帮助你更多。 – Jamiec

+0

如果您对3D编程不熟悉,我想您要么找到(并支付)某人或自己学习它。 –

回答

2

测试给定点是否具有位于点之间的所有坐标就足够了。因此,如果(x1,y1,z1)是最小拐角并且(x2,y2,z2)是最大点,为了测试点(x,y,z),测试验证x1 = < = x< = x2,类似于y和z。

如果这看起来不太明显,只要认识到与坐标轴对齐的立方体是位于平面x = x1左侧的区域和位于平面y = y1上方的平面x = x2右侧的区域,并且低于y = y2等。立方体中的点是同时满足所有六个不等式的点。这正是你正在验证的内容。

如果立方体未与坐标轴对齐,则无法从两个角落确定它。相反,它是通过给予确定尺寸面的平面的不等式来描述的。你需要检查所有六个都满意。这总是可以写成矩阵不等式。在这种情况下,一个6x3的矩阵,三个列,因为这些点在三维空间中,每个约束一行。这是一般情况,但是如上所述对于这个问题是过度的。

+0

嗯。可能工作。我明白,可以使用矩阵,但男人我的数学生锈 – Systellence

+0

是的,你可以使用矩阵,但这是矫枉过正。如果您的立方体始终与坐标平面对齐,那么此解决方案是正确的,因为立方体是x坐标位于x1和x2之间,y坐标位于y1和y2之间的点集合等。 –

+1

只需注意标志 - 例如,如果P1是(-10,10,-10),P2是(10,-10。10) –

0

例如,您可以计算3个投影(对于每个轴)。 例如,如果你想有一个对应Z斧头你可以从你的观点抹去Z值的投影坐标:

projection({1,2,3}) -> {1,2} 

然后就是确定是投影(点)内的广场,也只是投影底部(或顶部)4点。 Ansher轴相同。

1

p = (x, y, z)位于立方体内部,当点的坐标位于x,y和z的相应范围内时,该点延伸为[x_0, x_1] x [y_0, y_1] x [z_0, z_1]。这是伪

bool PointIsInCube(Point3D p, float x_max, float x_min, float y_max, float y_min, float z_max, float z_min) 
    { 
     return (p.x <= x_max && p.x >= x_min) && (p.y <= y_max && p.y >= y_min) && (p.z <= z_max && p.z >= z_min); 
    } 

有了您给立方体的间隔是[1,5]×[2,6]×[1,4]如果我没看错。 (x的第一个区间,y的第二个区域,z的第三个区域)