围绕另一个点C#旋转3D对象

时间:2017-09-08 14:28:31

标签: c# math matrix 3d augmented-reality

首先为粗略绘图道歉,我对3D操作并不精通并且对矩阵只有非常基本的理解,所以请尽可能清楚地解释所有内容并且不要对我的水平做出任何假设知识。

我目前正在收集经度和纬度数据,并使用以下函数将其转换为笛卡尔X,Y和Z:

public CartesianXYZ LonLat2Cartesian(double lon, double lat)
{
    CartesianXYZ XYZ = new CartesianXYZ();
    var R = 6371000;
    XYZ.X = Convert.ToInt32(R * Math.Cos(lat) * Math.Cos(lon));
    XYZ.Y = Convert.ToInt32(R * Math.Sin(lat) * Math.Cos(lon));
    XYZ.Z = Convert.ToInt32(R * Math.Sin(lat));
    return XYZ;
}

当在图表上绘制这些时,我发现Y轴变化非常显着,即使这些点彼此非常接近,我认为这是因为我们坐在球体上,除非我是在北极,它会被认为是倾斜的,因此越接近赤道我就越。 (如果不是这样,请告诉我)

请参阅3D散点图中绘制的以下三点

enter image description here

A点将被视为"中心"用户

的点

B点是一个直接指向用户南方的点

C点是一个直接指向用户北方的点

我希望实现的是在点A周围旋转点B和C,使得它们的Y值相同,我可以将图形视为点的2D表示,我通过将Y更改为相同来找到我最终得到了一个相当偏斜的点。

最终目标是使用用户的标题并查明是否有任何点在他们的视野范围内(对于增强现实)

非常感谢任何帮助,有用的批评或有用文章的链接。

1 个答案:

答案 0 :(得分:0)

方程式有误(也没有在之前发现它):

public CartesianXYZ LonLat2Cartesian(double lon, double lat)
    {
    CartesianXYZ XYZ = new CartesianXYZ();
    var R = 6371000;
    XYZ.X = Convert.ToInt32(R * Math.Cos(lat) * Math.Cos(lon));
    XYZ.Y = Convert.ToInt32(R * Math.Cos(lat) * Math.Sin(lon));
    XYZ.Z = Convert.ToInt32(R * Math.Sin(lat));
    return XYZ;
    }

这只是我们的星球所不知道的球体,因此如果您需要更精确的结果,请使用WGS84:

  • enter image description here