簡體   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