首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >查询点是否在三角形内(二维)

查询点是否在三角形内(二维)
EN

Stack Overflow用户
提问于 2012-09-25 20:38:53
回答 2查看 2.4K关注 0票数 1

我正在编写Quick Hull算法,其中包括检查点是否位于三角形内。为此,我创建了以下两个函数,如果点在内部,则返回true,否则返回false。

然而,从某种意义上说,结果是完全出乎意料的,因为一些点被正确分类,而另一些点没有被分类,我无法解决这个问题。有没有人可以帮我验证一下我写的代码是否正确。方法是,我使用向量来找出一个点是否与三角形每条边的顶点位于同一条边上。代码是:

代码语言:javascript
复制
public boolean ptInside(Point first, Point last, Point mx, Point cur) {
        boolean b1 = pointInside(first, last, mx, cur);
        boolean b2 = pointInside(last, mx, first, cur);
        boolean b3 = pointInside(first, mx, last, cur);
        return b1 && b2 && b3;

    }

    public boolean pointInside(Point first, Point last, Point mx, Point cur) {
        int x1 = last.xCo - first.xCo;
        int y1 = last.yCo - first.yCo;
        int x2 = mx.xCo - first.xCo;
        int y2 = mx.yCo - first.yCo;
        int x3 = cur.xCo - first.xCo;
        int y3 = cur.yCo - first.yCo;
        int cross1 = x1 * y2 - x2 * y1;
        int cross2 = x1 * y3 - x3 * y1;
        if (cross1 * cross2 > 0)
            return true;
        else
            return false;

    }
EN

回答 2

Stack Overflow用户

发布于 2012-09-25 20:44:26

我将简单地创建一个多边形,并使用它的contains(Point)方法。为什么要重新发明轮子呢?

票数 6
EN

Stack Overflow用户

发布于 2012-09-26 00:26:48

您用于计算b3的点数排序不正确。你需要保持(first,last,mx)的循环顺序。否则,您就颠倒了计算的意义。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12583127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档