平面与地形算法相交

时间:2010-07-17 06:40:01

标签: c# graphics

我有一个地形,由元素和坐标表示(它们只是一个网格列表),我有一个平面。

如何找到飞机与地形的交点?我是否应该将平面分成一系列线,然后使用光线投射技术或其他技术来计算交叉点列表,并将它们连接在一起?或者还有其他方法吗?

This question这是我的问题的一个特例,其中我实际上通过将平面分成许多线来离散平面,并找到交点以获得平面与平面相交的线。地形,但我真的很想知道是否有更好的方法。

1 个答案:

答案 0 :(得分:0)

  1. 使用隐式方程定义平面。找到a,b,c和d,使得平面上所有(x,y,z)的ax + by + cz + d = 0
  2. 浏览定义地形一段的每个方格。将正方形解释为两个独立的三角形
  3. 对于三角形的每个顶点v1 =(x1,y1,z1),v2 =(x2,y2,z2),v3 =(x3,y3,z3),确定它所在平面的哪一侧:
    • l1 = a x1 + b y1 + c * z1 + d
    • l2 = a x2 + b y2 + c * z2 + d
    • l3 = a x3 + b y3 + c * z3 + d
  4. 现在有两种选择。
    • l1,l2,l3都是> 0或l1,l2,l3都是< 0 - 在这种情况下,平面不与三角形相交,你无事可做。
    • 或l值中的两个是正/负,而第三个是相反的,例如, l1> 0,l2> 0和l3 <0 - 然后三角形边缘v1-v3和v2-v3正在交叉
  5. 边缘平面交点易于计算。假设v1-v2边缘相交:
    • xi =(x1 * l1 - x2 * l2)/(l1 - l2)
    • yi =(y1 * l1 - y2 * l2)/(l1 - l2)
    • zi =(z1 * l1 - z2 * l2)/(l1 - l2)
  6. 这样,您将获得与平面与地形的交点相对应的边列表。这是一种缓慢的方法,但很容易解释......如果你想加快速度,你需要使用八叉树或类似的数据结构来限制你需要做的点/平面测试的数量。