2016-02-29 124 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)