兩個可能常用到的幾何知識(圓與橢圓的方程、求垂直向量)

圓和橢圓的參數方程

圓的參數方程

特殊圓的參數方程【圓心(0,0),半徑R】

方程
參數α的幾何意義是圓上動點和圓心連線的旋轉角,如下圖所示;
圖例

一般圓的參數方程【圓心(m,n),半徑R】

參數方程
參數α的幾何意義仿上例理解;

橢圓的參數方程

參數方程
參數ϕ的幾何意義是對應的大圓或小圓半徑的旋轉角∠AOM,也就是橢圓的離心角.不是橢圓上動點和中心連線的旋轉角∠AOP;切記!
圖例
雖然∠AOM∠AOP二者不相等,但是很顯然這二者也是一一對應的,並且它們的範圍都是==[0,2π)==。

引例

已知橢圓的參數方程爲

點M在橢圓上,對應參數t=π3\frac{π}{3},點O爲原點,則直線OM的斜率爲 3\sqrt 3

分析:這個說法是錯誤的,怎麼糾正呢?

圖形當t=π3\frac{π}{3}時,代入得到 x=2cos(π3\frac{π}{3})=1,y=2sin(π3\frac{π}{3})=23\sqrt 3,故M(1,23\sqrt 3),
則kOM=y0x0\frac{y−0}{x−0}=23\sqrt 3

化爲參數方程

介紹一個容易記憶的方法:
類比:cos2θ+sin2θ=1

  • 當圓爲x2+y2=4時,先轉換爲(x2\frac{x}{2})2+(y2\frac{y}{2})2=1,
    cos2θ+sin2θ=1 與 (x2\frac{x}{2})2+(y2\frac{y}{2})2=1
    對應上式,得到 cosθ=x2\frac{x}{2},sinθ=y2\frac{y}{2},故圓的參數方程爲

    當然,我們還可以這樣交叉對應,得到 sinθ=x2\frac{x}{2},cosθ=y2\frac{y}{2},故圓的參數方程還可以爲

說明:

  1. 由此說明,當我們取的參數不一樣時,圓的參數方程是不一樣的,即圓的參數方程可能不唯一。兩種參數的含義不一定一樣。
  2. 我們約定俗成的取法是第一種。
  3. 參數方程的參數有時候有明確的幾何意義,有時候沒有。
  • 當圓爲 (x−a)2+(y−b)2=R2 時,先轉換爲(xaR\frac{x−a}{R})2+(ybR\frac{y−b}{R})2=1,
    對應上式,得到 cosθ=xaR\frac{x−a}{R},sinθ=ybR\frac{y−b}{R},故圓的參數方程爲
  • 當橢圓爲 x2a2\frac{ x^2}{ a^2}+y2b2\frac{y^2}{b^2}=1 時,先轉化爲(xa\frac{x}{a})2+(yb\frac{y}{b})2=1,
    對應上式得到 cosθ=xa\frac{x}{a},sinθ=yb\frac{y}{b},故橢圓的參數方程爲

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);
...

原文參考鏈接

  1. 圓和橢圓的參數方程:https://www.cnblogs.com/wanghai0666/p/5891493.html
  2. 二維向量的垂線計算:https://blog.csdn.net/dgtg_tjs/article/details/80507771
  3. 三維向量的垂線計算:https://blog.csdn.net/cheng219101/article/details/79679797
  4. 爲什麼兩個垂直向量的點積爲0:https://blog.csdn.net/u014756380/article/details/77901834.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章