java - 沿已知角度画一条已知距离的线

标签 java trigonometry javafx-2

我知道这不是一个很难解决的问题,但遗憾的是我是数学弱智。

我需要从已知起点沿已知角度绘制一条 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)。

这是发生了什么:

  1. 计算从 (400, 400) 到鼠标点击的 vector (这是 (dx, dy))
  2. 缩放 vector 使其成为 50 像素长
  3. 对缩放 vector 进行舍入,使其在 x 和 y 方向上具有整数长度
  4. 将缩放后的舍入 vector 添加到 (400, 400) 以计算终点

关于java - 沿已知角度画一条已知距离的线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9205482/

相关文章:

gcc 和 math.h 的 C 链接器错误

treeview - JDK 8 TreeView 披露三角形垂直对齐不正确

java - Java生成指定位数的随机整数

java - 如何在 onNavigationItemSelected 中退出 Google+

python - 如何使用 matplotlib 在轴上绘制带有参数的函数

java - 自定义数学函数与提供的数学函数?

从 jar 运行时无法加载 javafx 资源

java - 除了javafx中的小动画时间线,还有什么解决办法吗?

java - 在java中检测windows系统区域设置

java - 错误: Could not find or load main class Java,因为类文件名和类名不同?