2016-02-29 195 views
1

我試圖找到點p1, p2作爲假想的線(黃色)在紅色箭頭的方向上移動。點p1, p2, p3, p4將綁定用戶輸入區域A。我想要的是當黃線從右向左掃動時,給定區域的「第一次」出現。查找給定區域的直角三角形的邊界

p3, p4,Aangle是已知的。

我已經最初嘗試類似的信息(psudeocode):

from right to left of the triangle: 
    Move p1 to the left on the x-axis by epsilon 
    Calculate p2 and the area bounded by (p1,p2,p3,p4) 
    if(area < error): return the result 
    else: continue 

然而,這種解決方案可能不收斂作爲小量值可能是「蹦」了。 (例如,如果我試圖通過每次增加0.3來找到數字4,它將不會達到4)。

因此,我嘗試了一種二分法搜索方法,但失敗了,因爲我意識到有界區域不是單調遞增的(例如,綠線和三角形的最左端限定的區域也是可能的解決方案由二進制搜索器返回)。

我的問題是有沒有算法來解決這類問題?而且它保證會收斂?

enter image description here

+0

這個問題似乎是下指定;從p4到左上角的斜率是多少?我認爲它沒有任何算法;我相信這可以用一個「封閉的公式」來表達。 – Codor

+0

我認爲這不是最好的地方要問,你想要一個數學算法,試試http://math.stackexchange.com/ – Gusman

+0

@Codor我已經更新了圖。基本上有一個用戶指定的角度來產生斜坡(它將與在p3處產生的線相交)。 –

回答

0

咱們三角(p3-p4)的右邊緣長度爲R。我們的p1-p3距離是x。然後梯形面積是

A = 1/2 * x * (R + R - x * ctg(angle)) 
2*A = 2*x*R - x^2*ctg(angle) 
x^2 * ctg(angle) - 2 * x * R + 2 * A = 0 

求解未知X此二次方程,找到正確的根是否存在(在範圍0..R*tg(angle)