簡體   English   中英

如何在 3D 表面上找到最接近該表面外點的點?

[英]How can I find the point on a 3D surface closest to a point outside that surface?

我想用代數表達式在 R3 的表面上找到點 B

f(x,y) = x^3 + y^2,

給定點 A,所以點 B 在歐幾里德距離上最近,並且位於表面上。 [請注意,圖中的曲面不是 x^3 + y^2,僅用於說明目的]。

在此處輸入圖片說明

我不是 Matlab 用戶,但我看到函數fminconfminsearch可能是 J. BAEK、A. DEOPURKAR 和 K. REDFIELD(第 24 頁,附錄)在這篇可訪問的在線論文中所建議的方法。 或者,我想通過圍繞 A 點的半徑來參數化一個球體,並尋找它與表面的第一個切點,但這會產生更多的問題。

對於 fmincon 似乎第一件事是定義一個函數來最小化,這在數學上是歐幾里得距離:所以如果點 A 在矩陣中,並且對應於 A(:,1) 並且 B 被定義為(b1,b2,b3),最小化公式為

(A(1,1) - b1)^2 + (A(2,1) - b2)^2 + (A(3,1) - b3)^2

與第一條評論一樣,由於 B 必須在表面上,因此約束條件將是

b3= b1^3 + b2^2。

我不知道如何在 Matlab 中將其形式化,也不知道我是否需要某個初始點來啟動該過程,或者 A 是一個有效的起點。

正如你所寫,這個問題可以用 fminsearch 解決。 前段時間我寫了一個代碼來解決你的問題,基於 NURB Toolbox for Matlab。 我只是為你的問題簡化了一點。 在這種情況下, surf 是表面函數的函數句柄。 如果你有一個比 [0, 0] 更好的起點,你可以改用它。

function Y = ProjectOnSurf(X,surf)
    %Computes the closest point to given point on a surface.
    f=@(lambda) norm(surf(lambda) - X)
    lambda=fminsearch(f,[0, 0]); %Find parameters for minimal distance
    Y=NurbEval(surf,lambda)'; %Solve function for parameters
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM