繁体   English   中英

寻找从射线到 3D 贝塞尔曲线的距离

[英]Finding Distance from ray to 3D bezier-curve

我想知道是否有人知道如何找到从 3D 线段或射线到 3D 三次贝塞尔曲线的最小距离,或者 Unity 游戏引擎中是否内置了任何东西。

计算将射线基点变换为(0,0,0)方向变为OX的仿射变换

如果射线由基点(rx0, ry0, rz0)和方向向量(dx, dy, dz)定义,长度为len (1 表示归一化),则此变换的矩阵为:

  • 移位(-rx0, -ry0, -rz0) -
  • 然后通过atan2(ry, rx)OZ轴旋转
  • 然后通过acos(dz / len)OY轴旋转

将此变换应用于贝塞尔曲线控制点

使用 zer0derivative 方法计算从曲线到OX轴的最小距离(对于函数的最大值和最小值,导数为零):

写出取决于t的平方距离表达式:

SquaredDist(t) = by'(t)^2  + bz'(t)^2

通过dt计算SquaredDist的导数,建立方程

SquaredDist' = 0

并针对t解决它。

方程是五阶多项式方程,所以没有解析,只有数值解(或细分方法)。

0..1间隔检查根,还分别检查贝塞尔曲线末端和射线起点距离。

暂无
暂无

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

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