【问题标题】:How to find view point coordinates?如何找到视点坐标?
【发布时间】:2014-09-15 13:03:59
【问题描述】:

我有太阳的方位角、仰角和方向矢量.. 我想在太阳光线方向上放置一个有一定距离的视点。谁能描述或提供有助于我理解和实施所需步骤的资源的链接?

我使用笛卡尔坐标系从方位角和仰角查找方向向量。然后查找 这个question的视口origin.image

x = distance
y = distance* tan azimuth
z = distance * tan elevation.

我想找到那个距离值...如何?

【问题讨论】:

  • 要求我们推荐或查找书籍、工具、软件库、教程或其他场外资源的问题对于 Stack Overflow 来说是无关紧要的,因为它们往往会吸引固执己见的答案和垃圾邮件。相反,请描述问题以及迄今为止为解决该问题所做的工作。
  • 已编辑的答案在笛卡尔方程中添加了 [edit1] 方位角,因为您的答案是错误的

标签: math vector 3d coordinates coordinate-systems


【解决方案1】:
  1. 方位坐标系参考NEH(几何东北高(上))参考系!!!

    在您的图像链接中,它引用了-Y 轴,除非您不渲染世界而是进行一些非线性图形投影,否则它是不正确的,那么它是哪一个?

    顺便说一句,ECEF/WGS84 and NEH 您可以了解如何为 WGS84

    计算 NEH

    我可以看到你在坐标之间的计算很糟糕,所以为了清楚起见,这就是它的样子:

    左侧是全球地球视图,其中一个 NEH 计算其位置(其原点)。中间是表面对齐的侧视图,右侧是表面对齐的顶视图。蓝色洋红色绿色是输入方位角坐标,棕色是x,y,z 笛卡尔投影(坐标在其轴上)所以:

    Dist'= Dist *cos(Elev  );
    z    = Dist *sin(Elev  );
    x    = Dist'*cos(Azimut);
    y    =-Dist'*sin(Azimut);
    

    如果您使用不同的参考框架或轴方向,则相应地更改它...

  2. 我怀疑你使用 4x4 同质变换矩阵

    用于表示坐标系并保持您的视口,请看这里:

  3. 构建视口

    您需要X,Y,Z 轴向量和O 原点位置。 O 你已经有了(至少你认为)并且Z 轴是光线方向,所以你也应该拥有它。现在只需计算 X,Y 与某物对齐(否则视图将围绕射线旋转)我使用 NEH 来实现:

    view.Z=Ray.Dir // ray direction
    view.Y=NEH.Z // NEH up vector
    view.X=view.Y x view.Z // cross product make view.X axis perpendicular to Y ansd Z
    view.Y=view.Z x view.X // just to make all three axises perpendicular to each other
    view.O=ground position - (distance*Ray.Dir);
    

    要使其成为有效的 view_port,您必须:

    view = inverse(view)*projection_matrix;
    

    为此您需要inverse matrix computation

  4. 如果你想要整件事

    那么您还想在这种情况下添加太阳/地球位置计算:

  5. 距离

    现在很清楚背后是什么,如果您想将其设置为太阳,则只需设置距离,那么它将是 distance=1.0 AU;(天文单位),但这是一个巨大的距离,如果您有远见,您的地球将会是非常小,而是使用更近的距离来匹配您的视图大小看这里:

【讨论】:

  • @user2177232 这取决于坐标的用途。对于天文天体,您有方位角、仰角、距离(在这种情况下,它是与观察者的地理位置和月球体的距离)但您只想从方位角查看某些东西,因此距离只是观察者地理位置之间的距离(在地球上)或任何表面)和相机。所以你必须自己设置。使用透视相机,距离也是缩放因子,因此您可以设置它,以便视图覆盖您想要的(参见项目符号 5)
  • 第一个点的距离值(世界坐标系)是多少
  • @user2177232 这完全取决于方位坐标的用途!!!在你的情况下,你在看什么?例如,某个对象大小h1,您希望它在屏幕上被视为h0 大小,然后distance=z0*h1/h0 其中z0 是您的相机视锥体(焦点)的Z_near,请参阅第5 条中的链接以获取更多信息...如果没有您提供的更多信息,无法更具体
  • 距离是一天中所有时间的常数..?我可以将地球半径作为视点到地球原点的距离吗
  • @user2177232 如果您的世界包含地球椭球体/球体,那么是的,距离是您查看的地理位置的地球半径 + 一些高度以适合屏幕上的对象。如果您的世界是本地地理定位平面,则不需要地球距离。距离是可变的,以改变地理位置和椭圆体(赤道和极地半径不同),但我认为高度是相同的(除非你的观察没有改变)。开始编码,你会看到它的样子......然后你就会知道它是你想要的还是需要一些调整
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-07
  • 1970-01-01
  • 1970-01-01
  • 2014-01-16
  • 2022-01-27
  • 1970-01-01
相关资源
最近更新 更多