【发布时间】:2018-02-17 12:24:12
【问题描述】:
首先为粗略的绘图道歉,我对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 值相同,我可以将图形视为点的 2D 表示,我发现只需将 Y 更改为相同我最终得到了一个相当扭曲的版本。
最终目标是使用用户的航向并确定是否有任何点在他们的视野内(用于增强现实)
任何帮助、有用的评论或有用文章的链接将不胜感激。
【问题讨论】:
-
你能澄清最后一句话,你正在寻找什么帮助吗?
-
最好是使用矩阵乘法的注释 C# 实现,解释在何处以及为什么添加哪些信息。据我了解,这不被视为“基本”旋转,因为它不是直接围绕轴,而是围绕任意点,但是我很可能是错误的
-
我知道有很多问题要问,所以即使只是一个非常“我的第一个矩阵”教程的链接,它也会让我走上正确的道路。甚至告诉我我是否采取了错误的方法来获得结果
-
1.请参阅Understanding 4x4 homogenous transform matrices 2. 如果您是 WGS84,则您的转换只是球面的,它是错误的并且与 GPS 地理坐标不对应。要对其进行补救,请参阅How to convert a spherical velocity coordinates into cartesian 中的最后编辑。 3. 要旋转,您只需创建将旋转中心转换为
(0,0,0)的变换矩阵,然后旋转并最后平移回来 .... 使用atan2获得角度 ...
标签: c# math matrix 3d augmented-reality