Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 计算通过点P的正交方向是否与由其端点定义的线段相交_Dart_Geometry - Fatal编程技术网

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:)…谢谢你纠正它