确定(x,y,z)点是否在由点阵列定义的形状内

时间:2011-02-10 21:44:34

标签: c# arrays shapes point shape

如果我有一个点数组(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; }

这需要一些工作,但这就是它的内涵。

再次感谢

2 个答案:

答案 0 :(得分:16)

使用您知道在形状之外的点,并检查从该点到给定点的直线是否穿过该形状的曲面。如果它通过奇数个曲面,则给定的点在形状内。

答案 1 :(得分:2)

除了Guffa的答案之外,确定一条线是否与一个表面相交比它听起来更难。这是背后的数学:Intersection of lines and planes。你必须采用那个基本算法(包括找到每个表面到该点的法线,然后确定法线和线之间的角度,形成一个右三角形,你找到第三个点; WPF的Media3D库在点上有功能和使所有这些更容易的矢量),然后确定您找到的点是否与该表面的边界内的表面平面相交。要做到这一点,您可以对该表面进行任何2D投影,其面积为&gt; 0,并执行“多边形点”测试,这是你试图做的“多面体点”测试的2D版本。

祝你好运。