判断点P是否在三角形ABC内
已知:三角形ABC,点P
问题:点P是否在三角形内
1.面积法
如果三角形PAB、PAC和PBC的面积之和与三角形ABC的面积相等,则可判定点P在三角形ABC内(包括在三条边上)。
已知三角形顶点A、B、C)的坐标分别为(Ax, Ay)、(Bx, By)、(Cx, Cy),即可计算其面积:
S = |(Ax * By + Bx * Cy + Cx * Zy - Ay * Bx - By * Cx - Cy * Ax) / 2|
2.线段法
如果线段PA与线段BC、或者线段PB与线段AC、或者线段PC与线段AB有交点,则可判定点P在三角形之外。
如果点P到AB的距离比C到AB的距离短,并且点P到AC的距离比B到AC的距离短,并且点P到BC的距离比A到BC的距离短,则可以判定点P在三角形内。
3.向量法
设三边方程BC:fa(x,y)=0,AC:fb(x,y)=0,AB:fc(x,y)=0
以BC为例,在三角形内的点必须与点A在BC的同侧,对于点P(x,y)在三角形内首先要满足fa(x,y)*fa(Ax, Ay)>0,其他边也同理,所以只要比较fa(x,y)*fa(Ax, Ay)、fb(x,y)*fb(Bx, By)、fc(x,y)*fc(Cx, Cy)
这三个数的正负性
1)三个数都是正数:D在三角形内
2)至少有一个负数:D在三角形外
3)有且只有一个0,另两个为正数:在三角形边上
4)有且只有一个0,一个正数一个负数:在三角形边的延长线上,也算在三角形外,因为满足2
5)有二个0:在三角形的顶点上
6)不可能出现3个0,或3个负数,或一个0两个负数的情况
4.同向法
假设点P位于三角形内,沿着ABCA的方向在三条边上行走时,点P始终位于边AB,BC和CA的右侧。当选定线段AB时,点C位于AB的右侧,同理选定BC时,点A位于BC的右侧,最后选定CA时,点B位于CA的右侧,所以当选择某一条边时,我们只需验证点P与该边所对的点在同一侧即可。判断两个点在某条线段的同一侧可以通过叉积来实现,连接PA,将PA和AB做叉积,再将CA和AB做叉积,如果两个叉积的结果方向一致,那么两个点在同一侧。
判断点P是否在三角形ABC内相关推荐
- 如何判断点P是否在三角形ABC内?
本题最好不要用直线方程或线段夹角来判断,因为这涉及到分类与讨论,下面的算法是相对比较好的算法,代码如下: #include<iostream> #include<cmath> ...
- 判断点P是否在三角形ABC内部
判断点P是否在三角形ABC内部 (1)计算叉乘 MA = PA×PB MB = PB×PC MC = PC×PA (2)叉乘算法 PA×PB = (A-P)×(B-P) = (Xa-Xp ...
- 笔试面试题目:点P是否在三角形ABC内?
一. 前面的话 在面试刷题这个栏目中,我主要引入一些典型有趣的题目,跟大家一起分享下思路和解法. 有的朋友,不需要面试,那也无妨,看看相关的题目,挺有趣的,也可以保持头脑的灵活. 有的朋友,需要面试, ...
- 给定三角形 ABC 和一点 P(x,y,z),判断点 P 是否在 ABC 内,给出思路并手写代码
三角形面积 根据面积法,如果 P 在三角形 ABC 内,那么三角形 ABP 的面积+三角形 BCP 的面积+三角形 话不多说了,直接上代码 根据面积法,如果 P 在三角形 ABC 内,那么三角形 AB ...
- 给定三角形ABC和一点P(x, y),判断P是否在三角形内
解题思路: 根据点P与三角形其中两点所形成的三角形面积之和与三角形ABC面积进行比较,如果相等则点P在三角形内,不相等则不在三角形ABC内. 解题步骤: 一.根据给定的三点坐标计算三角形的面积: 二. ...
- android 随机坐标,按键精灵安卓版如何随机坐标判断点击.在线等大神回复
/ '定义一些常用变量:IntX IntY 找色模块返回值用,win_x win_y 屏幕分辨率用,win_w win_h 分辨率比例用 Dim x,y Dim IntX,IntY Dim win_x ...
- 牛客C++面经——给定三角形ABC和一点P(x,y,z),判断点P是否在ABC内
目录 思路: 计算面积的方法:海伦公式 注意: 代码: 参考:
- 【无码专区8】三角形二维数点——计数有多少个给定点落在三角形区域内
因为只有std,没有自我实现,所以是无码专区 主要是为了训练思维能力 solution才是dls正解,但是因为只有潦草几句,所以大部分会有我自己基于正解上面的算法实现过程,可能选择的算法跟std中dl ...
- 【C/C++题目】输入三角形ABC的三个角坐标, 输出三角形ABC的面积
文章目录 一.实现代码 二.运行效果 利用海伦公式求三角形面积,因此先利用两点距离公式求得边长,即可求出面积 一.实现代码 #include <iostream> #include < ...
最新文章
- 基于图像的三维物体重建:在深度学习时代的最新技术和趋势综述之训练
- nanopore测序技术专题(六):测序错误率太高无法使用?
- 【转】android手势处理揭秘
- x5675相当于e5_至强X5675比I7 2600强多少 至强X5675相当于几个AMD X2 220
- 《设计模式》一书PPT浏览及下载地址
- hdu 2454 Degree Sequence of Graph G(可简单图化判定)
- TZOJ 1321 Girls and Boys(匈牙利最大独立集)
- python笔记之函数参数(缺省参数,命名参数,不定长参数)
- java 链接mysql 产生500W数据模拟生成环境
- 单链表基本操作在主函数中的实现
- 一维战舰(51Nod-1521)
- 自学python能干什么-python能干啥
- C语言 — 编程规范、标识符命名规范
- Spring源码下载步骤
- 01_测试基础知识---功能测试常用方法/正交表的使用
- mysql 公历变农历_巧用SQL函数让公历变农历
- 聚合微服务中的 Swagger API 文档
- jQuery源码分析之$.grep()函数四问
- 《职来职往》 经典语录
- html水平镜像和垂直镜像,使用CSS水平/垂直翻转/镜像图像
热门文章
- 网易互娱AI研究工程师实习生一面——记人生的第一次面试
- Java如何判断字符串中包含有全角,半角符号
- 三.螺丝与核弹。【成长篇】
- Android ExceptionThrowable 常见异常和解决方法 奔溃日志上报 monkey异常修改
- 直播常见问题原因汇总
- 学校对计算机教师的检查要求,计算机学院2015-2016学年第二学期期中教学检查方案...
- winform Control与UserControl的区别
- Docker学习手记-1
- C语言经典一百题(六)用*号输出字母C的图案。
- 低成本快速开发 LoRa 终端:从 0 到 1