【问题标题】:Finding Distance from ray to 3D bezier-curve查找从射线到 3D 贝塞尔曲线的距离
【发布时间】:2020-12-05 11:23:14
【问题描述】:

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

【问题讨论】:

  • 您能否详细说明您的问题。您能否为您的问题添加更多信息。

标签: c# unity3d math


【解决方案1】:

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

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

  • 换班(-rx0, -ry0, -rz0) -
  • 然后围绕OZ 轴旋转atan2(ry, rx)
  • 然后围绕OY 轴旋转acos(dz / len)

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

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

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

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

dt计算SquaredDist的导数,做方程

SquaredDist' = 0

并针对t解决它。

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

检查0..1区间内的根,同时分别检查贝塞尔曲线终点和射线起点距离。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 2013-12-26
    • 1970-01-01
    • 2020-04-27
    • 2014-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多