是两点之间的一点?

时间:2015-04-25 02:55:57

标签: java math

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

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

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

感谢任何帮助。谢谢你的时间!

Point graph.

6 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

由于您使用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;
}

答案 2 :(得分:1)

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

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

enter image description here

答案 3 :(得分:1)

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??是用词不当,因为它们实际上是每个变量的平方。

答案 4 :(得分:0)

因此y = mx + b可以描述一条线。假设您的第一行由y = 2x-1表示。然后,对于任何点(u,v),您可以x=u插入y = 2u-1。这样您就可以确定线路上x位置的y。因此,如果v>y,则您的观点高于该线。否则,你的观点就在线下。

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

  1. y大于两行上的对应点
  2. y大于您其中一行的对应点
  3. y小于两行中的对应点
  4. 编辑:

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

答案 5 :(得分:0)

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

我可以想到两种方法:

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

  2. 计算出y-x-z与x-y-z之间的角度之间的角度。如果两个角度都小于90度,那么z就在这些线之间。