我正在用Java编写一个工具,它可以对Graphics对象进行一些绘制。
但是,我遇到了一个我不太清楚如何解决的问题。希望有人可以提供帮助。
如何确定Graphics对象上的点x,y是否接触从例如200,200到392,144的延伸线。
听起来很简单,但我很难过......帮忙!
答案 0 :(得分:7)
实际上,这与Graphics
对象几乎没有关系。这只是一些简单的数学。
您的示例行具有公式
http://hypftier.de/dump/SO-6276361-1.png
在[0,1]中使用 t 。因此,要找出该点是否在线,只需求解线性方程组
http://hypftier.de/dump/SO-6276361-2.png
如果 t 对于系统和中的两个等式在0和1之间相同,则可以得到解决方案。所以你需要计算:
http://hypftier.de/dump/SO-6276361-3.png
除非我的数学失败了;已经有一段时间了。
答案 1 :(得分:2)
你可以算出连接两点的直线方程。
行方程:y = mx+c
m是渐变:m = (y2-y1)/(x2-x1);
c是y轴截距:c = y1 - m * x1;
一旦得到了等式,就可以通过插入x坐标并检查方程中出现的y坐标是否匹配来测试线上是否有任何点。
答案 2 :(得分:2)
已经有正确的答案,但我认为有一个公式给出指定线的任何点的距离可能更有用。然后你可以检查它是否为零,或者你选择的公差范围内。无论垂直线(无限渐变)等特殊情况如下,以下情况都应有效。
X 点与 AB 行之间的距离为
http://hypftier.de/dump/SO-6276361-Ben-1.png
其中 A , B 和 X 是三个点的3D位置矢量(只需设置 z 如果您只在2D工作,则= 0,而 x 是矢量积。那来了
http://hypftier.de/dump/SO-6276361-Ben-2.png
其中 A =(a,b), B =(c,d)和 X =(x,y)。然后要检查该点是否实际位于线段内而不是无限线上的其他位置,您可以使用标量积: X 与 A 之间的距离到 B 是
http://hypftier.de/dump/SO-6276361-Ben-3.png
即
之间答案 3 :(得分:1)
答案 4 :(得分:0)
听起来你需要找到两点之间的直线方程。从那里你可以使用那个等式证明,如果你的点触及线。 线的方程通常写为y = mx + b,其中m是斜率,b是y轴截距。
答案 5 :(得分:0)
Line2D API会对您有所帮助。请参阅ptLineDist(双PX,双PY)方法。如果点在线上,则返回0.0。
答案 6 :(得分:-1)
在数学上,您可以找到两个点的斜率,并与每个旧点的新点的斜率进行比较。
在Java中,您可以使用Line2D.contains(double x,double y);
编辑:stackoverflow上的人员非常快。 : - )