[英]Linear Interpolation to find coord in triangle
假設您有以下三點A
, B
和C
,如下圖所示:
這些點總是根據它們的垂直偏移進行排序,因此最高點總是A.有時B和C可以具有相同的y坐標。
我正在嘗試找到點D的x坐標。我可以通過插入點Ay
和Cy
來找到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坐標。 在圖上, B和D的y坐標相等。
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) < delta
, delta
為在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.