有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (1) 个答案

  1. # 1 楼答案

    线性引用是您正在寻找的。从你的评论来看,这听起来确实很复杂,但当你把它分解,然后添加一个循环来遍历你的点,计算出最近的线段时,这仍然是一个非常简单的数学/代码

    下面是从谷歌搜索中提取的一段不错的代码。。。。 可以使用它来查找线段上最近的点:Util.getClosestPointOnSegment(Point ss, Point se, Point p)

    代码:

    import java.awt.Point;
    
    public class Util{
    
      /**
       * Returns closest point on segment to point
       * @param ss - segment start point
       * @param se - segment end point
       * @param p - point to found closest point on segment
       * @return closest point on segment to p
       */
      public static Point getClosestPointOnSegment(Point ss, Point se, Point p)
      {
        return getClosestPointOnSegment(ss.x, ss.y, se.x, se.y, p.x, p.y);
      }
    
      /**
       * Returns closest point on segment to point
       * @param sx1 - segment x coord 1
       * @param sy1 - segment y coord 1
       * @param sx2 - segment x coord 2
       * @param sy2 - segment y coord 2
       * @param px - point x coord
       * @param py - point y coord
       * @return closets point on segment to point
       */
      public static Point getClosestPointOnSegment(int sx1, int sy1, int sx2, int sy2, int px, int py)
      {
        double xDelta = sx2 - sx1;
        double yDelta = sy2 - sy1;
    
        if ((xDelta == 0) && (yDelta == 0))
        {
          throw new IllegalArgumentException("Segment start equals segment end");
        }
    
        double u = ((px - sx1) * xDelta + (py - sy1) * yDelta) / (xDelta * xDelta + yDelta * yDelta);
    
        final Point closestPoint;
        if (u < 0)
        {
          closestPoint = new Point(sx1, sy1);
        }
        else if (u > 1)
        {
          closestPoint = new Point(sx2, sy2);
        }
        else
        {
          closestPoint = new Point((int) Math.round(sx1 + u * xDelta), (int) Math.round(sy1 + u * yDelta));
        }
        return closestPoint;
      }
    }
    

    显然,您仍然需要编写一些代码来计算出最接近的要检查的段,并且仍然需要添加长度,但这将帮助您开始

    示例取自:

    http://www.java2s.com/Code/Java/2D-Graphics-GUI/Returnsclosestpointonsegmenttopoint.htm