(计算几何)判断一个点是否在线段上
累加器传送门:
http://blog.csdn.net/NOIAu/article/details/71775000
这个问题需要用到向量的叉积性质,下面先从百度截一些语句来介绍一下
用向量的叉积来判断一个点是否在线段上
百度百科传送门:http://baike.baidu.com/link?url=TEpSD0TEPEzQhiRj1NhV1xQo6DojftoJaSyHFszURLK0y3rIkk972lKgssE-WdWYoDUzA5s9K6KNJzgfx315dlx8R1DH78XATQHSJv1LT06aYQJ53dO19r0XGNiJDomu2sang5UaxHuKrUlGsoDzu_1vTgq_wlntBN67pazqcbG
向量积,数学中又称外积、叉积,物理中称矢积、叉乘,是一种在向量空间中向量的二元运算。与点积不同,它的运算结果是一个向量而不是一个标量。并且两个向量的叉积与这两个向量和垂直。
计算是这样的,对于向量a(x1,y1),b(x2,y2)
他们的叉积a×b=x1y2-y1x2
叉积是一个向量,表示的是有向面积,方向可以用右手定则来判断,比如要用a×b,就要把a旋转到b,如果四指为旋转方向,拇指所指的方向就是叉积的方向
我们可以发现
如果向量AP×AB的叉积为正,则向量AP在向量AB的顺时针方向,反之为逆时针方向,当两个向量的乘积为0的时候,A,B,P三点共线
回到我们要干的事情,如果叉积为零,可以证明一个点在线段所在的直线上,那么怎么证明在线段上呢?只需要让该点位于线段在坐标系中围成的长方形中就行了,如图所示
所以大家知道该怎么判断了吧
然后上代码
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>using namespace std;const double eps=1e-10;
struct Point{double x,y;
}Q,P1,P2;typedef Point P; P operator - (P a,P b){P p;p.x=a.x-b.x;p.y=a.y-b.y;return p;
}double operator *(P a,P b){return a.x*b.y-b.x*a.y;
}int main(){scanf("%lf%lf%lf%lf%lf%lf",&Q.x,&Q.y,&P1.x,&P1.y,&P2.x,&P2.y);if(fabs((Q-P1)*(Q-P2))<eps){if(min(P1.x,P2.x)-eps<=Q.x&&Q.x-eps<=max(P1.x,P2.x)){if(min(P1.y,P2.y)-eps<=Q.y&&Q.y-eps<=max(P1.y,P2.y)){printf("YES\n");return 0;}}}printf("NO\n");return 0;
}
(计算几何)判断一个点是否在线段上相关推荐
- Java黑皮书课后题第3章:*3.34(几何:线段上的点)编程练习题3.32显示了如何测试一个点是否在一个无限长的直线上。修改3.32测试一个点是否在一个线段上。编写程序,输入三个点坐标,显示在否线段
*3.34(几何:线段上的点)编程练习题3.32显示了如何测试一个点是否在一个无限长的直线上.修改3.32测试一个点是否在一个线段上.编写程序,输入三个点p0 p1 p2坐标,显示p2在否线段p0p1 ...
- 如何判断一个用户是否在O365上还是本地Exchange服务器上
我参考的文章是这个链接. https://mikefrobbins.com/2018/08/02/determine-if-a-mailbox-is-on-premises-or-in-office- ...
- php分页上一页下一页判断,一个分页函数:显示“上一页下一页”等
'************************************************** '函数名:ShowPage '作 用:显示"上一页 下一页"等信息 '参 数 ...
- 如何判断一个浮点数是不是整数
论曰:如何判断一个浮点数是否为整数 上思路! 如果一个浮点数等于它对应的整数位的整数呢? 强制类型转换! // CPP 代码 double n; //被判断的浮点数 cin>>n; //读 ...
- java如何判断一个点在一条线段上
第一步:数学思路思考: 首先肯定是要先证明该点是在一条直线上,我在上篇文章有介绍,可以去看一下,证明一个点在一条直线上,然后去想如何证明一个点在一条线段上,学数学的时候我们知道,如果一个点在一条线段上 ...
- java判断线段是否相交函数_计算几何-判断线段是否相交
计算几何-判断线段相交 判断两线段是否相交: 快速排斥 跨立实验(这两个词也是我看博客的时候看到的,觉得挺高大上的就拿过来用了,哈哈哈) 1. 快速排斥:就是初步的判断一下,两条线段是不是相交,以两条 ...
- VC++ 判断点是否在线段上
这算法在一些地方会用到:在GIS中也有: 新建一个单文档工程: 先把窗口标题改一下:如下图定位到文档类OnNewDocument函数: 定位到OnNewDocument()函数,添加setTitle一 ...
- Java黑皮书课后题第3章:*3.32(几何:点的位置)给定一个从点p0(x0,y0)到p1(x1,y1)的有向线段,可以用以下公式判定定点p2(x2, y2)是在线段的左侧、右侧,或者在该线段上
*3.32(几何:点的位置)给定一个从点p0(x0,y0)到p1(x1,y1)的有向线段,可以用以下公式判定定点p2(x2, y2)是在线段的左侧.右侧,或者在该线段上 题目 题目概述 运行示例 代码 ...
- 线段的逆时针方向(顺时针、正上方、正下方、线段上)、相交判断(图解)
逆时针方向 给定3个点,构造出从同一起点的两条线段,判断两条线段的关系 这个关系包括逆时针.顺时针.重合,其中重合又包括点在线段正上方.正下方情况! 图示 图中都是以p0为源点,p0p1为基准线,判断 ...
最新文章
- automake使用说明
- SDUT_2121数据结构实验之链表六:有序链表的建立 (对建立的单项链表结构进行排序)
- 【动画技巧】在Flash中自定义鼠标外观
- 关于C语言static定义函数类型的具体解释
- unity 如何获取到屏幕中间_【Unity】屏幕空间位置变换到世界空间位置的方法
- 无线网络技术(实验)——无线局域网组成与管理实验
- 新建计算机管理员账户,Win10如何新建本地管理员账户
- Unity报错之【发布UWP显示“Could not find any supported UWP SDK installations”】
- 关于java文件乱码解决
- Windows 11 22H2 中文版、英文版 (x64、ARM64) 下载 (updated Jan 2023)
- 南卡和声阔真无线降噪耳机哪款更好?南卡和声阔蓝牙耳机测评
- 《中国民生银行天眼日志平台架构演进的平凡之路》阅读有感
- 深入理解硬盘原理,Mysql索引底层数据结构与算法的来龙去脉(多图)
- 单片机c语言什么是ea,单片机ie是什么?怎么用?
- STM32F4+DP83848以太网通信指南系列知识储备
- unity3d 骨骼模型武器绑定
- Java Web程序设计第12章课后第2题
- 2019暑假集训总结与记录
- 你了解V神吗?先吃透这份不能更全的《以太坊攻略》再说!
- iptables端口映射详解
热门文章
- 异想家纯C语言矩阵运算库
- 【解决方案】如何通过EasyCVR智能边缘网关设备实现前端设备利旧上云,打造AI课程智慧应用
- 面板JPanel,滚动面板JScrollPane,文本域JTextArea
- 用qt做python界面设计_Python GUI教程(六):使用Qt设计师进行窗口布局
- 星巴克中国升级星享俱乐部会员制度
- 如何用python写函数_numpy的random函数 如何利用python中的
- KINGBASE V7 行转列
- 数值积分方法:欧拉积分、中点积分和龙格-库塔法积分
- 方舟服务器重置刷礼包,明日方舟周年庆礼包及重置双倍性价比详解 教你最完美的氪金思路...
- 孙溟㠭20余载春秋,4000多方印章,这双质朴的手有多么倔强的生命力