假設我有一條從(x1,y1)到(x2,y2)的線段。如何計算垂直於直線的法向量?如何計算線段的法向量?
我可以找到很多關於以3D做飛機的事情,但沒有2D的東西。
請到容易對數學(鏈接到合作的例子,圖表或算法,歡迎),我是一個程序員不止我一個數學家)
假設我有一條從(x1,y1)到(x2,y2)的線段。如何計算垂直於直線的法向量?如何計算線段的法向量?
我可以找到很多關於以3D做飛機的事情,但沒有2D的東西。
請到容易對數學(鏈接到合作的例子,圖表或算法,歡迎),我是一個程序員不止我一個數學家)
如果我們定義DX = X2-X1和dy = Y2-Y1,則該法線(-dy,DX)和(DY,-dx)。
請注意,不需要劃分,因此您不會冒被零除的風險。
這很微妙,花了我一段時間才明白normal.x = -dy和normal.y = dx。我有他們反過來,因爲它看起來像一個錯誤分配的X部分的Y值... – Piku 2009-08-07 13:10:28
http://stackoverflow.com/a/7470098/183120更多的數學在此。 – legends2k 2013-01-25 08:13:40
@OrenTrutner我還是不明白這一點; '(x',y')=(-y,x)'和'(x',y')=(y,-x)'似乎是正確的,但爲什麼要用'dx'和'dy'這裏。此外,根據斜率,對於直角線,因此'dy'= dx'*(-dx/dy)'和'dx'= dy'*(-dy/dx)',m1 * m2 =你的方程如何進入'normal.x = x'= -dy'? – legends2k 2013-01-25 08:53:02
m1 = (y2 - y1)/(x2 - x1)
如果垂直兩行:
m1*m2 = -1
然後
m2 = -1/m1 //if (m1 == 0, then your line should have an equation like x = b)
y = m2*x + b //b is offset of new perpendicular line..
b爲東西,如果你想從一個點你DEF傳遞INED
的另一種方式把它是計算的單位矢量對於給定的方向,然後應用90度逆時針旋轉得到的法線矢量。
的一般的2D變換的矩陣表示看起來像這樣:
x' = x cos(t) - y sin(t)
y' = x sin(t) + y cos(t)
其中(x,y)是原始矢量和(X 'Y')的組分轉化的組件。
如果T = 90度,然後COS(90)= 0和sin(90)= 1代和乘法出來給出:
x' = -y
y' = +x
相同的結果之前給出,但具有多一點關於它來自哪裏的解釋。
這個問題已發佈很久以前,但我找到了一種替代方法來回答它。所以我決定在這裏分享。
首先,必須知道:如果兩個向量垂直,它們的點積等於零。
法向量(x',y')
垂直於連接(x1,y1)
和(x2,y2)
的線。該行有方向(x2-x1,y2-y1)
或(dx,dy)
。
所以,
(x',y').(dx,dy) = 0
x'.dx + y'.dy = 0
的很多對(X 'Y'),其滿足上面的等式。但總是滿足的最好的一對是(dy,-dx)
或(-dy,dx)
如果你想知道這背後的「數學」,你可以在http://stackoverflow.com/a/7470098/189767查找我的答案。它基本上是一樣的,但更精細。 – Andreas 2013-01-25 08:47:53
這個問題是關於數學,而不是編程。 – Charlie 2015-10-06 02:41:32
我正在投票結束這個題目,因爲它是關於數學,而不是編程。 – Pang 2015-10-07 01:34:32