2016-05-16 65 views
0

我確定這是基本的三角學,我敢打賭我多年前就讀於學校,但我很困惑知道應用於真實世界的功能的功能。不管怎麼說,而不是試圖解釋什麼,我需要幫助,我畫一個小圖:如何在現有的線路上找到兩個點

enter image description here

我知道P1,P2,R1和R2,但我不記得(或不知道如何搜索)如何計算p3和p4是什麼。

這個設置的基本應用是我有2個圓圈(紅色和藍色),我需要它們不斷連接,因爲我在畫布上拖動它們。粉紅色的鏈接將通過它們的中心點連接它們,但我不希望線條穿透該圈子的周圍。

希望有道理嗎?提前致謝。

+0

我投票關閉這一問題作爲題外話,因爲它是關於[math.se]而不是編程或軟件開發。 – Pang

+0

這不是主題,我有一個非常好的理由,爲什麼我在這裏發佈而不是數學交換委員會。 上下文旨在用於JavaScript實現。如果我在數學交換中寫過這樣的要求,我會用數學符號得到用方程表達的答案。我不知道如何實現答案。通過在此處提問,我會確保它以代碼表示法表示。 我排除了我使用哪種語言的信息,因爲它是無關緊要的。 我認爲人們離開的答案會對其他在JS中遇到這個數學問題的人有用。 – jayfield1979

回答

1

  1. P1創建單元矢量vP2方向

    即容易以矢量形式:

    v=P2-P1; v/=|v| 
    

    當投入2D

    v.x=P2.x-P1.x; 
    v.y=P2.y-P1.y; 
    l=sqrt((v.x*v.x)+(v.y*v.y)) 
    v.x/=l; 
    v.y/=l; 
    
  2. 現在,通過r1,r2

    矢量形式從P1,P2只是翻譯:

    P3=P1+r1*v 
    P4=P2-r2*v 
    

    2D

    P3.x=P1.x+r1*v.x; 
    P3.y=P1.y+r1*v.y; 
    P4.x=P2.x-r2*v.x; 
    P4.y=P2.y-r2*v.y; 
    

enter image description here

+0

感謝您的時間(以及您的圖表)。我選擇了你的答案,因爲我在矢量匹配中工作得更好,而且我正在使用基於矢量的系統來繪製圖形。 – jayfield1979

1

你必須解決以下方程組:

對於P3 - >

(X-p1x)/(p1x-p2x)=(Y-p1y)/(p1y-p2y) 
(X-p1x)^2 + (Y-p1y)^2 = r1^2 

同爲P4只是在第二個公式改變R1 R2和P1的P4。

第一個方程是給出2個點的線的方程。 第二個方程是給定中心點和半徑的圓的方程。

生成的X,Y值將是p3的值,然後是p4的值。

1

我要說的是有點長。我會讓你編寫你自己的代碼,但是,當然不會對此有所幫助。

你知道點P1,P2和半徑R1和R2。假設假設點P1和P2分別具有座標(x1,y1)和(x2,y2)。

連接P1和P2的直線是一條直線,因此可以使用公式m=(y2-y1)/(x2-x1)計算直線的斜率。由於您知道斜率並知道兩個座標,因此可以計算截距c並構造y=mx+c形式的公式。

一旦線公式存在,您可以應用x的值並計算點P3的y,例如可以說x3和y3,因爲您有半徑R1。同樣,計算P4的座標。

+0

謝謝你的時間,你能否澄清公式第二部分'c'是什麼:'y = mx + c'?謝謝。 – jayfield1979

+0

@ jayfield1979當距離標準線方程的'x = 0'(線偏移)時,它是'y'位置的線。這種方法對於垂直線不起作用,並且在| | dy | >> | dx |'的情況下將失去準確性。矢量和/或參數化方法對此更好 – Spektre

1

設D爲P1(X1,Y1)和p2之間
因此 d = SQRT的距離(X2,Y2)((X1-X2^2 +(Y1-Y2))^ 2)
現在點P3(X3,Y3)把在R1的比P1和P2之間的線:(d-R1)

因此
X3 =(R1 * X2 +(d-R1)* X1)/ d和
Y3 =(R1 * Y2 +(d-R1)* Y1)/ d

類似地,對於P4(X4,Y4)
X4 =(R2 * X1 +(d-R2)*×2)/ d和
Y4 =(R2 * Y1 +(d-R2)* Y2)/ d,這是簡單的矢量運算(沒有三角需要)

相關問題