2D:瞄准鼠标/三角形比例

时间:2015-11-19 01:51:49

标签: java geometry

假设我有xMouse,yMouse,xPlayer,yPlayer和length作为整数。鼠标光标位于鼠标光标处,鼠标光标位于播放器的位置。我想让玩家瞄准目标,但我不想使用Graphics2D。我想用t1=linspace(0,86400,length(x1)); t2=linspace(0,86400,length(x2)); newy1 = spline(x1,y1,t1); newy2 = spline(x2,y2,t2); plot(t1,newy1,'r-',t2,newy2,'b-'); 从玩家那里画一条线,向前约20个单位,瞄准目标。使用三角比例定理,我应该能够使用以下比例瞄准玩家:

g.drawLine

可以写成:

(20 / dist) = (xCoord / xMouse - xPlayer)
//Where xCoord is the x pixels. The above would be the similar for the y axis.

但就我而言,它有点有效。当我为y轴做这个并用fillOval绘制这个点(xCoord,yCoord)时,我得到一个“调试”圆圈(0,0),当鼠标移动时它会四处移动。由于我使用xCoord = ((xCoord - xPlayer) * 20) / dist(xMouse, xPlayer); ,它应该起作用(在我看来)。此外,这不仅是奇怪的,而且距离鼠标和玩家的距离也决定了该圆与(0,0)的距离。它应该是不变的。

如果你能帮助我弄清楚我做错了什么,那就太好了。谢谢。下面的图片中的简单几何图形应该很简单,但对于我的生活,我无法理解它!

Example in a picture form.

2 个答案:

答案 0 :(得分:0)

我将这个代码用于一个小游戏但是如果你将速度改为你的距离那么它就会工作

   int angle = Math.toDegrees(Math.atan2(target.x - x, target.y - y));
   this.position.x += speed * Math.sin(angle);
   this.position.z += speed * Math.cos(angle);

答案 1 :(得分:0)

让我们一步一步地计算 从玩家到鼠标的矢量是:
V = (Vx, Vy) = (xMouse-xPlayer, yMouse-yPlayer)
它的长度:
VLen = Sqrt((xMouse-xPlayer)^2 + (yMouse-yPlayer)^2) //use Math.Hypot if available
单位(标准化)向量:
uV = (uVx, uVy) = (Vx/Vlen, Vy/Vlen)
矢量从播放器到鼠标长度为20:
V20 = 20 * uV = (20 * Vx/Vlen, 20 * Vy/Vlen)

所以最终坐标是:

xCoord = xPlayer + 20 * Vx/Vlen
yCoord = yPlayer + 20 * Vy/Vlen