Unity检测一个点是否在三角形区域里边的两种方法

Wesley13
• 阅读 384

版权声明:本文为博主原创文章,未经博主允许不得转载。https://www.cnblogs.com/baosong/p/9545040.html ****

其中需要传入的四个点分别为:进行判断的点和三角形的三个顶点

其中第一种方法和第二个方法都是通过三角形的特性进行判定

具体的原理大家可以揣摩一下,但是代码可以进行使用

#region 用于判断一个点是否在三角形范围内
//向其中传入四个点
public bool IsINTriangle(Vector3 point, Vector3 v0, Vector3 v1, Vector3 v2)
{
    float x = point.x;
    float y = point.y;
 
    float v0x = v0.x;
    float v0y = v0.y;
 
    float v1x = v1.x;
    float v1y = v1.y;
 
    float v2x = v2.x;
    float v2y = v2.y;
 
    //第一种方法
    //if (isInside(v0x, v0y, v1x, v1y, v2x, v2y, x, y))
    //    return true;
    //return false;
 
    //第二个方法
    if ((pointInTriangle(v0x, v0y, v1x, v1y, v2x, v2y, x, y)))
        return true;
    return false;
}
//第一种检测方法:
double area(float x1, float y1, float x2,float y2, float x3, float y3)
{
    return Math.Abs((x1 * (y2 - y3) +x2 * (y3 - y1) +x3 * (y1 - y2)) / 2.0);
}
bool isInside(float x1, float y1, float x2, float y2, float x3, float y3,float x, float y)
{
    /* Calculate area of triangle ABC */
    double A = area(x1, y1, x2, y2, x3, y3);
 
    /* Calculate area of triangle PBC */
    double A1 = area(x, y, x2, y2, x3, y3);
 
    /* Calculate area of triangle PAC */
    double A2 = area(x1, y1, x, y, x3, y3);
 
    /* Calculate area of triangle PAB */
    double A3 = area(x1, y1, x2, y2, x, y);
 
    /* Check if sum of A1, A2 and A3 is same as A */
    return (A == A1 + A2 + A3);
}
 
//第二种检测方法:
bool pointInTriangle(float x1, float y1, float x2, float y2, float x3, float y3, float x, float y)
{
     float denominator = ((y2 - y3)*(x1 - x3) + (x3 - x2)*(y1 - y3));
     float a = ((y2 - y3)*(x - x3) + (x3 - x2)*(y - y3)) / denominator;
     float b = ((y3 - y1)*(x - x3) + (x1 - x3)*(y - y3)) / denominator;
     float c = 1 - a - b;
 
     return 0 <= a && a <= 1 && 0 <= b && b <= 1 && 0 <= c && c <= 1;
}
 
#endregion

以上就是判断一个点是否在三角形中的两种方式,大家可以选择自己喜欢的方式和特定的情况进行选择,希望能帮助到大家,大家有不懂得或者我错的,欢迎在下方评论区进行评论,大家一起学习,谢谢!!!!!

文章转自:https://www.cnblogs.com/baosong/p/9545040.html

点赞
收藏
评论区
推荐文章
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
3年前
Navicat for MySQL 查看BLOB字段内容
转:NavicatforMySQL查看BLOB字段内容版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/L905128009/article/details/75938472Navicatfor MySQL(https://www
Wesley13 Wesley13
3年前
JDK下载与安装教程
JDK下载与安装教程2017年06月18日22:53:16Danishlyy1995(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fme.csdn.net%2Fu012934325)阅读数:282054版权声明:本文为博主原创文章,未经博主允许不得转
Stella981 Stella981
3年前
Keras 时序模型
版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/Thinking\_boy1992/article/details/53207177本文翻译自(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fkeras.io%2Fgettingst
Stella981 Stella981
3年前
Docker之Mysql安装及配置
原文:Docker之Mysql安装及配置(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fblog.csdn.net%2Fzhaobw831%2Farticle%2Fdetails%2F80141633)版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog
Stella981 Stella981
3年前
IDEA 最新版永久破解最简单方法(版本 IntelliJ IDEA 2018.3.5)
版权声明:本文为博主原创文章,仅作为学习交流使用,请在阅读后自行删除,未经博主允许不得转载。https://www.cnblogs.com/linck/p/10522045.html1.官网下载专业版(UltimateEdition)功能更加齐全、强大,在此不赘述2.网上流行的破解方法有三种,本文采用最简单的第二种插件破解。打开网站:ht
Wesley13 Wesley13
3年前
Github项目解析(九)
版权声明:本文为博主原创文章,未经博主允许不得转载。转载请标明出处:一片枫叶的专栏(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fblog.csdn.net%2Fqq_23547831%2Farticle%2Fdetails%2F51821159)上一篇文章中我们讲解了在Ac
Stella981 Stella981
3年前
C# 用XiliumCefGlue做浏览器,JS和C#相互调用
原文:C用XiliumCefGlue做浏览器,JS和C相互调用(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fblog.csdn.net%2Fu013564470%2Farticle%2Fdetails%2F78395984)版权声明:本文为博主原创文章,未经博主允许不得转
Stella981 Stella981
3年前
GitHub版本控制使用(命令行实际操作图解Git使用方法)
版权声明:本文为博主原创文章,未经博主允许不得转载。Git(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Flib.csdn.net%2Fbase%2Fgit)是一款免费、开源的分布式版本控制(https://www.oschina.net/action/GoToLink?url
Stella981 Stella981
3年前
Docker容器应用日志查看
原文:Docker容器应用日志查看(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fblog.csdn.net%2Fbenben_2015%2Farticle%2Fdetails%2F80708723)版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.