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