java - 计算圆周上一点的角度

标签 java geometry trigonometry cartesian-coordinates

我已经知道如何根据角度找到圆圆周上的点。我用来执行此操作的代码如下。

x = Math.sin(Math.toRadians(angle)) * radius;
y = Math.cos(Math.toRadians(angle)) * radius;

我正在尝试撤消此过程。

到目前为止,我有这段代码,它仅适用于小于或等于 90 度的角度。

DecimalFormat df = new DecimalFormat("###.####");

angleFromX = normalize(
    Double.parseDouble(
        df.format(
            Math.toDegrees(
                Math.asin(
                    (x / radius)
                )
            )
        )
    )
);
angleFromY = normalize(
    Double.parseDouble(
        df.format(
            Math.toDegrees(
                Math.acos(
                    (y / radius)
                )
            )
        )
    )
);

这是上面使用的标准化方法。

public static double normalize(double angle) {
    angle %= 360;

    if (angle < 0) {
        angle = angle + 360;
    }

    return angle;
}

最佳答案

你混淆了正弦和余弦。

double x = Math.cos(Math.toRadians(angle)) * radius;
double y = Math.sin(Math.toRadians(angle)) * radius;

要转换回来,请使用以下公式:

double newRadius = Math.hypot(x, y);
double theta = Math.atan2(y,x);
double newAngle = Math.toDegrees(theta);

根据实现情况,您可能需要调整 theta(角度)值。

  • 如果位于象限 2 或 3,请添加 180 度。
  • 如果位于象限 4,请添加 360 度。

您可能还需要添加:

newAngle = (newAngle+360)%360

保持角度为正且介于 0 到 360 之间。

关于java - 计算圆周上一点的角度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23924105/

相关文章:

javascript - 分析项目 SVG 路径

javascript - 为什么这些省略号没有正确放置?

math - 从正弦/余弦转换中恢复角度

java - 服务器如何知道哪个框架正在运行

java - 如何在HTTP get请求头中设置X-Api-Key

mysql - lat long 范围内的 SQL lat longs

java - 将时间戳从数据库转换为 java.sql.Timestamp

java - 如何在运行时使用 Webdriver 中的 java (jxl) 在现有 excel 文件中添加新的 excel 工作表

python - 如何找到两个凸包的交集?