【问题标题】:Calculating the Area of Intersection Between a Plane and Rectangular Prism计算平面和矩形棱柱的相交面积
【发布时间】:2013-07-16 18:08:06
【问题描述】:

如果我有一个平面,比如说 xy 平面和一个可以在 3 维中任意旋转/平移的矩形棱镜。有什么很酷的算法/方法可以用来确定两者之间的交集区域吗?

【问题讨论】:

    标签: algorithm math geometry


    【解决方案1】:

    一种方法是明确找到棱镜和平面之间的多边形相交区域R,对R 进行三角剖分,然后将三角形的面积相加得到总相交面积。

    相交多边形R 的顶点可以通过在棱镜边缘和平面之间执行一系列line-plane intersection tests 来找到。

    根据平面/棱镜的相对方向,相交的多边形可以采用多种不同的配置(即它并不总是一个矩形!)。给定一个规则棱镜,相交区域应该始终是凸面的,允许triangulation to be obtained as a simple fan

    给定R 的三角剖分,相交的总面积就是三角形面积的总和。

    【讨论】:

      【解决方案2】:

      一旦有了多边形的交集区域,就不需要对其进行三角剖分来计算其面积。有一个更简单的算法:

      float area = 0.0f;
      // Run through all segments
      for (int i = 0; i < corners.Length; i++)
      {
          // Get end points of segments
          Vector2 A = corners[i];
          Vector2 B = corners[(i+1) % corners.Length];
      
          // Add the signed(!) area of a quadrangle with two corners A, B 
          // and two corners with same y values on the y axis
          // 
          //   |---------A
          //   |    +   /
          //   |-------B
          // 
          //   |-------B
          //   |    -   \
          //   |---------A
          // 
          area += 0.5f * (A.x + B.x) * (B.y - A.y);  
      }
      

      参照。 http://alienryderflex.com/polygon_area/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多