簡體   English   中英

Python - 三角學,三點之間等角的中點

[英]Python - trigonometry, mid point for equal angles between three points

我有點堅持一些基本的三角學。

我有三個點 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。 因此,給定 By,我們必須找到滿足 atan((Cx - a) / Ay) = atan((b - Cx) / By) 的 Cx。 因為分子和分母被選為正數,並且我們知道角度是銳角,所以我們可以知道反正切是雙射,並且僅當 arguments 相等時,反正切才相等:

(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 比 A 離 C 所在的水平線遠得多。 我們期望 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)

為了使角度相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM