Python - 三角法,三点间角相等的中点。

问题描述 投票:1回答:1

我有点被一些基本的三角函数难住了。

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

picture

C越低,C处的角度就越小 如果B保持不变,那么C处的角度就越小 如何计算B,使A和C处的角度总是相同。B总是位于A和C所在的平行线90度的直线上。

python math trigonometry
1个回答
1
投票

我想你问的是这样的。

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

设C所坐的水平线为y=0,设点A和B所坐的垂直线分别为x=a和x=b。所以,给定By,我们必须找到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)

我们来检查一下结果 如果Ay=By--即A和B在同一高度--根据对称性,我们会期望C在正中间。让Ay = By = h.

Cx = (aBy + bAy) / (Ay + By)
   = (ah + bh) / (h + h)
   = (a + b) / 2

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

Cx = (aBy + bAy) / (Ay + By)
   ~ aBy / By
   ~ a

请注意,我们去掉了低阶项Ay和bAy,因为这些项比包含大值By的项少得多。这就可以检查出来了。最后,想象Ay >>By。那么我们期望Cx能接近b。

Cx = (aBy + bAy) / (Ay + By)
   ~ bAy / Ay
   ~ b

再一次,我们发现我们的公式与我们的直觉相符. 因此,对于点

A = (a, Ay)
B = (b, By)

我们发现,点C一定是

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

为了使角度相同。

© www.soinside.com 2019 - 2024. All rights reserved.