为了在通过点p并朝向v的直线上取得另一个点r,我们可以使用以下公式,并为a替换任何值:
r = p + a*v
为了测试r是否在该直线上,我们只需要找到一个满足条件的a值。在我的当前实现中,我通过重新组织r的方程来检查每个向量分量的a值是否相同:
a = (px - rx) / vx = (py - ry) / vy
在代码方面,这看起来像下面这样:
然而,这种方法行不通:如果
我如何正确检查
r = p + a*v
为了测试r是否在该直线上,我们只需要找到一个满足条件的a值。在我的当前实现中,我通过重新组织r的方程来检查每个向量分量的a值是否相同:
a = (px - rx) / vx = (py - ry) / vy
在代码方面,这看起来像下面这样:
boolean isPointOnLine(Vector2f r, Vector2f p, Vector2f v) {
return (p.x - r.x) / v.x == (p.y - r.y) / v.y;
}
然而,这种方法行不通:如果
v
的任何一个分量为0
,那么这个分数将被计算为无穷大。因此我们得到了一个不正确的结果。我如何正确检查
r
是否在直线上?