簡體   English   中英

如何計算法線?

[英]How do I calculate a normal?

好的,所以說我得到了一個由Thing A的x,y,寬度和高度組成的矩形(全部為2d)。 我怎么算正常呢?

青色

您不是在尋找由叉積或3維定義的法線。 一分鍾,我會解釋..

編輯:

通過這個答案 ,很明顯,您正在尋找的僅僅是與線垂直的向量。 不是垂直於平面的向量。

數學上評估

R = A - 2<A, N> N

首先,您必須對歐幾里得向量有深刻的了解。

給定向量A(您的入射角):

A = <ax, ay> 

給定向量B(代表從其反彈的壁的向量):

B = <bx, by>

該向量的法線(垂直)僅旋轉90度。 數學上:

N = <nx, ny> = <-bx, by>

因此,R =

R = A - 2<A, N> N = ...

首先評估點積

<A, N> = ax*nx + ay*ny = ax*(-bx) + ay*by = ay*by - ax*bx

然后:

R = <ax, ay> - 2*(ay*by - ax*bx) * N
  = <ax, by> - <2*(ay*by - ax*bx)*nx, 2*(ay*by - ax*bx)*ny>
  = <ax, by> - <2*(ay*by - ax*bx)*(-bx), 2*(ay*by - ax*bx)*(by)>
  = < ax + 2*bx*(ay*by - ax*bx), ay - 2*by*(ay*by - ax*bx) >

因此,您所需要做的就是確定一個向量,該向量表示要從其彈跳的牆(為B),以及入射的事件(為A)。

編輯 (由於評論):

您真的應該花時間查看我發布到歐幾里得向量的鏈接...

基本思想是定義一個任意的數學原點。 (舉例來說,就是牆的底部)。 這樣,代表您的牆的向量就是一個箭頭,從頂部到底部(或從底部到頂部)。 以原點為基礎描述時,此箭頭將在x方向上指向0單位,但在y方向上指向100單位。 因此,您的牆(B)的向量為:

B = < 0, 100 >

(請注意,牆的寬度並不重要-它將與1px厚,50 px厚或100px厚的牆反彈一樣)。

但是您需要對該向量進行歸一化,使其具有單位大小(長度為1)。 因此向量變為:

B = <0, 1>

這來自於:

Vector length = sqrt( bx^2 + by^2 ) = sqrt( 0^2 + 1^2 ) = 1

N是:

N = <1, 0>  // for the left hand side wall
N = <-1, 0> // for the right hand side wall

如果用“法線”表示垂直向量,請看叉積

<a1, a2, a3>

<b1, b2, b3>

叉積是

<a2 * b3 - b2 * a3, a1 * b3 - b1 * a3, a1 * b2 - b1 * a2>

...但是純2D中的“正常”沒有多大意義。

前往Google“跨產品”。 (http://zh.wikipedia.org/wiki/跨產品)

將定義矩形邊緣的矢量作為您要嘗試交叉的矢量。

小心。 矩形具有兩個可能的法線:

在此處輸入圖片說明

在飛機上,它具有4個法線:

在此處輸入圖片說明

好吧,如果矩形位於XY平面上,則法線為(0,0,1)。 無需代數!

整個矩形的法線將垂直於矩形的平面(沿第三維)。

如果您是指矩形的某個側面的法線(但與矩形在同一平面上),則可以計算該側面的斜率,而該法線的斜率將為其矩形側面的斜率的負倒數是正常的。 (如果側面的斜率為零,則為未定義。)如果要將此法線放在矩形上,則側面的中點是放置矩形的好地方。

cyanprime尋找的是2D空間中的1條線的法線。

該法線必須滿足以下條件:

m_line * m_normal = -1

而m_line是線的大小,m_normal是法線的大小。

=> m_normal = -1 / m_line

如果m_line = 0,顯然會產生錯誤。因此,您將需要特別對待這種情況。

如果m_line不為0,則得到2D矢量

normal_vector =(1,m_normal)

2D的法線是在對象中旋轉90度的矢量,其方向應與要撞擊它的對象相反。

這些法線有固定值,它們是:

西(1,0); 東(-1,0); 北(0,-1); 南(0,1);

暫無
暫無

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

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