美文网首页
点到图形每条边的距离并取距离最短的边

点到图形每条边的距离并取距离最短的边

作者: 墨色尘埃 | 来源:发表于2017-07-28 11:13 被阅读0次

先求出触摸点E到起点A和倒数第二个点D的那条线(最后画的那条直线)的距离,然后依次求出E点到AB、BC、CD边的距离,并依次进行比较


EM截图_2017728111336.png
private int ensurePoint(float startX, float startY) {
        //形成的多边形要首尾相接
        int position = -1;
        double minL = DrawUtils.pointToLine(startX, startY, list.get(list.size() - 1), list.get(0));
        for (int i = 0; i < list.size() - 1; i++) {
            double l1 = DrawUtils.pointToLine(startX, startY, list.get(i), list.get(i + 1));
            if (minL < l1) {
            } else if (minL > l1) {
                position = i;
                minL = l1;
            }
        }
        if (minL <= 40) {
            return position;//根据position获取要移动线的 端点
        } else if (DrawUtils.PtInRegion(new Point(startX, startY), list) == 1 && minL > 40) {
            return -2;//表示点击点在多边形内,执行移动view
        } else {
            return -3;//表示点击点在多边形外,不执行任何操作
        }
    }

点到直线的距离

// 点到直线的距离 : 点(x0,y0) 到由两点组成的线段(x1,y1) ,( x2,y2 )
    public static double pointToLine(float x0, float y0, Point point1, Point point2) {
        float x1 = point1.getX();
        float y1 = point1.getY();
        float x2 = point2.getX();
        float y2 = point2.getY();
        double space = 0;
        double a, b, c;
        a = lineSpace(x1, y1, x2, y2);// 线段的长度
        b = lineSpace(x1, y1, x0, y0);// (x1,y1)到点的距离
        c = lineSpace(x2, y2, x0, y0);// (x2,y2)到点的距离
        if (c <= 0.000001 || b <= 0.000001) {
            space = 0;
            return space;
        }
        if (a <= 0.000001) {
            space = b;
            return space;
        }
        if (c * c >= a * a + b * b) {
            space = b;
            return space;
        }
        if (b * b >= a * a + c * c) {
            space = c;
            return space;
        }
        double p = (a + b + c) / 2;// 半周长
        double s = Math.sqrt(p * (p - a) * (p - b) * (p - c));// 海伦公式求面积
        space = 2 * s / a;// 返回点到线的距离(利用三角形面积公式求高)
        return space;
    }

相关文章

  • 点到图形每条边的距离并取距离最短的边

    先求出触摸点E到起点A和倒数第二个点D的那条线(最后画的那条直线)的距离,然后依次求出E点到AB、BC、CD边的距...

  • HDU 3790. 最短路径问题

    问题描述:给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费...

  • java对象比较排序

    问题:点击某个闭合多边形内部,比较点击点距离各条边的距离,取出距离最短的那条线的两个坐标点?思路:根据方法得到点到...

  • 点到线段的最短距离

    点到线段最短距离的运算与点到直线的最短距离的运算二者之间存在一定的差别,即求点到线段最短距离时需要考虑参考点在沿线...

  • 图文解析 | Dijkstra单源最短路径算法

    单源最短路径问题 给定加权有向图G=(V,E,W),每条边的权值w为非负数,表示两个顶点间的距离。 源点s∈V。 ...

  • Dijkstra(HDU 2544)

    适合不含负权边的单源最短路 S:已找到的到源点的集合 dis[i]:顶点i到源点的最短路径距离 每次取不在S中di...

  • 到各种边的距离

  • 广度优先搜索

    一种用来解决最短路径的算法。这个最短不是时间或者距离的最短而是边最少。欢聚话说就是做地铁的时候换乘最少。 图简介 ...

  • 最短的距离

    火车站左转到汽车站然后又回到火车站出站口,全程0.5公里。有点意思,哎,我排队大约1小时多。不过还好,又轮一站...

  • Dijkstra

    1.问题 单源最短路径 2 最短路径数组就是当前各个节点到A的距离前驱数组就是相应距离的前一个节点 此时在V-S中...

网友评论

      本文标题:点到图形每条边的距离并取距离最短的边

      本文链接:https://www.haomeiwen.com/subject/gtyxlxtx.html