猿问
回到首页
个人中心
反馈问题
注册登录
下载APP
首页
课程
实战
体系课
手记
专栏
慕课教程
如何确定点是否在二维三角形中?
如何确定点是否在二维三角形中?
是否有一个简单的方法来确定一个点是否在一个三角形内?它是二维的,不是3D的。
白板的微信
浏览 717
回答 3
3回答
一只斗牛犬
解下列方程组:p = p0 + (p1 - p0) * s + (p2 - p0) * t重点p在三角形内,如果0 <= s <= 1和0 <= t <= 1和s + t <= 1.s,t和1 - s - t被称为重心坐标重点p.
0
0
0
慕尼黑的夜晚无繁华
我同意安德烈亚斯·布林克,以重心为中心的坐标对此任务非常方便。请注意,不需要每次求解方程系统:只需计算解析解即可。使用安德烈亚斯“表示法,解决办法是:s = 1/(2*Area)*(p0y*p2x - p0x*p2y + (p2y - p0y)*px + (p0x - p2x)*py); t = 1/(2*Area)*(p0x*p1y - p0y*p1x + (p0y - p1y)*px + (p1x - p0x)*py);哪里Area是三角形的(签名)区域:Area = 0.5 *(-p1y*p2x + p0y*(-p1x + p2x) + p0x*(p1y - p2y) + p1x*p2y);只是评估一下s, t和1-s-t..重点p是三角形的当且仅当它们都是正的。编辑:请注意,该区域的上述表达式假定三角形节点编号是逆时针方向的。如果编号是顺时针方向的,则此表达式将返回一个负区域(但大小正确)。测试本身(s>0 && t>0 && 1-s-t>0)并不取决于编号的方向,因为上面的表达式乘以1/(2*Area)如果三角形节点方向发生变化,也要更改符号。编辑2:要获得更高的计算效率,请参见COPROC下面的注释(它指出,如果预先知道三角形节点(顺时针或逆时针)的方向,则按2*Area在表达式中s和t可以避免)。另见阿祖尔注释中的jspldle-代码安德烈亚斯·布林克答案。
0
0
0
打开App,查看更多内容
随时随地看视频
慕课网APP
相关分类
算法
正则表达式,要怎麽从下一个字开始匹配,而不是从下一个词?
0 回答
scrapy 解析js代码或正则?
2 回答
数学
数学建模 什么意思?
2 回答
怎样学习数学建模?
1 回答
继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续