我知道A,B和C的座標發起矢量..我也知道向量V選自C始發的..查找在三角形相交從來自特定側
我知道矢量相交叉的和B,我只是不知道如何找到我。
任何人都可以解釋涉及解決這個問題的步驟?
非常感謝。
http://img34.imageshack.us/img34/941/triangleprob.png
我知道A,B和C的座標發起矢量..我也知道向量V選自C始發的..查找在三角形相交從來自特定側
我知道矢量相交叉的和B,我只是不知道如何找到我。
任何人都可以解釋涉及解決這個問題的步驟?
非常感謝。
http://img34.imageshack.us/img34/941/triangleprob.png
i = C+kV Lets call N the normal to the line A,B so N = [-(B-A).y, (B-A).x] Also, for any point on the line: (P-A)*N = 0 -- substitute from line 1 above: (C+kV-A)*N = 0 (kV+C-A)*N = 0 kV*N + (C-A)*N = 0 kV*N = (A-C)*N k = [(A-C)*N]/V*N Now that we have k, plug it into line 1 above to get i.
在這裏,我使用*表示點積,因此擴展到常規乘法:
k = ((A.x-C.x)*-(B.y-A.y) + (A.y-C.y)*(B.x-A.x))/(V.x*-(B.y-A.y) + V.x*(B.x-A.x)) I.x = C.x + k*V.x I.y = C.y + k*V.y
除非我搞砸東西p ....
如果你知道A和B,你知道該線AB方程,你說你知道V,這樣你就可以形成線V中的公式....嗯,我只是點滿足這兩個方程。
方程線AB:
(bx-ax)(Y-ay) = (by-ay)(X-ax)
如果knpow方向(或斜率= M)的矢量,並且其位於所述載體的任何點,則線的爲向量V的方程式是
Y = MX = b
其中m是直線的斜率或方向,並且y座標b其中它穿過thevertical Y =軸線(其中X = 0)
如果知道就行了點(即,C =(S,T),那麼您求解由B:
t = ms + b ==> b = t - ms
,
所以方程變爲
Y = mX + t-ms
簡單的代數。困難的部分往往只是寫下基本的方程式,但一旦寫下來,其餘的很容易。
您可以定義一個從點C = [c_x,c_y]發出的線,並沿向量V = [v_x,v_y]指向嗎?表示這樣一條線的一個好方法是使用參數表示法。因此,
V(t) = C + t*V
在向量元素方面,我們把它作爲
V(t) = [c_x + t*v_x, c_y + t*v_y]
看看它是如何工作。當t = 0時,我們得到C點,但是對於任何其他的t值,我們得到線上的其他點。
通過A和B的線段如何?解決這個問題的一種方法是以相同的方式參數化地定義第二條線。然後求解兩個未知數的兩個方程組來找到相交點。
更簡單的方法是查看線段AB的法線向量。該向量如下給出:
N = [b_y - a_y , a_x - b_x]/sqrt((b_x - a_x)^2 + (b_y - a_y)^2)
注意N在這裏被定義爲具有單位範數。
所以現在,我們什麼時候知道某個點是否恰好位於連接A和B的線上?現在這很簡單。當下面定義的點積恰好爲零時會發生這種情況。
dot(N,V(t) - A) = 0
擴大這個,並解決參數t。我們可以用點積寫下來。
t = dot(N,A-C)/dot(N,V)
或者,如果你願意的話,
t = (N_x*(a_x - c_x) + N_y*(a_y - c_y))/(N_x*v_x + N_y*v_y))
一旦我們有T,代入上面的V(t)的表達。讓我們在實踐中看到所有這些工作。我會挑選一些分A,B,C和矢量V
A = [7, 3]
B = [2, 5]
C = [1, 0]
V = [1, 1]
我們的法向量N,正常化後,會看起來像
N = [0.371390676354104, 0.928476690885259]
行參數,T,然後
t = 3.85714285714286
我們找到交叉點作爲
C + t*V = [4.85714285714286, 3.85714285714286]
如果您將這些點繪製在一張紙上,它們應該全部合在一起,而且所有內容都只有幾個簡單的表達式。
非常感謝!做得好。 – Kyle 2010-02-05 22:25:23
啊..點積。他們以前一直是我的救世主。 – Kyle 2010-02-05 21:30:02
我很欣賞每個人的幫助(很多!!),但我認爲這是我需要的,儘管我沒有100%確定,因爲我沒有測試過它。再次感謝。 – Kyle 2010-02-05 21:36:11
你做了我通常做的事,並在最後一行(x)加倍了相同的尺寸。可能的罪魁禍首可能是複製和粘貼..啊,那些可以傷害!顯然最後一行應該是C.y,因爲你可能知道。 – Kyle 2010-02-05 21:46:38