Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从固定点50px向鼠标位置绘制线_Java_Graphics_Trigonometry - Fatal编程技术网

Java 从固定点50px向鼠标位置绘制线

Java 从固定点50px向鼠标位置绘制线,java,graphics,trigonometry,Java,Graphics,Trigonometry,我试图画一条50像素长的线,从一个固定点到一个基于鼠标位置的点,但我在三角方面很糟糕。 我一整天都在做这件事,仍然不知道怎么做。 使用的四个变量是: startX; //X position of fixed point startY; //Y position of fixed point mouseX; //X position of mouse mouseY; //Y position of mouse 提前感谢。假设您正在使用,您可以执行以下操作: double angle=Math.

我试图画一条50像素长的线,从一个固定点到一个基于鼠标位置的点,但我在三角方面很糟糕。 我一整天都在做这件事,仍然不知道怎么做。 使用的四个变量是:

startX; //X position of fixed point
startY; //Y position of fixed point
mouseX; //X position of mouse
mouseY; //Y position of mouse
提前感谢。

假设您正在使用,您可以执行以下操作:

double angle=Math.atan2(mouseY-startY, mouseX-startX);
g.setColor(Color.BLACK);
g.drawLine(startX, startY,
    Math.floor(startX+Math.cos(angle)*50),
    Math.floor(startY+Math.sin(angle)*50));
假设您正在使用,您可以这样做:

double angle=Math.atan2(mouseY-startY, mouseX-startX);
g.setColor(Color.BLACK);
g.drawLine(startX, startY,
    Math.floor(startX+Math.cos(angle)*50),
    Math.floor(startY+Math.sin(angle)*50));
您需要在鼠标光标指向该点的方向上创建一个(长度为1的向量)。然后你把单位向量乘以50,就得到了这个方向上长度为50的向量

因此,首先获取从固定点到鼠标光标的向量:

float dirX = mouseX - startX;
float dirY = mouseY - startY;
然后,对该向量进行规格化(使其长度为1)

现在我们将归一化向量乘以50,得到了一个在我们想要的方向上长度为50的向量

float lineX = dirX_normalized * 50;
float lineY = dirY_normalized * 50;
现在我们可以划清界限了

g.drawLine(startX, startY, startX + lineX, startY + lineY);
您需要在鼠标光标指向该点的方向上创建一个(长度为1的向量)。然后你把单位向量乘以50,就得到了这个方向上长度为50的向量

因此,首先获取从固定点到鼠标光标的向量:

float dirX = mouseX - startX;
float dirY = mouseY - startY;
然后,对该向量进行规格化(使其长度为1)

现在我们将归一化向量乘以50,得到了一个在我们想要的方向上长度为50的向量

float lineX = dirX_normalized * 50;
float lineY = dirY_normalized * 50;
现在我们可以划清界限了

g.drawLine(startX, startY, startX + lineX, startY + lineY);

很好,也不需要三角。只是一个刻度。:-)很高兴你这么做。。。我正要用sin&cosNice输入答案,也不需要三角。只是一个刻度。:-)很高兴你这么做。。。我正要用sin&cost输入答案。这可能比大卫的答案慢。这可能比大卫的答案慢。