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

2022-09-01 10:22:51

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

如果你需要它,还有一些值得思考的食物:

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

我认为基于三角形角度会更容易工作,因为我将始终知道三角形的两条边的长度(一条边由40px长线形成,另一条边由该线的起点和JPanel的边界形成)以及这两条线形成的角度。尽管如此,我的大脑仍然无法弄清楚它。任何帮助将不胜感激。

更新:

@casablanca让我走上了正确的轨道。我复习了我的trig函数,这就是我如何使它工作。

首先,我没有意识到90度是直立的,但是一旦我意识到我让我的解决方案反映了这一事实。我从框架的底部中心开始画我的线。由于当用户给出的角度小于90度时,三角形的一侧位于屏幕的右侧,并且当我的用户给出的角度大于90度时,它位于屏幕的左侧,因此我不得不调整公式以解释这一事实, 因此我有四种方法,一种用于屏幕左侧的坐标(当用户给定的角度大于90度时),一种用于屏幕左侧的坐标(当用户给定的角度大于90度时),当用户给定的角度小于90度时,屏幕右侧也是如此。在所有方法中都是斜边的长度。再次感谢您@casablanca的帮助!oppositexyint length

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

这是你要找的吗?

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;

答案 2

推荐