繁体   English   中英

一个球体和许多线段相交

[英]one sphere and many line segments intersection

对于一般的射线原始相交查找问题,我熟悉BSP,KD-tree和BVH。 是否有更有效的算法和数据结构可用于仅查找一个球体和许多线段之间的交点? 请注意,球体是查询对象。

一种解决方案是:

  • 确定线段的边界框并从中创建BVH或kd树。
  • 确定查询领域的边界框。
  • 在相交算法中,通过检查球体的BB与当前节点之间的重叠来使球体穿过树。
    • 如果没有重叠,则球体的BB不会与给定节点中的任何线段相交,并且您可以跳过该节点的子级。
    • 如果有重叠,请遍历节点的子代。
    • 在叶节点处,您必须对节点和球体中的每个线段执行射线相交测试(尚不清楚您的问题,但我假设多个线段可以与球体相交,并且您对所有这些都感兴趣交集)。 您可以像这样优化实际的相交测试:

假设

  • 球体的半径为R ,其中心位于C点,
  • 线段的端点在P0P1
  • D0CP0之间的距离,并且
  • D1CP1之间的距离。

然后:

  • 如果D0 < R并且D1 < R ,则线段完全包含在球体内,并且不与曲面相交。

  • 如果D0 < R x或D1 < R ,则线段与球体表面相交。

  • 否则,这些点将在球体外部,但该线可能与曲面相交,因此请进行常规的射线-球体相交测试。

进一步的优化将是比较平方距离与平方半径,以避免取根。

暂无
暂无

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

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