在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的帮助!opposite
x
y
int 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;
}