两个可能常用到的几何知识
圆和椭圆的参数方程
圆的参数方程
特殊圆的参数方程【圆心(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);
...