点云几何 之 判断某一点是否在三角形的边上(3)

2023-12-14 07:44

本文主要是介绍点云几何 之 判断某一点是否在三角形的边上(3),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点云几何 之 判断某一点是否在三角形的边上(3)

  • 一、算法介绍
  • 二、算法实现
    • 1.代码
    • 2.结果
  • 总结

一、算法介绍

判断某一点是否在三角形的边上
之前已经介绍了点在三角形的内外判断方法,这里增加点恰好在三角形边上的判断方法
(本质上是遍历每条边,查看点是否在边上,所以对于多边形也是适用的。)
在这里插入图片描述
代码复制粘贴即可使用

二、算法实现

1.代码

#include <iostream>
using namespace std;struct Point {float x, y;
};// 判断点是否在三角形的某条边上
bool isOnTriangleEdge(Point p1, Point p2, Point p3, Point p) {float epsilon = 0.000001; // 用于比较浮点数的误差范围// 检查点p是否在边p1-p2上if (abs((p2.y - p1.y) * (p.x - p1.x) - (p.y - p1.y) * (p2.x - p1.x)) < epsilon) {if (p.x >= min(p1.x, p2.x) && p.x <= max(p1.x, p2.x) && p.y >= min(p1.y, p2.y) && p.y <= max(p1.y, p2.y)) {return true;}}// 检查点p是否在边p2-p3上if (abs((p3.y - p2.y) * (p.x - p2.x) - (p.y - p2.y) * (p3.x - p2.x)) < epsilon) {if (p.x >= min(p2.x, p3.x) && p.x <= max(p2.x, p3.x) && p.y >= min(p2.y, p3.y) && p.y <= max(p2.y, p3.y)) {return true;}}// 检查点p是否在边p3-p1上if (abs((p1.y - p3.y) * (p.x - p3.x) - (p.y - p3.y) * (p1.x - p3.x)) < epsilon) {if (p.x >= min(p1.x, p3.x) && p.x <= max(p1.x, p3.x) && p.y >= min(p1.y, p3.y) && p.y <= max(p1.y, p3.y)) {return true;}}return false;
}int main() {Point p1 = { 0, 0 };Point p2 = { 4, 0 };Point p3 = { 2, 4 };Point p = { 2, 4 };if (isOnTriangleEdge(p1, p2, p3, p)) {cout << "点在三角形的边上" << endl;}else {cout << "点不在三角形的边上" << endl;}system("pause");return 0;
}

2.结果

在这里插入图片描述


总结

这个和之前判断内部还是外部的方法结合,即可完整表达点与三角形的相对位置关系

这篇关于点云几何 之 判断某一点是否在三角形的边上(3)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/491712

相关文章

poj 3259 uva 558 Wormholes(bellman最短路负权回路判断)

poj 3259: 题意:John的农场里n块地,m条路连接两块地,w个虫洞,虫洞是一条单向路,不但会把你传送到目的地,而且时间会倒退Ts。 任务是求你会不会在从某块地出发后又回来,看到了离开之前的自己。 判断树中是否存在负权回路就ok了。 bellman代码: #include<stdio.h>const int MaxN = 501;//农场数const int

uva 10387 Billiard(简单几何)

题意是一个球从矩形的中点出发,告诉你小球与矩形两条边的碰撞次数与小球回到原点的时间,求小球出发时的角度和小球的速度。 简单的几何问题,小球每与竖边碰撞一次,向右扩展一个相同的矩形;每与横边碰撞一次,向上扩展一个相同的矩形。 可以发现,扩展矩形的路径和在当前矩形中的每一段路径相同,当小球回到出发点时,一条直线的路径刚好经过最后一个扩展矩形的中心点。 最后扩展的路径和横边竖边恰好组成一个直

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

【WebGPU Unleashed】1.1 绘制三角形

一部2024新的WebGPU教程,作者Shi Yan。内容很好,翻译过来与大家共享,内容上会有改动,加上自己的理解。更多精彩内容尽在 dt.sim3d.cn ,关注公众号【sky的数孪技术】,技术交流、源码下载请添加微信号:digital_twin123 在 3D 渲染领域,三角形是最基本的绘制元素。在这里,我们将学习如何绘制单个三角形。接下来我们将制作一个简单的着色器来定义三角形内的像素

XTU 1237 计算几何

题面: Magic Triangle Problem Description: Huangriq is a respectful acmer in ACM team of XTU because he brought the best place in regional contest in history of XTU. Huangriq works in a big compa

2、PF-Net点云补全

2、PF-Net 点云补全 PF-Net论文链接:PF-Net PF-Net (Point Fractal Network for 3D Point Cloud Completion)是一种专门为三维点云补全设计的深度学习模型。点云补全实际上和图片补全是一个逻辑,都是采用GAN模型的思想来进行补全,在图片补全中,将部分像素点删除并且标记,然后卷积特征提取预测、判别器判别,来训练模型,生成的像

zoj 1721 判断2条线段(完全)相交

给出起点,终点,与一些障碍线段。 求起点到终点的最短路。 枚举2点的距离,然后最短路。 2点可达条件:没有线段与这2点所构成的线段(完全)相交。 const double eps = 1e-8 ;double add(double x , double y){if(fabs(x+y) < eps*(fabs(x) + fabs(y))) return 0 ;return x + y ;

POJ1269 判断2条直线的位置关系

题目大意:给两个点能够确定一条直线,题目给出两条直线(由4个点确定),要求判断出这两条直线的关系:平行,同线,相交。如果相交还要求出交点坐标。 解题思路: 先判断两条直线p1p2, q1q2是否共线, 如果不是,再判断 直线 是否平行, 如果还不是, 则两直线相交。  判断共线:  p1p2q1 共线 且 p1p2q2 共线 ,共线用叉乘为 0  来判断,  判断 平行:  p1p

poj 3304 几何

题目大意:给出n条线段两个端点的坐标,问所有线段投影到一条直线上,如果这些所有投影至少相交于一点就输出Yes!,否则输出No!。 解题思路:如果存在这样的直线,过投影相交点(或投影相交区域中的点)作直线的垂线,该垂线(也是直线)必定与每条线段相交,问题转化为问是否存在一条直线和所有线段相交。 若存在一条直线与所有线段相交,此时该直线必定经过这些线段的某两个端点,所以枚举任意两个端点即可。