一个点是否在两个点之间?

3
经过长时间的谷歌搜索和查找Stack,我只找到了确定一个点是否在连接两个点的直线上的方法。不幸的是,这不是我需要的。
请参见问题结尾的图像。我很抱歉图片质量很差,但它可以传达我的意思。
我需要创建与连接x和y点的垂线相交的两条垂线。它们需要与垂线在x和y处相交。然后,我需要判断z点是否在这两条线之间。
非常感谢您的帮助。谢谢!

2
这不是点在多边形问题吗?这是一个更适合http://math.stackexchange.com/的数学问题。 - nicholaswmin
事实上,我并没有使用一种通用语言。但是我使用的语言最像Java。不过我认为我已经找到了自己问题的答案。获取从x到y的角度。现在获取从x到z的角度。如果绝对差小于90,那么它不就在这两个点之间吗? - Stev
1
是的,但这不是一个编程问题。 - nicholaswmin
6
为什么要打上Java和JavaScript的标签?这两种语言完全没有关联。 - Patrick Roberts
我会计算旋转所需的角度,使xy线与x轴平行,将其应用于z点,并检查变换后的z点的x值是否在x和y的变换后x值定义的范围内。一些简单的三角学应该可以处理它。 - user1864610
显示剩余2条评论
6个回答

3

计算角度xyz和yxz。如果任何一个角度大于90度,则它在外面。


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;
}

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??的名称不准确,实际上它们是每个距离的平方。

记录一下,当问题还被标记为JavaScript时,我正在撰写这个答案。 - Patrick Roberts

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

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

enter image description here


0

因此,一条线可以用y = mx + b来描述。假设您的第一条线由y = 2x-1表示。那么对于任何点(u,v),您可以插入x = u,以便y = 2u-1。这允许您确定您的线上x位置的y。因此,如果v>y,则您的点在线上方。否则,您的点在线下方。

通过使用两条平行线进行此操作,您将得到从您的图片中明显的三种情况:

  1. y大于两条线上相应的点
  2. y大于其中一条线上相应的点
  3. y小于两条线上相应的点

编辑:

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


0

基本上,这是一个数学问题而不是编程问题。 (或者换句话说,一旦你理解了数学,编程就很简单。)

我可以想到两种方法来做到这一点:

  1. 计算通过x和y的2条垂直线。如果z在x垂直线之上且在y垂直线之下,则符合条件。

  2. 计算y-x-z和x-y-z之间的角度。如果两个角度都小于90度,则z在两条线之间。


  1. 确定每两个点之间的平方距离。如果X和Y之间的平方距离加上X和Z之间的平方距离小于Y和Z之间的距离平方,且X和Y之间的距离平方以及Y和Z之间的距离平方小于X和Z之间的距离平方。(这比计算角度要少得多的计算量)
- Patrick Roberts

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接