java - 在Java中以特定角度画一条线

标签 java trigonometry

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

如果您需要,可以提供更多的思考:

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

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

更新:

@casablanca 让我走上了正轨。我复习了我的三角函数,下面是我如何使它工作的。

首先,我没有意识到 90 度是直线向上的,但是一旦我意识到我的解决方案反射(reflect)了这一事实。我从框架的底部中心开始画线。因为当我的用户给出的角度小于 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;
}

最佳答案

这就是你要找的吗?

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;

关于java - 在Java中以特定角度画一条线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3536428/

相关文章:

java - 是什么导致了这个 "No Persistence provider for EntityManager named ___"异常?

java - java中的空白窗口

c - 如何将asin结果保存在短变量中?

Java 以编程方式设置断点

java - 简单循环时间复杂度内的递归函数

java - 视频检索技术

Java - 最适合查找最频繁元素的数据结构

javascript - 计算从一点到另一点的 Angular

javascript - 使用 JavaScript 在三 Angular 形中查找第三个点

java - 是转换整个表达式更好,还是只转换不同类型的变量更好