繁体   English   中英

是两点之间的一点?

[英]Is a point between two points?

经过谷歌搜索并在Stack上查看了很长时间后,我只是设法找到一个方法来确定一个点是否落在连接两个点的线上。 不幸的是,这不是我需要的。

请参阅此问题末尾的图像。 我提前为这张可怕的照片道歉,但它得到了重点(得到它?)。

我需要创建两条垂直线,连接点x和y。 它们需要在点x和y处与垂直线相交。 然后,我需要判断点z是否出现在这两行之间。

任何帮助表示赞赏。 谢谢你的时间!

点图。

计算角度xyz和yxz。 如果其中一个> 90,则它在外面。

既然你用java标记了你的问题,那你就去:

import javafx.geometry.Point2D;
....
// is z between parallel lines 
boolean betweenLines(Point2D x, Point2D y, Point2D z) { 
    return  x.angle(y,z) < 90 && y.angle(x,z) < 90;
}

要查找Z点是否落在所需条带中,您可以确定Z到XY线的投影是否落在这些点之间。 定义向量v = Y - Xw = Z - X. 如果参数b落在0..1范围内,则投影位于XY段中。 非常简单的公式:

b = DotProduct( w,v )/ DotProduct( v,v

在此输入图像描述

JavaScript中的示例代码:

// JavaScript function to determine if infinite strip generated
// by x and y contains the point z
// point structure is:
//  {
//      double x;
//      double y;
//  }
// returns true or false
function stripContainsPoint(x, y, z) {
    var distXZ = (x.x - z.x) * (x.x - z.x) + (x.y - z.y) * (x.y - z.y),
        distXY = (x.x - y.x) * (x.x - y.x) + (x.y - y.y) * (x.y - y.y),
        distYZ = (y.x - z.x) * (y.x - z.x) + (y.y - z.y) * (y.y - z.y);

    // if triangle is right or acute, or obtuse with hypotenuse XY, returns true
    return (distXZ + distXY >= distYZ) && (distYZ + distXY >= distXZ);
}

变量dist?? 是误称,因为它们实际上是每个的距离平方。

因此,可以通过y = mx + b来描述线。 让我们说你的第一行用y = 2x-1 然后对于任何点(u,v),你可以插入x=u ,使得y = 2u-1 这允许您确定线上x位置的y 因此,如果v>y ,那么你的点就在线之上。 否则,你的观点就在线下。

通过使用两条平行线进行此操作,您最终将从图片中看出三个案例:

  1. y大于两条线上的对应点
  2. y大于您的一条线上的对应点
  3. y小于两条线上的对应点

编辑:

阅读你的帖子上的一些评论,听起来可能有比这更好的方法:)

基本上,这是一个数学问题而不是编程问题。 (换句话说,一旦你理解了数学,编程就变得微不足道了。)

我可以想到两种方法:

  1. 计算出穿过x和y的2条垂直线。 如果z高于x垂直线并低于y垂直线。

  2. 计算出yxz与xyz之间的角度之间的角度。 如果两个角度都小于90度,则z在线之间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM