在Java中以特定角度绘制一条线

时间:2010-08-21 05:16:09

标签: java trigonometry

假设我有一个(x,y)对于一个行的起点始终是相同的,而(x,y)对于同一行的终点是变化的。该线也总是40px长。在程序开始时,线条以垂直方向发起(让我们称之为0度)。基于用户输入,我需要通过仅更改结束(x,y)来重新绘制从其原点开始的特定度数的行。

如果您需要,可以考虑更多的食物:

我正试图计算这一点并使其在Java中运行。我可以根据圆弧段的弧长来计算点数,但我不知道如何让Java做到这一点。

我认为基于三角形角度可以更容易地工作,因为我总是知道三角形两边的长度(一边由40px长线形成,另一边由该线的起点和JPanel的边界)和这两条线形成的角度。尽管如此,我的大脑还是试图弄明白。任何帮助将不胜感激。

更新

@casablanca让我走上正轨。我刷新了我的触发功能,这就是我的工作方式。

首先,我没有意识到90度直线上升,但一旦我意识到我的解决方案反映了这个事实。我正在从框架的底部中心开始绘制我的线条。由于我的用户给出的角度小于90度时,三角形的opposite侧位于屏幕的右侧,当我的用户给出的角度大于屏幕的左侧时,它位于屏幕的左侧90度我必须调整公式来解释这个事实,因此我有四种方法,一种用于屏幕左侧的x坐标(当用户给定角度大于90度时),一种对于屏幕左侧的y坐标(当用户给定角度大于90度时),当用户给定角度小于90度时,屏幕右侧的坐标相同。所有方法中的int length都是斜边的长度。 再次感谢您的帮助@casablanca!

public double leftSideX(double angle, int length){
    double x = frameWidth/2 - (length * Math.cos(Math.toRadians(90-(Math.toDegrees(angle)-90))));
    return x;
}

public double leftSideY(double angle, int length){
    double y = frameHeight - (length * Math.sin(Math.toRadians(90-(Math.toDegrees(angle)-90))));
    return y;
}

public double rightSideX(double angle, int length){
    double x = frameWidth/2 + (length * Math.cos(angle));
    return x;
}

public double rightSideY(double angle, int length){
    double y = frameHeight - (length * Math.sin(angle));
    return y;
}

1 个答案:

答案 0 :(得分:68)

这是你要找的吗?

startX = x;
startY = y;
endX   = x + 40 * Math.sin(angle);
endY   = y + 40 * Math.cos(angle);

在你正在使用的任何API中从(startX,startY)到(endX,endY)画一条线。

另请注意,angle为弧度。如果你有度数,你需要先转换它:

angle = angle * Math.PI / 180;