计算笛卡尔或极坐标系中2个位置之间的角度

LsHallo

我正在尝试构建不带库的ISS跟踪器...到目前为止,一切都很好。但是我使用这个网站得到了iss的坐标:https : //api.wheretheiss.at/v1/satellites/25544

现在,需要根据纬度和经度来计算两个角度:角度一是伺服系统在地面上的海拔高度0-180°。角度2是步进电机相对于北极的旋转角度(0-360°)。

我已经有一些Java代码可以试用,但无法正常工作。我得到奇怪的结果。例如:国际空间站就在我的正上方(400公里;相同的经度和纬度),并且入射角分别为:141.68°和135.28°

附言:因此,这是一个使用图书馆的学校项目,是不可行的...

public class Main {
public static void main(String[] args) {
    //double issR = 6371 + 410.92521771305;
    double issR = 6741;
    double issLat = 58.190897;
    double issLong = -30.585309;

    //posR = height in km + earth radius
    //posLat = position latitude in °(deg)
    //posLong = position longitude in °(deg)
    double posR = 6365.092;
    double posLat = 58.190897;
    double posLong = -30.585309;

    //Convert to cartesian
    double issX = issR * Math.sin(issLat) * Math.cos(issLong);
    double issY = issR * Math.sin(issLat) * Math.sin(issLong);
    double issZ = issR * Math.cos(issLat);

    System.out.println("ISS\nx: " + issX);
    System.out.println("y: " + issY);
    System.out.println("z: " + issZ);

    //Convert to cartesian
    double posX = posR * Math.sin(posLat) * Math.cos(posLong);
    double posY = posR * Math.sin(posLat) * Math.sin(posLong);
    double posZ = posR * Math.cos(posLat);

    System.out.println("\nPOS\nx: " + posX);
    System.out.println("y: " + posY);
    System.out.println("z: " + posZ);

    //Calculate angle (I'm not sure which angle is which :D)
    double angleYZ = Math.atan2(issY - posY, issZ - posZ)*180/Math.PI;
    double angleYX = Math.atan2(issY - posY, issX - posX)*180/Math.PI;

    //Another try to calculate the angle...
    double angle = Math.toDegrees(Math.atan2(Math.sqrt(Math.pow(issX - posX, 2) + Math.pow(issY - posY, 2)), issZ - posZ))+90d;
    double angle2 = Math.toDegrees(Math.atan2(Math.sqrt(Math.pow(issX - posX, 2) + Math.pow(issY - posY, 2)), issX - posX))+90d;

    System.out.println();
    System.out.println("Angle X: " + angleYZ);
    System.out.println("Angle Z: " + angleYX);
    System.out.println(angle);
    System.out.println(angle2);
}
}

class Math {
final static double PI = java.lang.Math.PI;

public static double cos(double x) {
    return java.lang.Math.cos(x * Math.PI/180.0);
}

public static double sin(double x) {
    return java.lang.Math.sin(x * Math.PI/180.0);
}

public static double atan2(double x, double y) {
    return java.lang.Math.atan2(x, y);
}

public static double toDegrees(double angrad) {
    return java.lang.Math.toDegrees(angrad);
}

public static double pow(double a, double b) {
    return java.lang.Math.pow(a, b);
}

public static double sqrt(double a) {
    return java.lang.Math.sqrt(a);
}
}
LsHallo

正如伊恩·阿伯特(Ian Abbott)所建议的那样,这对我有用:

double tilt = Math.toDegrees(Math.atan2(issR * Math.cos(issLat - posLat) - posR, issR * Math.sin(issLat - posLat)));
double pan = Math.toDegrees(Math.atan2(issR * Math.sin(issLong - posLong), issR * Math.cos(issLong - posLong) - posR));

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

笛卡尔坐标系中的边缘检查

来自分类Dev

笛卡尔坐标系中的JavaScript / JSF2数据(矩形)可视化

来自分类Dev

笛卡尔(二维)坐标系的数字索引的计算

来自分类Dev

Chart.js的笛卡尔坐标系

来自分类Dev

笛卡尔坐标系中3d向量的方向是什么意思?

来自分类Dev

MATLAB:对二维笛卡尔坐标系中的每个 (x,y) 坐标点应用多个值

来自分类Dev

如何从极坐标中补偿笛卡尔坐标中的误差

来自分类Dev

是否可以用ggvis绘制笛卡尔坐标系?

来自分类Dev

如何在笛卡尔坐标系中使用RANSAC拟合线?

来自分类Dev

使用STDistance在2个位置之间的距离

来自分类Dev

将图像从笛卡尔坐标转换为极坐标

来自分类Dev

枫树,从极坐标转换为笛卡尔坐标?

来自分类Dev

将笛卡尔坐标转换为极坐标-Matlab

来自分类Dev

SpriteKit中的坐标系

来自分类Dev

matplotlib结合极坐标和笛卡尔网格数据

来自分类Dev

在2D坐标系中查找分开的线

来自分类Dev

简单的笛卡尔坐标计算器

来自分类Dev

查找大于10万个位置之间的距离

来自分类Dev

在ggplot2中的两个位置之间绘制曲线

来自分类Dev

opengl中的窗口坐标系

来自分类Dev

在Map Tiler中设置坐标系

来自分类Dev

从画布中仅删除坐标系

来自分类Dev

Swift iOS中的坐标系错误

来自分类Dev

笛卡尔坐标中的饼图

来自分类Dev

如何从一个向量计算坐标系?

来自分类Dev

在 x 轴变为 -x 的两个坐标系之间转换四元数

来自分类Dev

怪异的坐标系

来自分类Dev

对齐坐标系

来自分类Dev

霍夫变换:将极坐标转换回笛卡尔坐标,但仍无法绘制它们