Find if point lays on line segment

前端 未结 12 1306
抹茶落季
抹茶落季 2020-11-30 04:01

I have line segment defined by two points A(x1,y1,z1) and B(x2,y2,z2) and point p(x,y,z). How can I check if the point lays on the line segment?

12条回答
  •  爱一瞬间的悲伤
    2020-11-30 04:39

    Here's some C# code for the 2D case:

    public static bool PointOnLineSegment(PointD pt1, PointD pt2, PointD pt, double epsilon = 0.001)
    {
      if (pt.X - Math.Max(pt1.X, pt2.X) > epsilon || 
          Math.Min(pt1.X, pt2.X) - pt.X > epsilon || 
          pt.Y - Math.Max(pt1.Y, pt2.Y) > epsilon || 
          Math.Min(pt1.Y, pt2.Y) - pt.Y > epsilon)
        return false;
    
      if (Math.Abs(pt2.X - pt1.X) < epsilon)
        return Math.Abs(pt1.X - pt.X) < epsilon || Math.Abs(pt2.X - pt.X) < epsilon;
      if (Math.Abs(pt2.Y - pt1.Y) < epsilon)
        return Math.Abs(pt1.Y - pt.Y) < epsilon || Math.Abs(pt2.Y - pt.Y) < epsilon;
    
      double x = pt1.X + (pt.Y - pt1.Y) * (pt2.X - pt1.X) / (pt2.Y - pt1.Y);
      double y = pt1.Y + (pt.X - pt1.X) * (pt2.Y - pt1.Y) / (pt2.X - pt1.X);
    
      return Math.Abs(pt.X - x) < epsilon || Math.Abs(pt.Y - y) < epsilon;
    }
    

提交回复
热议问题