判断两点是在线段同侧还是两侧 - 向量叉乘判断

ap1×ab与ap2×ab的结果异号,则表示两点在线段两侧;同号则表示在线段同侧

 

有一个点在线段上或两个点都在线段上,当做在线段同侧处理

 

复制代码
//两点是否在线段同侧
public static bool IsTwoPointSameSideOfSegment(Vector2 a, Vector2 b, Vector2 p1, Vector2 p2)
{
    var a_p1 = p1 - a;
    var ab = b - a;
    float cross1 = a_p1.x * ab.y - a_p1.y * ab.x;
    if (Mathf.Approximately(cross1, 0)) //p1与线段ab共线
        return true;

    var a_p2 = p2 - a;
    float cross2 = a_p2.x * ab.y - a_p2.y * ab.x;
    if (Mathf.Approximately(cross2, 0)) //p2与线段ab共线
        return true;

    var result = cross1 * cross2;
    return result > 0; //叉乘结果同符号, 则表示同侧
}
复制代码

 

参考

【Computer Graphics】点到三角形距离及内外判断_点到三角形的距离-CSDN博客

 

posted @   yanghui01  阅读(315)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示