作为一个小项目,我一直在考虑创建一个类似Google Earth的动画。我希望在将地球旋转到各个城市的中心时播放时间轴。目前,我可以使用默认视图设置来渲染带有点所指示城市的地球。
当我尝试使用俯视城市的视图向量(例如丹佛)来定位相机时,我最终会得到以下信息:
需要针对地球上空的某些点计算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"]]}
]
答案 0 :(得分:10)
在ViewVector
格式中使用ViewVector->{v1, v2}
时,相机位于v1
点,并指向v2
方向。因此,在您的示例中,相机将位于原点并指向丹佛的方向,从而产生“内部地球”视图。要让相机俯视丹佛,相机应该坐在城市正上方的一个位置,例如在2 SC[CityData["Denver", "Coordinates"]
中,并指向原点,因此ViewVector
将类似于
ViewVector -> {2 SC[CityData["Denver", "Coordinates"]], {0, 0, 0}}
使用ViewVector
的此设置,视图将变为类似