点云几何 之 判断某一点在三角形的内外(1)

2023-12-13 21:42:27

点云几何 之 判断某一点在三角形的内外(1)

一、算法介绍

判断某一点位于三角形的内部还是外部,这里三角形用三个顶点来表示。
(代码简单易懂,直接复制粘贴即可使用)
在这里插入图片描述

二、算法实现

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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。