判断点和直线位置关系的算法实现

(\vec{CA_1}\cdot \vec{CB} )*(\vec{BA_1}\cdot \vec{CB} )== 0在线段上给定点P的所在方向意味着给定点P和线段(比如AB)的坐标,我们必须确定点P相对于线段的方向。也就是这个点是在线段的右边还是在线段的左边。

这个点可能在线段的后面,在这种情况下,我们通过延伸线段来假设一条假想的线,并确定点的方向。

点与直线的位置关系,只有三种情况存在,分别是点在直线左边,或在直线右边,或在就在线段本身上。

这是一个非常基本的问题,在在线地图导航中经常遇到,

例如:假设用户a在下图中必须到达C点,用户首先到达B点,但之后用户a如何知道他需要右转还是左转?

从线段中了解点的方向也可以解决更复杂的问题,例如,线段相交问题,求两条线段是否相交。

我们要用的坐标系是笛卡尔平面,大多数二维问题都用笛卡尔平面,因为这是一个二维问题。这个问题可以用向量代数的叉积来解决,两点A和B的叉积是:Ax * By - Ay * Bx

其中Ax和Ay分别是A的x坐标和y坐标。类似地,Bx和By分别是B的x和y坐标。叉乘有一个有趣的性质,它将用于从线段确定一个点的方向。也就是说,当且仅当两点在原点(0,0)处的角是逆时针方向时,两点的叉乘是正的。反之,当且仅当这些点在原点的角度是顺时针方向时,叉乘是负的。

举个例子就清楚了,

下图中,角度BOP为逆时针方向,\vec{a}\times \vec{b}的叉积为29*28 -15 *(-15)= 1037,是正的。

实际上,叉积有更直观的几何意义,根据定义:

\vec{a}\times\vec{b}=\left | \vec{a} \right |\cdot \left | \vec{b} \right |sin<\vec{a},\vec{b}>

其中,\left | \vec{a} \right |, \left | \vec{b} \right |,分别是向量\vec{a},\vec{b}的模长,<\vec{a},\vec{b}>表示两个向量之间的夹角。需要注意的是,叉积有正有负,有其夹角<\vec{a},\vec{b}>决定,夹角<\vec{a},\vec{b}>可以理解为 \vec{a}\vec{b}的角,相比内积,叉积只是将 cos(\theta) 变成了sin(\theta).

如果说内积的几何意义是投影和乘积的话,叉积的几何意义就会明确许多,叉积的数值(绝对值)就表示以两向量为边长的平行四边形的面积。

证明 如图,在平行四边形 OACB 中,设  \vec{OA}=\vec{a},

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

papaofdoudou

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

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

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

打赏作者

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

抵扣说明:

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

余额充值