如果我有一个点数组(x,y,z)并给出一个单点(x,y,z),我用什么代码来确定该点是否位于数组定义的形状内?
我在这个上画了一个空白......
我正在使用C#
修改
感谢回复人员,从评论中我发现了这个链接(http://alienryderflex.com/polygon/),这很好地解释了这个过程。
谢谢!
供参考:
bool pointInPolygon() {
int i, j=polySides-1 ;
boolean oddNodes=NO ;
for (i=0; i<polySides; i++) {
if (polyY[i]<y && polyY[j]>=y
|| polyY[j]<y && polyY[i]>=y) {
if (polyX[i]+(y-polyY[i])/(polyY[j]-polyY[i])*(polyX[j]-polyX[i])<x) {
oddNodes=!oddNodes; }}
j=i; }
return oddNodes; }
这需要一些工作,但这就是它的内涵。
再次感谢
答案 0 :(得分:16)
使用您知道在形状之外的点,并检查从该点到给定点的直线是否穿过该形状的曲面。如果它通过奇数个曲面,则给定的点在形状内。
答案 1 :(得分:2)
除了Guffa的答案之外,确定一条线是否与一个表面相交比它听起来更难。这是背后的数学:Intersection of lines and planes。你必须采用那个基本算法(包括找到每个表面到该点的法线,然后确定法线和线之间的角度,形成一个右三角形,你找到第三个点; WPF的Media3D库在点上有功能和使所有这些更容易的矢量),然后确定您找到的点是否与该表面的边界内的表面平面相交。要做到这一点,您可以对该表面进行任何2D投影,其面积为&gt; 0,并执行“多边形点”测试,这是你试图做的“多面体点”测试的2D版本。
祝你好运。