我知道这不是一个很难解决的问题,但遗憾的是我是数学弱智。
我需要从已知起点沿已知角度绘制一条 50 像素长的直线到未知终点。该角度源自起点 (400,400) 和鼠标单击;该线需要向鼠标点击方向绘制,但只需向点击方向绘制 50 像素。
我在 google 上进行了大量搜索,找到了很多解决方案,但对我来说就是没有找到。
这是我如何获得角度的:
float angle = (float) Math.toDegrees(Math.atan2(400 - event.getY(), 400 - event.getX()));
float angleInDegrees = (angle + 270) % 360;
“事件”是鼠标点击。
float endX = 250 + 50 * (float)Math.cos(angleInDegrees);
float endY 250 + 50 * (float)Math.sin(angleInDegrees);
line.setStartX(400);
line.setStartY(400);
line.setEndX(endX);
line.setEndY(endY);
我发现的所有内容都围绕着 Math.cos 和 Math.sin,但我仍然不明白。我认为这个问题与将弧度映射到场景坐标有关,但我不确定。那么人们,我在哪些方面是愚蠢的?如果有任何帮助,我将不胜感激。
最佳答案
我不会为角度而烦恼。您可以仅使用比率来做到这一点:
int startX = 400;
int startY = 400;
int dx = event.getX() - startX;
int dy = event.getY() - startY;
float distToTarget = Math.sqrt(dx * dx + dy * dy);
float ratio = 50 / distToTarget;
int endX = startX + Math.round(ratio * dx);
int endY = startY + Math.round(ratio * dy);
然后从 (startX, startY) 绘制到 (endX, endY)。
这是发生了什么:
- 计算从 (400, 400) 到鼠标点击的 vector (这是 (dx, dy))
- 缩放 vector 使其成为 50 像素长
- 对缩放 vector 进行舍入,使其在 x 和 y 方向上具有整数长度
- 将缩放后的舍入 vector 添加到 (400, 400) 以计算终点
关于java - 沿已知角度画一条已知距离的线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9205482/