微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# 使用距离和角度从起始 3D 点计算 3D 点

如何解决c# 使用距离和角度从起始 3D 点计算 3D 点

我有这个:

    float[] angleto3Dpoint(double radius,double horizonalAngle,double verticalAngle,float[] center3D)
    {
        float[] edge3D = new float[3];
        double slice = 2 * Math.PI / 360;
        double angle = slice * horizonalAngle;
        edge3D[0] = center3D[0] + radius * Math.Cos(angle);
        edge3D[1] = center3D[1] + radius * Math.Sin(angle);
        edge3D[2] = //some conversion here
        return edge3D;
    }

问题:如何将角度(可能是 verticalAngle)转换为 Z 轴?

edge3D[0] & edge3D[1]输出工作正常,但我不知道如何转换 Z 轴(edge3D[2])。

解决方法

您确定 edge3D[0] 和 edge3D[1] 的值正确吗?如果您只有 2 维,它们会是这样,但如果您有一个长度为“半径”的 3 维向量以某个角度向上和向侧面倾斜,则其投影到表面上的长度会更短。

首先你应该计算向量在平面上的投影长度:

double radius2D = radius * Math.Cos(verticalAngle);

然后您可以按照与您的代码类似的方式计算水平坐标:

edge3D[0] = center3D[0] + radius2D * Math.Cos(horizontalAngle);
edge3D[1] = center3D[1] + radius2D * Math.Sin(horizontalAngle);

最后计算向量的“高度”:

edge3D[2] = center3D[2] + radius * Math.Sin(verticalAngle);

编辑:在上面的代码中,我假设水平角度和垂直角度是弧度。如果它们以度为单位,那么您应该像在代码中那样转换为弧度。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。