判断某一点是否在三角形内
1.同向法
假设点P位于三角形内,会有这样一个规律,当我们沿着ABCA的方向在三条边上行走时,你会发现点P始终位于边AB,BC和CA的右侧。我们就利用这一点,但是如何判断一个点在线段的左侧还是右侧呢?我们可以从另一个角度来思考,当选定线段AB时,点C位于AB的右侧,同理选定BC时,点A位于BC的右侧,最后选定CA时,点B位于CA的右侧,所以当选择某一条边时,我们只需验证点P与该边所对的点在同一侧即可。问题又来了,如何判断两个点在某条线段的同一侧呢?
首先看一下这个问题,如何判断某两个点在某条直线的同一侧(代码中函数:IsPointAtSameSideOfLine)?
根据向量的叉乘以及右手螺旋定则,AB^AM (^表示叉乘,这里向量省略了字母上面的箭头符号)的方向为向外指出屏幕,AB^AN也是向外指出屏幕,但AB^AO的方向是向内指向屏幕,因此M,N在直线AB的同侧,M ,O在直线AB的两侧。实际计算时,只需要考虑叉积的数值正负
假设以上各点坐标为A(0,0), B(4,0), M(1,2), N(3,4), O(3,-4), 则:
AB^AM = (4,0)^(1,2) = 4*2 - 0*1 = 8
AB^AN = (4,0)^(3,4) = 4*4 – 0*3 = 16
AB^AO = (4,0)^(3,-4) = 4*-4 – 0*3 = –16
由上面的数值可知,可以根据数值的正负判断叉乘后向量的方向。即,如果叉积AB^AM 和 AB^AN的结果同号,那么M,N两点就在直线的同侧,否则不在同一侧。特殊地,如果点M在直线AB上,则AB^AM的值为0。(如果是在三维坐标系中,求出的叉积是一个向量,可以根据两个向量的点积结果正负来判断两个向量的是否指向同一侧)
以上的问题解决了,就很容易的用来判断某个点是否在三角形内,如果P在三角形ABC内部,则满足以下三个条件:P,A在BC的同侧、P,B在AC的同侧、PC在AB的同侧。某一个不满足则表示P不在三角形内部。
2.面积法
如果点P在三角形ABC的内部,则三个小三角形PAB, PBC, PAC的面积之和 = ABC的面积,反之则不相等。
已知三角形的三个顶点坐标求其面积,可以根据向量的叉乘
判断某一点是否在三角形内相关推荐
- 判断某点是否在三角形内
判断某点是否在三角形内 这个问题碰到过好几次了,不仅是笔试的时候,还有在工作上,所以这里做个小总结. 1.通过第三方库函数 首先介绍最简单的方法,直接调用已有的函数.采用python的matplotl ...
- Java 判断一个点是否在一个三角形内
题目描述: 如何判断一个点是否在一个三角形内. 测试样例: 自定义的POINT类: class POINT{int x;int y;public POINT(int x,int y){this.x ...
- 能否构成三角形的条件代码_Java 如何判断一个点是否在一个三角形内
题目描述: 如何判断一个点是否在一个三角形内. 测试样例: 自定义的POINT类: class POINT{ int x; int y; public POINT(int x,int y){ this ...
- Algorithm: 如何判断一个点是否在一个三角形内
昨日因为机缘巧合,做了一道阿里的实习生编程题.题目很有趣,其中涉及到了如何判断一个点是否在一个三角形内. 其中,判断这个问题最简单的方法是面积法.(图片来源:http://www.cnblogs.co ...
- 重心法-判断一点是否在三角形内
1. 叉乘(X) 详细定义可以参考:叉积定义. 在三维坐标系中,如果 a = (a1, a2, a3), b = (b1, b2, b3),那么a x b = (a2b3 - a3b2, a3b1 - ...
- 面试高频算法题补充系列:如何判断一个点是否在三角形内?
前言 了解更多常考高频算法题可以关注 公众号:一个搬砖的胖子 企业面试题库:https://codetop.cc/ 小程序:CodeTop 该题曾出现在字节跳动.腾讯.网易.美团.小马智行等公司的面试 ...
- 判断一个点是否在三角形内
转自:https://www.cnblogs.com/simplekinght/p/9218310.html 面积法:若点P在三角形ABC内,则三角形ABP+三角形ACP+三角形BCP的面积等于三角形 ...
- Java黑皮书课后题第3章:**3.27(几何:点是否在三角形内)假设一个平面上有一个直角三角形。编写程序,提示用户输入一个点的x坐标和y坐标,然后判断这个点是否在该三角形内
**3.27(几何:点是否在三角形内)假设一个平面上有一个直角三角形.编写程序,提示用户输入一个点的x坐标和y坐标,然后判断这个点是否在该三角形内 题目 题目描述 破题 运行示例 代码 题目 题目描述 ...
- 如何判断一点在三角形内
假定在右手坐标系中的三角形3点坐标为A,B,C,判断P是否在ABC之内 ( 主要来自 3D引擎研发QQ群(38224573 )的各位朋友的讨论 ,我仅仅算做个总结吧,特别感谢各位朋友的热情支持. ) ...
最新文章
- 用虚拟机安装了红帽后,我确实没设置用户名密码,但现在一打开就让输入用户名密码。这种情况该怎么办??
- [你必须知道的.NET]第二十三回:品味细节,深入.NET的类型构造器
- django-xadmin使用之更改菜单url
- 2011系统架构师大会分享-自动化运维中的关系管理
- 资料下载丨“十四五”数据库发展趋势与挑战-CCF数据库专委会
- OpenCV 学习笔记 04 深度估计与分割——GrabCut算法与分水岭算法
- 如何提高python代码运行速度_一行代码让你的python运行速度提高100倍
- UE4 GameplayTag 初始化造成崩溃错误
- mysql多表联合查询 去重_MySQL多表联合查询
- U盘中毒文件都不见了
- Mac 下使用ISIS 处理数据 -CTX,HiRISE,LRO
- 超详细的canal使用总结
- 软件测试中Bug的分类(类型)
- SwiftUI中如何使用App Tracking Transparency Framework
- 科普:alphago是什么
- 改造一个NET4.5的WPF项目到NET6
- 1.网页源码中找到我们需要获取
- eps高程点和高程注记不符_利用AutoCAD二次开发实现地形图高程点与等高线错误自动查找...
- JCJC错别字检测系统API接口使用文档-添加黑名单、白名单词汇
- cad高程测绘图lisp_CAD中自动画管线图的LISP程序