我已经知道如何根据角度在圆的圆周上找到一个点。我正在使用的代码如下。

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)
                )
            )
        )
    )
);


这是上面使用的normalize方法。

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

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

    return angle;
}

最佳答案

你混合了罪恶和cos。

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/

10-09 03:09