从上方查看城市的坐标

时间:2011-10-04 09:41:30

标签: wolfram-mathematica

作为一个小项目,我一直在考虑创建一个类似Google Earth的动画。我希望在将地球旋转到各个城市的中心时播放时间轴。目前,我可以使用默认视图设置来渲染带有点所指示城市的地球。

enter image description here

当我尝试使用俯视城市的视图向量(例如丹佛)来定位相机时,我最终会得到以下信息:

enter image description here

需要针对地球上空的某些点计算ViewVector。然而,我的反复试验并没有达到任何形式的连贯观点,大多数人看起来都像是在“全球范围内”。

我需要帮助的是一个功能,它给定城市的纬度和经度选择ViewVector将城市放置在摄像机视图的“中心”。产生“全球内部”视图的代码如下:

SC[{lat_, lon_}] := {Cos[lon \[Degree]] Cos[lat \[Degree]], 
   Sin[lon  \[Degree]] Cos[lat  \[Degree]], Sin[lat \[Degree]]};

Graphics3D[{
  Opacity[0.75],
  Sphere[{0, 0, 0}, 0.99 ],
  Map[Line[
 Map[SC,
  CountryData[#, "SchematicCoordinates"], {-2}]] &,
   CountryData["Countries"]], {Yellow, PointSize[Medium],
   Point[SC[CityData["Denver", "Coordinates"]]]
   }
  },
 Boxed -> False,
 SphericalRegion -> True,
 ViewVector -> {{0, 0, 0}, SC[CityData["Denver", "Coordinates"]]}
 ]

1 个答案:

答案 0 :(得分:10)

ViewVector格式中使用ViewVector->{v1, v2}时,相机位于v1点,并指向v2方向。因此,在您的示例中,相机将位于原点并指向丹佛的方向,从而产生“内部地球”视图。要让相机俯视丹佛,相机应该坐在城市正上方的一个位置,例如在2 SC[CityData["Denver", "Coordinates"]中,并指向原点,因此ViewVector将类似于

ViewVector -> {2 SC[CityData["Denver", "Coordinates"]], {0, 0, 0}}

使用ViewVector的此设置,视图将变为类似

enter image description here