应用场景:
1.判断某一个点是否在线的指定的一侧。
2.判断一个点在线的左侧还是右侧。

给定的条件:三个点(最原始的数据)
已知三个点,a = (px,py),b=(qx,qy),c = (lx,ly),求相对于由a和b两点确定的一条直线,点c位于左侧还右侧。

方法一:无向线段的判断逻辑。
原理:主要利用直线的斜率k。
求出直线ab的斜率k,假设存在点D=(m,n)在ab直线上,且D的y值等于c的y值,即n = ly。此时可以通过斜率算出m,比较m与lx的大小,如果m>lx说明点在线的左边,小于则在右边,等于则在线上。
代码如下:

bool LeftOfLine(const ZCoord2D& p, const ZCoord2& p1, const ZCoord2D& p2){double tmpx = (p1.x - p2.x) / (p1.y - p2.y) * (p.y - p2.y) + p2.x;if (tmpx > p.x)//当tmpx>p.x的时候,说明点在线的左边,小于在右边,等于则在线上。return true;
return false;
}

方法二:利用行列式进行判断。
原理:利用三阶行列式的几何意义,判断点的方位。
具体原理:行列式的几何意义
利用面积的方向性,知道点在线的左右端。
D=|1,px,py| = (py – qy) * lx + (qx – px) * ly + px * qy – qx * py
|1, qx,qy|
|1, lx, ly|

如果D>0,在左侧
如果D<0,在右侧
如果D=0,在线上

方法三:利用向量的叉积
原理:利用了向量叉积的法向量,结合了右手法则,就可以知道点c在线段的哪一侧。
具体原理:根据三个点做出两条同一点出发的两个向量,根据叉乘公式,计算出一个常数M,此M也可以等于两个向量的模乘以两条向量的夹角sina,由于sina在(0,Π)和(Π,2Π)上正负性不同且唯一,因此可以根据M的正负性判断c在直线的左右侧。
向量 ab = (qx-px,qy-py)
向量 ac = (lx -px,ly-py)
M = 向量a × 向量b = (qx-px)(ly-py) - (qy-py)(lx -px)
M > 0 时,在左侧
M < 0 时,在右侧
M = 0时,在线段上

判断点在直线的左侧和右侧的方法及原理相关推荐

  1. 已知三个点坐标求 三角形面积 || 求任意多边形面积公式||判断点在直线的左侧还是右侧

    已知三个点坐标求 三角形面积 由A-->B-->C-->A 按逆时针方向转.(行列式书写要求) 设三角形的面积为S 则S=(1/2)*(下面行列式) |x1 y1 1| |x2 y2 ...

  2. Java黑皮书课后题第6章:*6.39(几何:点的位置)编程练习题3.32显示如何测试一个点是否在一个有向直线的左侧、右侧或在直线上,编写一个程序,输入三个点p0p1p2,显示p2是否在直线p0p1

    6.39(几何:点的位置)编程练习题3.32显示如何测试一个点是否在一个有向直线的左侧.右侧或在直线上,编写一个程序,输入三个点p0p1p2,显示p2是否在直线p0p1 题目 题目描述 编程练习题3. ...

  3. python判断点在直线的哪一侧_判断点在直线的哪一侧

    2.2.1下面开始程序的设计: 由于本部分需要判断空间多边形的拓扑关系,现在约定凸多边形的边界和内部,凸多边形用顶点坐标的逆时针方向序列确定.凸多边形P Q的顶点序列为p1 p2 ..pn和q1 q2 ...

  4. python判断点在直线的哪一侧_判断点在直线的一侧

    方法1: 已知P(0,0),Q(3,2)两点,试判断P,Q是否在直线2x+3y=4的同一侧. 解:直线2x+3y=4 即直线2x+3y-4=0 把P.Q代入2x+3y-4得到 2*0+3*0-4=-4 ...

  5. 判断两条线段/直线相交,并求交点

      一.矢量基本知识     因为后面的计算需要一些矢量的基本知识,这里只是简单的列举如下,如果需要更加详细的信息,可以自行搜索wikipedia或google. 1.矢量的概念:如果一条线段的端点是 ...

  6. 判断点在直线的一哪侧

    转自:http://blog.sina.com.cn/s/blog_4dbb5c5f0101fxzn.html  谢谢分享! 方法1: http://zhidao.baidu.com/question ...

  7. 判断点和直线的位置关系

    ```csharp/// <summary>/// 判断点和直线的位置关系/// </summary>/// <param name="LinePntA&quo ...

  8. POJ2318 TOYS / POJ2398Toy Storage判断点与直线位置关系 【计算几何】

    Calculate the number of toys that land in each bin of a partitioned toy box. 计算每一个玩具箱里面玩具的数量 Mom and ...

  9. Java黑皮书课后题第3章:*3.32(几何:点的位置)给定一个从点p0(x0,y0)到p1(x1,y1)的有向线段,可以用以下公式判定定点p2(x2, y2)是在线段的左侧、右侧,或者在该线段上

    *3.32(几何:点的位置)给定一个从点p0(x0,y0)到p1(x1,y1)的有向线段,可以用以下公式判定定点p2(x2, y2)是在线段的左侧.右侧,或者在该线段上 题目 题目概述 运行示例 代码 ...

最新文章

  1. R语言使用pwr包的pwr.f2.test函数对线性回归模型进行效用分析(power analysis)、在已知效应量(effect size)、显著性水平、效用值的情况下计算需要的样本量
  2. 什么是一致性 Hash 算法
  3. 分布式架构:并发重复请求和幂等场景技术实现总结
  4. The Complete List of MIME Types
  5. pve安装黑群晖直通硬盘_在Proxmox VE(PVE)安装黑群晖
  6. 【线上分享】下一代互联网通讯协议:QUIC
  7. Angular jasmine单元测试框架里spyOn的创建原理
  8. 怎样用bootsrapcol-md来实现四分屏_用会议平板提升会议效率,做好这两点
  9. 数学中的一朵“奇葩”——四元数
  10. 关于大型网站技术演进的思考(六)--存储的瓶颈(6)
  11. python读取行政区txt文件实现行政区树_数据库的点数据根据行政区shp来进行行政区处理,python定时器实现...
  12. 为什么有的软件公司宁愿花15k去重招一个应届生,也不愿意加薪5k留住公司老程序员?...
  13. 用 keepalived 搭建高可用集群之 IP Failover
  14. JAVA输出最大值和最小值
  15. 我的世界seus光影java版下载_我的世界seus光影mod
  16. Python图像处理丨认识图像锐化和边缘提取的4个算子
  17. 图像相似度对比分析软件,图像相似度计算方法
  18. Exp9 Web安全实践基础 20154328 常城
  19. 【Python】如何用Python快速实现语音提醒功能
  20. Linux系统安装使用glassfish3.1.2.2

热门文章

  1. 摩托罗拉押注蓝牙技术
  2. 服务器协议一般是几年,服务器和劳动合同期是一样的么
  3. 如何做好疫情防控班会PPT课件?
  4. 电脑技巧:Win10粘贴文件到C盘提示没有权限的解决方法
  5. 数据库事务 --- Database Transaction
  6. 计算机考试金麦圈编号教程,计算机二级:数据处理
  7. 【Multisim仿真】差分放大电路2
  8. 【小结】——简约的生活
  9. uniapp 引入腾讯地图
  10. Npm发布到私库去的操作