Java - 是否从(a,b)延伸到(c,d)触及Point(x,y)的线?

rog*_*8gm 5 java graphics

我正在用Java编写一个工具,它在Graphics对象上做了一点点绘图.

但是,我遇到了一个我不太清楚如何解决的问题.希望有人可以提供帮助.

如何确定Graphics对象上的点x,y是否接触从例如200,200到392,144的行.

听起来很简单,但我很难过......帮忙!

Joe*_*oey 7

Graphics实际上,这与物体没什么关系.这只是一些简单的数学.

您的示例行具有公式

        http://hypftier.de/dump/SO-6276361-1.png

在[0,1].因此,要找出点是否在线,只需求解线性方程组

        http://hypftier.de/dump/SO-6276361-2.png

如果系统中的两个方程 0和1之间的t相同,则可以得到解决方案.所以你需要计算:

        http://hypftier.de/dump/SO-6276361-3.png

除非我的数学失败了; 有一阵子了.


Ben*_*Ben 2

已经有了正确的答案,但我认为有一个给出任意点与指定线的距离的公式可能更普遍有用。然后您可以检查该值是否为零,或者是否在您选择的容差范围内。无论垂直线(无限渐变)等特殊情况如何,以下操作都应该有效。

\n\n

X点距AB线的距离为

\n\n

\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\n

\n\n

其中ABX是三个点的 3D 位置向量(如果仅在 2D 中工作,则只需设置z \xc2\xa0=\xc2\xa00 ), x是向量积。这就是

\n\n

\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\n

\n\n

其中A = (a,b)、B = (c,d) 且X = (x,y)。然后,要检查该点是否确实在线段内而不是无限直线上的其他位置,可以使用标量积:X沿从AB的线的距离为

\n\n

\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\n

\n\n

IE

\n\n

\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0

\n\n

这应该介于 0 和

\n