经过谷歌搜索并长时间在Stack上查看,我只能找到确定一个点是否落在连接两个点的线上的方法。不幸的是,这不是我所需要的。
请参阅此问题末尾的图片。我提前为可怕的图片道歉,但它得到了点(得到它?)。
我需要创建两条垂直线来连接点x和y。它们需要在点x和y处与垂直线相交。然后我需要判断点z是否出现在这两行之间。
感谢任何帮助。谢谢你的时间!
答案 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 )
答案 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
,则您的观点高于该线。否则,你的观点就在线下。
通过使用两条平行线进行此操作,您最终将从图片中看出三个案例:
编辑:
阅读你帖子中的一些评论,听起来可能有比这更好的方法:)
答案 5 :(得分:0)
基本上,这是一个数学问题而不是编程问题。 (换句话说,一旦你理解了数学,编程就变得微不足道了。)
我可以想到两种方法:
计算出穿过x和y的2条垂直线。如果z高于x垂直线并低于y垂直线。
计算出y-x-z与x-y-z之间的角度之间的角度。如果两个角度都小于90度,那么z就在这些线之间。