首先为粗略的绘图表示歉意,我绝不精通 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 散点图
A 点将被视为用户所在的“中心”点
B 点是用户正南的一个点
C 点是用户正北的一个点
我希望实现的是围绕点 A 旋转点 B 和 C,以便它们的 Y 值相同,我可以将图形视为点的二维表示,我发现只需将 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# - 围绕另一个点旋转 3D 对象 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46118793/