计算通过点 P 的正交是否与由其端点定义的线段相交
Compute if orthogonal through Point P intersects a line segment defined by its endpoints
假设一条直线通过其端点 begin
和 end
定义。
假设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
和不定长线之间的距离,由begin
和end
定义:
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)
的正交是否在begin
和end
内削减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 );
}
假设一条直线通过其端点 begin
和 end
定义。
假设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
和不定长线之间的距离,由begin
和end
定义:
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)
的正交是否在begin
和end
内削减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 );
}