见上图;基本上,我想要一个简单的测试来检查一个点是否在线段的范围内。我拥有的信息(或输入,如果您愿意)是点的坐标和线段终点的坐标。我想要的输出是一个简单的 boolean 值。我怎样才能以简单的方式检查它?
最佳答案
使用内积可以简单统一的检查。两个 vector 之间的内积可以在几何上可视化为两个 vector 的长度乘以两者夹角的余弦的乘积,或者是其中一个 vector 的长度与(正交)投影长度的乘积另一个到由该 vector 确定的线上。
在您的情况下,如果您将 vector v
从线段的一个端点投影到所考虑的点,则该点位于允许区域内当且仅当投影落在段 s
连接两个端点。这相当于
0 <= v·s <= s·s
(如果要排除垂直于通过端点的线段的线,则为严格不等式)
public static boolean inRange(double start_x, double start_y, double end_x, double end_y,
double point_x, double point_y) {
double dx = end_x - start_x;
double dy = end_y - start_y;
double innerProduct = (point_x - start_x)*dx + (point_y - start_y)*dy;
return 0 <= innerProduct && innerProduct <= dx*dx + dy*dy;
}
关于java - 检查投影到线段上的点是否不在线段之外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17581738/