我正在用Java编写一个工具,它在Graphics对象上做了一点点绘图.
但是,我遇到了一个我不太清楚如何解决的问题.希望有人可以提供帮助.
如何确定Graphics对象上的点x,y是否接触从例如200,200到392,144的行.
听起来很简单,但我很难过......帮忙!
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
除非我的数学失败了; 有一阵子了.
已经有了正确的答案,但我认为有一个给出任意点与指定线的距离的公式可能更普遍有用。然后您可以检查该值是否为零,或者是否在您选择的容差范围内。无论垂直线(无限渐变)等特殊情况如何,以下操作都应该有效。
\n\nX点距AB线的距离为
\n\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0
\n
其中A、B和X是三个点的 3D 位置向量(如果仅在 2D 中工作,则只需设置z \xc2\xa0=\xc2\xa00 ), x是向量积。这就是
\n\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0
\n
其中A = (a,b)、B = (c,d) 且X = (x,y)。然后,要检查该点是否确实在线段内而不是无限直线上的其他位置,可以使用标量积:X沿从A到B的线的距离为
\n\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0
\n
IE
\n\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0