检测顶点是否在点列表内(立方体)

时间:2014-12-09 13:59:47

标签: c++ math 3d

我想查找一个顶点是否在C ++程序中的多维数据集内。

举个例子,我想找到位于立方体内的环面的所有顶点。

Image enter image description here

我将如何继续这样做,因为我知道我的立方体只是一个要开始的点列表(我正在解析.obj文件)

例如,我的立方体顶点:

v  -56.269790649414 -100.226547241211 -29.616094589233
v  3.730209350586 -100.226547241211 -29.616094589233
v  -56.269790649414 -40.226547241211 -29.616094589233
v  3.730209350586 -40.226547241211 -29.616094589233
v  -56.269790649414 -100.226547241211 30.383905410767
v  3.730209350586 -100.226547241211 30.383905410767
v  -56.269790649414 -40.226547241211 30.383905410767
v  3.730209350586 -40.226547241211 30.383905410767

实现这一目标的最佳实践/算法是什么(光线投射?)

2 个答案:

答案 0 :(得分:1)

对于任意网格(不仅仅是立方体),您可以从要测试的点生成光线,并查看光线与网格相交的次数。对于偶数个交叉点(包括零)=>点在外面,对于奇数个交点=>点在里面。但是如果你可以将你的立方体带到原点并沿轴对齐它可能会更快。那么这只是一个问题或三个ifs。

答案 1 :(得分:0)

显然你的立方体是轴平行的,所以检查要测试的顶点是否位于平行边平面切片的交叉点就足够了。换句话说,轴平行立方体是它自己的边界框。让

x_max = maximum x-coordinate of the cube
x_min = minimum x-coordinate of the cube
y_max = maximum y-coordinate of the cube
y_min = minimum y-coordinate of the cube
z_max = maximum z-coordinate of the cube
Z_min = minimum z-coordinate of the cube

当且仅当

时,立方体中包含点(x,y,z)
x_min <= x <= x_max && y_min <= y <= y_max && z_min <= z <= Z_max

但是,如果立方体实际上不是轴平行的,那么事情会更复杂。