Python-三角法,三点之间等角的中点

Python-三角法,三点之间等角的中点,python,math,trigonometry,Python,Math,Trigonometry,我被一些基本的三角学卡住了 我有三个点A,B和C,由一些高度值和A和C之间的距离定义。我通常把B作为A和C之间的中点距离。 情况是这样的: 随着C变低,如果B保持在原位,C处的角度会变窄。如何计算B,使A和C的角度始终相同。B总是与A和C所在的平行线成90度角。我想你要问的是: 在点A固定的情况下,找到点C,使所示角度相等 让水平线C位于y=0的直线上。让点A和点B所在的垂直线分别为x=A和x=B。所以,由给出,我们必须找到Cx,使得atan((Cx-a)/Ay)=atan((b-Cx)/By

我被一些基本的三角学卡住了

我有三个点A,B和C,由一些高度值和A和C之间的距离定义。我通常把B作为A和C之间的中点距离。 情况是这样的:


随着C变低,如果B保持在原位,C处的角度会变窄。如何计算B,使A和C的角度始终相同。B总是与A和C所在的平行线成90度角。

我想你要问的是:

在点A固定的情况下,找到点C,使所示角度相等

让水平线C位于y=0的直线上。让点A和点B所在的垂直线分别为x=A和x=B。所以,由给出,我们必须找到Cx,使得atan((Cx-a)/Ay)=atan((b-Cx)/By)。因为分子和分母被选择为正,并且我们知道角度是锐角,所以我们可以知道反正切是双射,只有当参数相等时,反正切才相等:

(Cx - a) / Ay = (b - Cx) / By
Cx/Ay - a/Ay = b/By - Cx/By
Cx/Ay + Cx/By = a/Ay + b/By
Cx(1/Ay + 1/By) = (a/Ay + b/By)
Cx = (a/Ay + b/By) / (1/Ay + 1/By)
   = (a/Ay + b/By) / [(Ay + By)/(AyBy)]
   = (AyBy)(a/Ay + b/By) / (Ay + By)
   = (aBy + bAy) / (Ay + By)
让我们检查一下结果。如果A = B,即A和B处于同一高度,我们会认为C在中间是对称的。设Ay=By=h。然后

Cx = (aBy + bAy) / (Ay + By)
   = (ah + bh) / (h + h)
   = (a + b) / 2
根据需要,我们得到Cx=(a+b)/2。现在,想象一下;也就是说,B比A离C所在的水平线远得多。我们希望Cx接近a,a点所在的垂直线的x值

Cx = (aBy + bAy) / (Ay + By)
   ~ aBy / By
   ~ a
请注意,我们删除了低阶项Ay和bAy,因为它们远小于包含大值By的项。这是对的。最后,想象一下。然后我们希望Cx接近b:

Cx = (aBy + bAy) / (Ay + By)
   ~ bAy / Ay
   ~ b
我们再次发现,我们的公式符合我们的直觉。因此,对于分数

A = (a, Ay)
B = (b, By)
我们发现C点必须是

C = ((aBy + bAy) / (Ay + By), 0)

为了使角度相同

如果角度A,C相等,这是一个等腰三角形,B必须像一条穿过AC中点的垂直线,对吗?从斜率/截距信息中找出该线的方程式,然后从那里开始。@JeffH我可能没有很好地解释这一点。情况是这样的。如果C变低,图片上显示的角度会变窄。我想找到B在直线上的位置,这样A和C的角度相等。是的,这就是我要找的。非常感谢:)我能跟进一下吗?:)@Patrick87如果A和B(在你的答案中)的垂直线也以不同的角度倾斜,那会有什么不同?有没有快速修改的解决方案?@AaronSmith这种情况下的分析可能类似,但可能更复杂。Bx不再是常数;你需要用Bx来解Bx,反之亦然。为了简单起见,我还假设A位于正斜率的直线上,B位于负斜率的直线上。最好有一个新问题。