兩個可能常用到的幾何知識
圓和橢圓的參數方程
圓的參數方程
特殊圓的參數方程【圓心(0,0),半徑R】
其參數α的幾何意義是圓上動點和圓心連線的旋轉角,如下圖所示;
一般圓的參數方程【圓心(m,n),半徑R】
其參數α的幾何意義仿上例理解;
橢圓的參數方程
其參數ϕ的幾何意義是對應的大圓或小圓半徑的旋轉角∠AOM,也就是橢圓的離心角.不是橢圓上動點和中心連線的旋轉角∠AOP;切記!
雖然∠AOM和∠AOP二者不相等,但是很顯然這二者也是一一對應的,並且它們的範圍都是==[0,2π)==。
引例
已知橢圓的參數方程爲
點M在橢圓上,對應參數t=,點O爲原點,則直線OM的斜率爲 。
分析:這個說法是錯誤的,怎麼糾正呢?
當t=時,代入得到 x=2cos()=1,y=2sin()=2,故M(1,2),
則kOM==2。
化爲參數方程
介紹一個容易記憶的方法:
類比:cos2θ+sin2θ=1
- 當圓爲x2+y2=4時,先轉換爲()2+()2=1,
cos2θ+sin2θ=1 與 ()2+()2=1
對應上式,得到 cosθ=,sinθ=,故圓的參數方程爲
當然,我們還可以這樣交叉對應,得到 sinθ=,cosθ=,故圓的參數方程還可以爲
說明:
- 由此說明,當我們取的參數不一樣時,圓的參數方程是不一樣的,即圓的參數方程可能不唯一。兩種參數的含義不一定一樣。
- 我們約定俗成的取法是第一種。
- 參數方程的參數有時候有明確的幾何意義,有時候沒有。
- 當圓爲 (x−a)2+(y−b)2=R2 時,先轉換爲()2+()2=1,
對應上式,得到 cosθ=,sinθ=,故圓的參數方程爲
- 當橢圓爲 +=1 時,先轉化爲()2+()2=1,
對應上式得到 cosθ=,sinθ=,故橢圓的參數方程爲
Unity中的使用
Vector3 point;
float m_width = 5.0f;
float number = 20;
float Stage = 360 / number;
List<Vector3> circle = new List<Vector3>();
for (int i = 0; i < number; i++)
{
Vector3 temp = new Vector3(point.position.x + m_width * Mathf.Cos(Stage * i), point.position.y + m_width * Mathf.Sin(Stage * i), 0);
circle.Add(temp);
}
最終的結果就是:鏈表對象circle
中存儲了20個圓上的點。
參數方程的優點
當處理圓或者橢圓上的任意一點到直線的距離的最值時,參數方程就會體現出它巨大的優越性。原因在於:如果是普通方程時,點的座標形式爲(x,y),轉化得到的必然是二元形式的,而如果是參數方程,轉化得到的必然是一元形式的,肯定要比二元的簡單的多。
向量的垂直向量
原理:兩個向量垂直的點積爲0
-
二維狀況下,向量(X1,Y1)與垂直向量(X2,Y2)的點積爲0。
即:X1X2+Y1Y2=0
-
三維狀態下,向量(X1,Y1,Z1)與垂直向量(X2,Y2,Z2)的點積爲0。
即:X1X2+T1T2+Z1Z2=0
Unity用法引例
求二維垂直向量
Vector2 dir;
Vector2 verticalDirection = new Vector2(dir.y, -dir.x);
注意:二維狀態下,與一個向量垂直的應該是一條線。故結果並不是唯一的。
下面再寫幾個:
Vector2 verticalDirection_1 = new Vector2(1, -dir.x / dir.y);
Vector2 verticalDirection_2 = new Vector2(-dir.y / dir.x, 1);
求三維垂直向量
注意:三維狀態下,與一個向量垂直的應該是一個面。故結果也不是唯一的,比二維狀態下情況還要多。
同二維狀態,這裏我也只寫幾個:
Vector3 dir;
Vector3 verticalDirection = new Vector3(dir.y, -dir.x, 0);
Vector3 verticalDirection_1 = new Vector3(-_dir.z / _dir.x, 0, 1);
Vector3 verticalDirection_2 = new Vector3(1 , 0 , -dir.x / dir.z);
...