[英]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.