2
繼續執行項目I previously described我目前正在構建一個顯示城市列表之間移動的動畫。我現在的代碼呈現了一個城市列表,並且形成了一系列連接城市的大圓弧。城市列表是時間線的一部分,所以在訪問一個城市之後,動畫將轉變爲以下一個城市爲中心。ViewVector在地球上兩個球面座標之間的轉換
在我看來,這意味着ViewVector應該調整以顯示起始城市和結束城市之間的點。由此產生的結果可能會看起來像一個長途航班的飛行地圖大幅加快。單個幀可能看上去像下面手工製作還是:
我現在明白瞭如何將ViewVector位置最近的城市上空,但我很確定如何平穩地移動相機之間的兩個球座標點。我目前的代碼如下:
SC[{lat_, lon_}] := {Cos[lon \[Degree]] Cos[lat \[Degree]],
Sin[lon \[Degree]] Cos[lat \[Degree]], Sin[lat \[Degree]]};
GreatCircleArc[{lat1_, lon1_}, {lat2_, lon2_}] :=
Module[{u = SC[{lat1, lon1}], v = SC[{lat2, lon2}], a},
a = VectorAngle[u, v];
Table[Evaluate[RotationTransform[\[Theta], {u, v}][u]], {\[Theta],
0, a, a/Ceiling[10 a]}]]
CityGraphic[name_] := {Opacity[0.85], Black, PointSize[Medium], White,
PointSize[0.045], Point[1.01 SC[CityData[name, "Coordinates"]]]}
CityGraph[places_, age_] :=
Graphics3D[{
Opacity[0.75],
Sphere[{0, 0, 0}, 0.99 ],
Map[Line[
Map[SC,
CountryData[#, "SchematicCoordinates"], {-2}]] &,
CountryData["Countries"]],
Map[CityGraphic, places],
Text[Style[age, FontFamily -> "Helvetica"],
1.02 SC[CityData[First[places], "Coordinates"]]],
White, Line
[Apply[GreatCircleArc,
Partition[Map[CityData[#, "Coordinates"] &, places], 2, 1], {1}]]
},
ViewVector -> {
4 SC[CityData[First[places], "Coordinates"]], {0, 0, 0}},
Boxed -> False,
SphericalRegion -> True,
ImageSize -> {640, 480}
];
CityGraph[{"Tokyo", "Dublin", "Cape Town", "Seattle", "Denver"}, "04"]
+1。有趣的是,從來沒有想到這一點。對於一個球體上的一個點,這必須與從SU(2)到SO(3)的同態相關。 –