繁体   English   中英

平面与地形算法相交

[英]Plane To Intersect with Terrain Algorithm

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

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

这个问题是我这里问题的特例,其中我实际上是通过将平面分成很多线来离散化平面,并找到相交点以获得平面与地形相交的线,但我真的很奇怪有没有更好的方法。

  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)

这样,您将获得与平面与地形相交的边线列表。 这是一种缓慢的方法,但是很容易解释...如果您想加快速度,则需要使用八叉树或类似的数据结构来限制需要进行的点/平面测试的数量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM