沿着已知角度绘制已知距离的线

use*_*765 1 java trigonometry javafx-2

我知道这不是一个很难的问题,但遗憾的是我是数学迟钝的.

我需要从已知起始点沿着已知角度绘制一条50像素的线到未知的终点.角度来自起点(400,400)和鼠标点击; 需要朝着鼠标单击绘制线条,但是朝向点击仅需50个像素.

我已经广泛地进行了谷歌搜索,并找到了许多解决方案,但它并不是为了我而聚集在一起.

这是我如何获得角度:

float angle = (float) Math.toDegrees(Math.atan2(400 - event.getY(), 400 - event.getX()));
float angleInDegrees = (angle + 270) % 360;
Run Code Online (Sandbox Code Playgroud)

"事件"是鼠标单击.

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);
Run Code Online (Sandbox Code Playgroud)

我发现的一切都围绕着Math.cos和Math.sin,但我仍然没有得到它.我认为这个问题与将弧度映射到场景坐标有关,但我不确定.所以人们,我以什么方式愚蠢?我很感激任何帮助.

Ted*_*opp 5

我不会打扰角度.您只需使用比率即可:

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);
Run Code Online (Sandbox Code Playgroud)

然后从(startX,startY)绘制到(endX,endY).

这是发生了什么:

  1. 计算从(400,400)到鼠标单击的向量(这是(dx,dy))
  2. 缩放矢量,使其长度为50像素
  3. 舍入缩放的向量,使其在x和y中具有整数长度
  4. 将缩放的圆形矢量添加到(400,400)以计算终点