2016-08-30 49 views
1

example查找中心由2個點定義和他們的切線相交

我有直角座標P,P0和P1,如何找到C 2

請注意,C也是以P爲頂點,P0和P1爲高度的三角形的正中心。

這段代碼每秒會在一個圖形渲染器中執行幾百次,在一個已經在做複雜物理的程序中,所以它需要很快。我正在用它來計算二次曲線的控制點。如果可能的話,我想避免trig函數和計算角度並堅持純向量數學。

純粹的數學答案很好,即使我用Javascript編程。請記住,答案越簡單越好,因爲任何矢量操作都需要花費時間。

+0

我不要求代碼,我要求解決這道數學題。這個問題表明數學答案很好,我只是把它標記爲Javascript,因爲這就是我正在使用的。我還將它標記爲矢量圖形,因爲這是問題的範疇。 –

+0

請考慮在math.stackexchange.com提問這個問題。這裏的這個網站並不是要解釋代數,而是要回答關於編程的問題。 –

+0

對此,您可能是正確的,我的歉意。問題是,採取MBO的答案(我目前正在檢查)。第一種方法當然是正確的,但試圖解決這個解決方案的過程顯然是處理器方面非常昂貴。我目前正在檢查第二種方法,結果非常有效。乍一看,第一個看起來更有前途和優雅。所以是的,這在兩個網站之間。再次,我很抱歉在這裏提問。 –

回答

1

方法1:
載體CP0和PP0是垂直的,並且CP1和PP1是垂直的,所以我們可以寫出兩個方程的系統爲這些向量對的點積,並找到兩個未知CX和CY(中心座標)

CP0 = (CX - P0.X, CY - P0.Y) 
CP1 = (CX - P1.X, CY - P1.Y) 
PP0 = (P.X - P0.X, P.Y - P0.Y) 
PP1 = (P.X - P1.X, P.Y - P1.Y) 

Dot(CP0, PP0) = 0 
Dot(CP1, PP1) = 0 

(CX - P0.X) * (P.X - P0.X) + (CY - P0.Y) * (P.Y - P0.Y) = 0 
(CX - P1.X) * (P.X - P1.X) + (CY - P1.Y) * (P.Y - P1.Y) = 0 

方法2:P0和P1之間
中點M的座標爲

M.X = (P0.X + P1.X)/2   ///1 
    M.Y = (P0.Y + P1.X)/2   ///2 
    Distance P-M is DM 
    DM_Squared = (P.X-M.X)^2 + (P.Y-M.Y)^2  ///3 
    L, D distances are from your notation 
    L_Squared = (P.X-P0.X)^2 + (P.Y-P0.Y)^2  ///4 

theta是角度P0PC

Cos(Theta) = Length(P - M)/Length(P - P0) = DM/L 
D = Length(C - P) = L/Cos(Theta) = L * L/DM 
and finally 
C = P - L^2 * (P0 - M)/DM^2 

Coeff = L_Squared/DM_Squared   ///5 
C.X = P.X - Coeff * (P.X - M.X)   ///6 
C.Y = P.Y - Coeff * (P.Y - M.Y)   ///7 

公式1..7準備使用的

+0

謝謝你擴大答案,我已經檢查它的正確性。一旦我驗證它,我會在一分鐘內接受它:) –

+0

注意第二種方法中的更正caclulations – MBo