我想查找一个顶点是否在C ++程序中的多维数据集内。
举个例子,我想找到位于立方体内的环面的所有顶点。
我将如何继续这样做,因为我知道我的立方体只是一个要开始的点列表(我正在解析.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
实现这一目标的最佳实践/算法是什么(光线投射?)
答案 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
但是,如果立方体实际上不是轴平行的,那么事情会更复杂。