C# 围绕另一个点C旋转三维对象#
首先,我为这张粗糙的画道歉,我对3D操作一点也不精通,对矩阵也只有非常基本的了解,所以请尽可能清楚地解释一切,不要假设我的知识水平 我目前正在收集经度和纬度数据,并使用以下功能将其转换为笛卡尔X、Y和Z: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.
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:
(0,0,0)
,然后旋转,最后转换回。。。。要获得角度,请使用atan2。。。