我在每个屏幕边缘都有一些固定的位置图像,我想找到一种能够正确指向它们的方法,我从MouseMoved获得了我的新旧鼠标点以及那些2点和角度我可以绘制一条到达屏幕末端的线但不幸的是我无法在图像上正确地指出该线点
答案 0 :(得分:1)
您的计划正在尝试做的是:
例如,假设矩形是180乘120,那么你的角度是45º。尺寸越大,为180,因此您在该角度绘制一条长度为180的线:
所以你想要切割箭头所在的线。您的newX
和newY
都在框架之外。根据程序的逻辑,您会看到newX
大于1750,因此您将其剪切为180(在我的示例中为最大帧)。并且newY
的值大于850,因此您将其剪切为120(在我的示例中矩形的最大Y)。
这意味着几乎总是这样,你最终会得到线端为(180,120)而不是箭头所在的位置。这是因为您刚刚调整了一个坐标,但在继续之前未能在该行上找到相应的Y.
基本上,当你将newX
缩减为getWidth() - 100
时,你还需要找到与之相关的Y并且在同一条线上。所以你需要再次计算Y.而不是:
if (newX > 1720)
{
newX = getWidth() - 100;
}
你需要
if (newX > 1720)
{
newX = getWidth() - 100;
newY = Math.round(oldY + (newX - oldX)*Math.tan(angle));
}
newY
的新值可能仍在矩形之外。事实上,新观点是:
所以现在你要调整Y的值 - 但是你必须要小心,并根据相同的角度将X的值与Y匹配。
但要注意:这个方法开始时并不是很好。将Math.max(getWidth(), getHeight())
作为线的初始长度仅适用于某些点。但是,如果你的观点靠近一个角落而另一个点靠近对角线怎么办?矩形的对角线比其宽度和高度都长。所以你会得到一条太短而且无法到达边缘的线。
你可以计算对角线而不是max
,但也许你应该采用不同的方法: