点云几何 之 判断某一点在三角形的内外(1)
2023-12-13 21:42:27
一、算法介绍
判断某一点位于三角形的内部还是外部,这里三角形用三个顶点来表示。
(代码简单易懂,直接复制粘贴即可使用)
二、算法实现
1.代码
#include <iostream>
using namespace std;
struct Point {
float x, y;
};
//返回true 表示点在三角形内部,返回false则表示点在三角形外部
bool isInside(Point p1, Point p2, Point p3, Point p) {
float A = 0.5 * (-p2.y * p3.x + p1.y * (-p2.x + p3.x) + p1.x * (p2.y - p3.y) + p2.x * p3.y);
float sign = A < 0 ? -1 : 1;
float s = (p1.y * p3.x - p1.x * p3.y + (p3.y - p1.y) * p.x + (p1.x - p3.x) * p.y) * sign;
float t = (p1.x * p2.y - p1.y * p2.x + (p1.y - p2.y) * p.x + (p2.x - p1.x) * p.y) * sign;
return s > 0 && t > 0 && (s + t) < 2 * A * sign;
}
int main() {
Point p1 = { 0, 0 }; //三角形顶点1
Point p2 = { 4, 0 }; //三角形顶点2
Point p3 = { 0, 3 }; //三角形顶点3
Point p = { 2, 1.49 }; //某一点
//开始判断
if (isInside(p1, p2, p3, p)) {
cout << "点在三角形内部." << endl;
}
else {
cout << "点在三角形外部." << endl;
}
system("pause");
return 0;
}
2.结果
注意事项
这里需要注意一个问题,对于某一点,除了内外两种情况,还有可能在边上
对于点刚好位于三角形某一条边上的情况,这里的代码会将该点判断为在三角形外部
这个在后续的代码中会加以改进
文章来源:https://blog.csdn.net/weixin_44329757/article/details/134981750
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!