簡體   English   中英

線性插值以找到三角形中的坐標

[英]Linear Interpolation to find coord in triangle

假設您有以下三點ABC ,如下圖所示:

在此輸入圖像描述

這些點總是根據它們的垂直偏移進行排序,因此最高點總是A.有時B和C可以具有相同的y坐標。

我正在嘗試找到點D的x坐標。我可以通過插入點AyCy來找到D的Y坐標(By / (Cy - Ay)) 我正在使用以下公式進行插值(在C ++中)

float linearInterpolation(float a, float b, float t)
{
    return a + (t * (b - a));
}

換句話說, Dy = linearInterpolation(Ay, Cy, (By - Ay) / (Cy - Ay))

總而言之,我的問題是:我如何找到Dx

謝謝

-

回答:

只是為了澄清,這是建議和工作的解決方案:

D.x = A.x + (B.y - A.y) * (C.x - A.x) / (C.y - A.y);
D.y = B.y;

如下圖所示:

在此輸入圖像描述

它是需要插值的x坐標。 在圖上, BDy坐標相等。

D.x = A.x + (B.y - A.y) * (C.x - A.x) / (C.y - A.y);
D.y = B.y;

您還應該為Cy == Ay的情況做出規定,其中Dx可以是Ax和Cx之間的任何位置。這樣做的一種方法是不繪制三角形,其中abs(Cy - Ay) < deltadelta為在1個像素的數量級上。

D.y = B.y

delta_x = C.x - A.x 
delta_y = C.y - A.y 

dist_y = B.y - A.y

percent = dist_y / delta_y

D.x = A.x + percent * delta_x

線AC的功能是y = mx + b

m =(Ay-Cy)/(Ax-Cx)

然后你可以用A代替: Ay = Ax * m + b

b = Ay - Ax * m

你需要從y計算x,所以交換函數。

mx = y -b

x =(y -b)/ m

這是從三角形的那一側找到y的x的三個步驟。 請注意,您無需進行任何插值即可找到Dy。 簡單地說,Dy = By

請注意,您可以優化我剛剛編寫的一系列較小步驟。 我認為編寫更容易閱讀的代碼更好。

暫無
暫無

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

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