Dart 计算通过点P的正交方向是否与由其端点定义的线段相交
假设一条线是通过其端点Dart 计算通过点P的正交方向是否与由其端点定义的线段相交,dart,geometry,Dart,Geometry,假设一条线是通过其端点begin和end定义的。 假设P是另一个点 我正在搜索一个方法,该方法返回true iff。线(A,B)通过目标的正交切割线(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 )
begin
和end
定义的。
假设P是另一个点
我正在搜索一个方法,该方法返回true iff。线(A,B)通过目标的正交切割线(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;
}
此函数用于计算目标
与开始
和结束
定义的无限长行之间的距离:
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;
}
我只是想知道,相对于行(开始,结束)
到目标
的正交函数是否在开始
和结束中剪切行(开始,结束)
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 );
}
静态布尔perp_与_段相交(偏移起点、偏移终点、偏移目标){
双起点\终点\终点=终点.dx-起点.dx;
双开始\结束\ y=end.dy-start.dy;
双点积=start\u end\u x*(target.dx-end.dx)
+start\u end\u y*(target.dy-end.dy);
dot_product=(start_end_x*(target.dx-start.dx)
+start\u end\u y*(target.dy-start.dy)
)*dot_产品;
return(dot_乘积您可以计算两条线之间的交点,然后检查交点的x坐标是否在开始
和结束
的x坐标之间(或者y坐标;这无关紧要)(记住,正交线之间的斜率互为负倒数。)@jamesdlin很好的ide。不幸的是,今天对我来说有点晚了。我会抓起我的旧数学书。从概念上来说,可以这样:在经过目标的端部周围画一个圆,在经过目标的端部周围画一个圆。使用这两个圆的直径,你可以在线的顺序一侧(开始,结束)构建目标的阴影。然后计算直线(起点、终点)和直线(目标、目标阴影)的切点。太好了!谢谢你,未来学家!一个非母语人士提出的问题:为什么命名为perp?@SteAp Vertical intersects segment…我只写了我想写的东西…哦,是的…bool:)…谢谢你纠正它