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

c# Calculate a 3D point from starting 3D point using distance and angles

我有这个:

    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 个维度,它们就会是这样,但是如果你有一个长度为 'radius' 的 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);

编辑:在上面的代码中,我假设 horizo​​ntalAngle 和 verticalAngle 以弧度为单位。如果它们是度数,那么您应该像在代码中那样转换为弧度。