【问题标题】:Rotate 3D object around another point C#围绕另一个点旋转 3D 对象 C#
【发布时间】: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


【解决方案1】:

你弄错了方程式(之前也没有发现它:))它应该是:

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:

【讨论】:

    猜你喜欢
    • 2021-10-28
    • 1970-01-01
    • 2013-05-21
    • 2018-04-10
    • 2018-11-04
    • 1970-01-01
    • 1970-01-01
    • 2012-11-21
    相关资源
    最近更新 更多