两个可能常用到的几何知识(圆与椭圆的方程、求垂直向量)

圆和椭圆的参数方程

圆的参数方程

特殊圆的参数方程【圆心(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.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章