计算通过点 P 的正交是否与由其端点定义的线段相交

Compute if orthogonal through Point P intersects a line segment defined by its endpoints

假设一条直线通过其端点 beginend 定义。 假设P是另一个点

我正在寻找一种方法,returns 正确,当且仅当。 Line(A,B) 通过目标切割 Line(A,B) 在 A 和 B 之间的正交。

此方法计算一行的长度:

  static double lengthOfLine(Offset a, Offset b ) {
    double length = math.sqrt( ( b.dx - a.dx )*( b.dx - a.dx ) + ( b.dy - a.dy ) * ( b.dy - a.dy ) );
    return length;
  }

而这个函数是target不定长线之间的距离,由beginend定义:

  static double shortestDistance(Offset begin, Offset end, Offset target) {

    double legnthOfLine = lengthOfLine( begin, end );

    double a = end.dy - begin.dy;
    double b = begin.dx - end.dx;
    double c = end.dx * begin.dy - begin.dx * end.dy;

    double q = a * target.dx + b * target.dy + c;
    if ( 0.0 > q ) {
      q = -1.0 * q;
    }

    return q / legnthOfLine;

  }

我只想知道,通过target相对于Line(begin, end)的正交是否在beginend内削减Line(begin, end)

这个有用吗?

static bool perp_intersects_segment(Offset start, Offset end,  Offset target ) {

    double start_end_x = end.dx - start.dx;
    double start_end_y = end.dy - start.dy;
    double dot_product = start_end_x * (target.dx - end.dx) 
                       + start_end_y * (target.dy - end.dy);

    dot_product = ( start_end_x * (target.dx - start.dx) 
                  + start_end_y * (target.dy - start.dy)
                  ) * dot_product;

    return ( dot_product <= 0.0 );

}