我试图绘制一条长度为50px的线,从固定点到基于鼠标位置的点,但我在三角测量中很糟糕。 我整天都被困在这里,仍然不知道该怎么做。 使用的四个变量是:
startX; //X position of fixed point
startY; //Y position of fixed point
mouseX; //X position of mouse
mouseY; //Y position of mouse
提前致谢。
答案 0 :(得分:4)
您需要在鼠标光标方向上创建一个Unit Vector(长度为1的向量)。然后你将单位向量乘以50,你就得到了一个长度为50的向量。
所以你首先得到从固定点到鼠标光标的矢量:
float dirX = mouseX - startX;
float dirY = mouseY - startY;
然后你规范化这个向量(使它的长度为1)
float dirLen = sqrt(dirX * dirX + dirY * dirY); // The length of dir
dirX = dirX / dirLen;
dirY = dirY / dirLen;
现在我们将标准化向量乘以50,我们在我们想要的方向上得到一个长度为50的向量。
float lineX = dirX_normalized * 50;
float lineY = dirY_normalized * 50;
现在我们可以画线
了g.drawLine(startX, startY, startX + lineX, startY + lineY);
答案 1 :(得分:1)
假设你正在使用AWT Graphics
class,你可以这样做:
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));