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

c#使用距离和角度从3D起点计算3D点,c#,slice,trigonometry,angle,radius,C#,Slice,Trigonometry,Angle,Radius,我有这个: 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;

我有这个:

    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;
    }
问题:如何将角度(可能是
垂直角
)转换为Z轴


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

您确定edge3D[0]和edge3D[1]的值正确吗?如果你只有两个维度,但是如果你有一个长度为“半径”的三维向量以一定角度向上伸出,那么它在曲面上的投影长度会更短

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

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

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

您确定edge3D[0]和edge3D[1]的值正确吗?如果你只有两个维度,但是如果你有一个长度为“半径”的三维向量以一定角度向上伸出,那么它在曲面上的投影长度会更短

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

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);
编辑:在上面的代码中,我假设水平角和垂直角以弧度为单位。如果它们以度为单位,那么您应该像在代码中那样进行弧度转换