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

圆和椭圆的参数方程

圆的参数方程

特殊圆的参数方程【圆心(0,0),半径R】

方程
参数α的几何意义是圆上动点和圆心连线的旋转角,如下图所示;
图例

一般圆的参数方程【圆心(m,n),半径R】

参数方程
参数α的几何意义仿上例理解;

椭圆的参数方程

参数方程
参数ϕ的几何意义是对应的大圆或小圆半径的旋转角∠AOM,也就是椭圆的离心角.不是椭圆上动点和中心连线的旋转角∠AOP;切记!
图例
虽然∠AOM∠AOP二者不相等,但是很显然这二者也是一一对应的,并且它们的范围都是==[0,2π)==。

引例

已知椭圆的参数方程为

点M在椭圆上,对应参数t= π 3 \frac{π}{3} 3π,点O为原点,则直线OM的斜率为 3 \sqrt 3 3

分析:这个说法是错误的,怎么纠正呢?

图形当t= π 3 \frac{π}{3} 3π时,代入得到 x=2cos( π 3 \frac{π}{3} 3π)=1,y=2sin( π 3 \frac{π}{3} 3π)=2 3 \sqrt 3 3 ,故M(1,2 3 \sqrt 3 3 ),
则kOM= y − 0 x − 0 \frac{y−0}{x−0} x0y0=2 3 \sqrt 3 3

化为参数方程

介绍一个容易记忆的方法:
类比:cos2θ+sin2θ=1

  • 当圆为x2+y2=4时,先转换为( x 2 \frac{x}{2} 2x)2+( y 2 \frac{y}{2} 2y)2=1,
    cos2θ+sin2θ=1 与 ( x 2 \frac{x}{2} 2x)2+( y 2 \frac{y}{2} 2y)2=1
    对应上式,得到 cosθ= x 2 \frac{x}{2} 2x,sinθ= y 2 \frac{y}{2} 2y,故圆的参数方程为

    当然,我们还可以这样交叉对应,得到 sinθ= x 2 \frac{x}{2} 2x,cosθ= y 2 \frac{y}{2} 2y,故圆的参数方程还可以为

说明:

  1. 由此说明,当我们取的参数不一样时,圆的参数方程是不一样的,即圆的参数方程可能不唯一。两种参数的含义不一定一样。
  2. 我们约定俗成的取法是第一种。
  3. 参数方程的参数有时候有明确的几何意义,有时候没有。
  • 当圆为 (x−a)2+(y−b)2=R2 时,先转换为( x − a R \frac{x−a}{R} Rxa)2+( y − b R \frac{y−b}{R} Ryb)2=1,
    对应上式,得到 cosθ= x − a R \frac{x−a}{R} Rxa,sinθ= y − b R \frac{y−b}{R} Ryb,故圆的参数方程为
  • 当椭圆为 x 2 a 2 \frac{ x^2}{ a^2} a2x2+ y 2 b 2 \frac{y^2}{b^2} b2y2=1 时,先转化为( x a \frac{x}{a} ax)2+( y b \frac{y}{b} by)2=1,
    对应上式得到 cosθ= x a \frac{x}{a} ax,sinθ= y b \frac{y}{b} by,故椭圆的参数方程为

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.
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天富儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值