使用向量叉乘判断点是否在三角形内
叉乘具有方向性,对于三角形abc和点p,使用向量ab⃗\vec{ab}ab xap⃗\vec{ap}ap ,如果p点在ab⃗\vec{ab}ab左侧,则结果大于0,如果p点在ab⃗\vec{ab}ab右侧,则结果小于0
可以将三角形abc按顺序(上图为逆时针)连接起来,形成三个向量ab⃗\vec{ab}ab、bc⃗\vec{bc}bc、ca⃗\vec{ca}ca,判断与ap⃗\vec{ap}ap、bp⃗\vec{bp}bp、cp⃗\vec{cp}cp叉乘结果,如果都小于0,那么判定点在三角形内部,如果有等于0的结果,说明两向量共线,点在三角形边上
//点结构体
struct SPOINT{int x;int y;
};
//叉乘函数
int multiplication_cross(int x1,int y1,int x2,int y2){return x1*y2-x2*y1;
}
//叉乘法判断点在三角形内部
//参数p1 p2 p3 三角形的顶点 参数p4 要判断的点
//返回值 1 在三角形内部 0 在三角形边上 -1在三角形外部
int is_inside(SPOINT p1,SPOINT p2,SPOINT p3,SPOINT p4){SPOINT p12;SPOINT p23;SPOINT p31;SPOINT p14;SPOINT p24;SPOINT p34;p12.x=p2.x-p1.x;p12.y=p2.y-p1.y;p23.x=p3.x-p2.x;p23.y=p3.y-p2.y;p31.x=p1.x-p3.x;p31.y=p1.y-p3.y;p14.x=p4.x-p1.x;p14.y=p4.y-p1.y;p24.x=p4.x-p2.x;p24.y=p4.y-p2.y;p34.x=p4.x-p3.x;p34.y=p4.y-p3.y;if(multiplication_cross(p12.x,p12.y,p14.x,p14.y)>0&&multiplication_cross(p23.x,p23.y,p24.x,p24.y)>0&&multiplication_cross(p31.x,p31.y,p34.x,p34.y)>0){return 1;}if(multiplication_cross(p12.x,p12.y,p14.x,p14.y)*multiplication_cross(p23.x,p23.y,p24.x,p24.y)*multiplication_cross(p31.x,p31.y,p34.x,p34.y) == 0){return 0;}return -1;
}
使用向量叉乘判断点是否在三角形内相关推荐
- 2014软专高级程序语言T2(用向量叉乘判断点与三角形的位置关系)
编写程序,输入A,B,C,D四个点的坐标,假设A,B,C三点可以构成一个三角形,判断D点是否落在三角形内. 解题思路: 假设三角形的三个点按照顺时针(或者逆时针)顺序是A,B,C.对于某一点P,求出三 ...
- 利用叉乘快速判断点是否在三角形内
利用叉乘快速判断点是否在三角形内 判断P是否在三角形ABC内: 向量: pa = P - A, ca = C - A; ba = B - A; 如果向量 cross(ca, pa)与向量 cross ...
- 判断一个点在三角形内
http://www.gimoo.net/t/1505/5557e812d7390.html 判断点是否在三角形内 本文只是翻译和整理,原文在此http://www.blackpawn.com/tex ...
- 向量叉乘判断点是否在多边形内部
向量叉乘: 二维向量的叉乘 ( x1 , y1 ) * ( x2 , y2 ) = x1y2 - y1x2 如果值大于0 , 则表明 ( x2 , y2 ) 在 ( x1 , y1 )左边,反之在右边 ...
- 二维平面上判断点是否在三角形内
1. 已知三角形的三个顶点坐标,判断某个点是否在三角形中(在三角形的边上,我们也视作在三角形中),本文给出了三种方法. 算法1:利用面积法 如上图所示,如果点P在三角形ABC的内部,则三个小三角形PA ...
- 判断点是否在三角形内
本文只是翻译和整理,原文在此http://www.blackpawn.com/texts/pointinpoly/default.html 概述 给定三角形ABC和一点P(x,y,z),判断点P是否在 ...
- [演示] 判断点是否处于三角形内的算法分析
http://bbs.wow8.org/thread-94298-1-1.html 由于某些特殊需求,有时候需要判断一个点是不是在某一个三角形内面.虽然这样的情况很少,而且不是必须的,但既然有人提到了 ...
- 给定三角形ABC和一点P(x, y),判断P是否在三角形内
解题思路: 根据点P与三角形其中两点所形成的三角形面积之和与三角形ABC面积进行比较,如果相等则点P在三角形内,不相等则不在三角形ABC内. 解题步骤: 一.根据给定的三点坐标计算三角形的面积: 二. ...
- 重心法-判断一点是否在三角形内
1. 叉乘(X) 详细定义可以参考:叉积定义. 在三维坐标系中,如果 a = (a1, a2, a3), b = (b1, b2, b3),那么a x b = (a2b3 - a3b2, a3b1 - ...
最新文章
- php安装redis扩展模块
- [总结篇3]Provider_network的含义
- hdu 2009 求数列的和(c语言)
- java update多个字段的值_SQL的update多个字段的写法
- android6.0源码分析之Activity启动过程
- oracle 数据 时间间隔,如何掌握 Oracle 中的时间间隔型数据
- 支付宝服务窗的简单开发体会
- zookeeper集群部署监控与选举同步流程等工作原理
- 【运动学】基于matlab GUI模拟鱼类目标追击问题【含Matlab源码 166期】
- 谷歌云盘批量下载文件
- php五行万年历,PHP制作万年历
- C++设计模式基础和模式设计基本原则
- OneNote无法粘贴图片
- BottomNavigationView 动态切换Icon且保留原图颜色
- k8s 1.23 及keda 2.7.1 安装测试
- 第3-4课:爱因斯坦的思考题(上)
- 体现SRP(单一职责原则)的两种模式——工厂模式和命令模式
- django_models_外键应用
- scp传文件指定端口、传输目录
- 热门商业模式解剖:哪个适合中国