C# 围绕另一个点C旋转三维对象#

C# 围绕另一个点C旋转三维对象#,c#,math,matrix,3d,augmented-reality,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.

首先,我为这张粗糙的画道歉,我对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轴变化很大,即使这些点彼此非常接近,我假设这是因为我们坐在一个球体上,除非我在北极,否则它会被认为是倾斜的,越靠近赤道。(如果情况并非如此,请务必让我知道)

请参见三维散点图中绘制的以下三个点

点A将被视为用户所在的“中心”点

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

点C是直接指向用户北部的点

我希望实现的是在A点上旋转点B和C,这样它们的Y值是相同的,并且我可以把图看成是点的2D表示,我只是通过改变y来找到的,最后用一个相当歪斜的点来表示。 最终目标是使用用户的标题,并找出是否有任何点在其视野内(用于增强现实)

任何帮助、有用的评论或到有用文章的链接都将不胜感激。

您得到了错误的等式(以前也没有发现:),它应该是:

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:


您能否澄清最后一句话,说明您在寻求什么帮助?最好是一个使用矩阵乘法的注释C#实现,解释在何处以及为什么添加了什么信息。据我所知,这不是一个“基本”旋转,因为它不是直接围绕一个轴旋转,而是围绕一个任意点旋转,我很可能是错的,但我知道这有很多问题要问,所以即使只是一个链接到一个非常“我的第一个矩阵”的教程,也会让我走上正确的道路。甚至告诉我我是否采取了错误的方法来获得结果。见第2条。只有在您是WGS84的情况下,您的转换才是球形的。这是错误的,不会与GPS地理坐标相对应。要修复此问题,请参阅中的最后一次编辑。3.若要旋转,只需创建变换矩阵,将旋转中心转换为
(0,0,0)
,然后旋转,最后转换回。。。。要获得角度,请使用atan2。。。