Wolfram mathematica 球体上两个球坐标之间的ViewVector变换
继续这个项目,我目前正在制作一个动画,展示一系列城市之间的运动。我当前的代码呈现一个城市列表,并创建一组连接城市的大圆弧。城市列表是时间线的一部分,因此在访问一个城市后,动画将过渡到以下一个城市为中心 在我看来,这意味着应该调整起点城市和终点城市之间的点。由此产生的结果可能看起来像一张长途飞行的飞行地图,大大加快了飞行速度。单个帧可能看起来像以下手动生成的帧: 我现在了解了如何在最近的城市上方定位ViewVector,但我不确定如何在两个球坐标点之间平滑移动摄影机。我目前的代码如下:Wolfram mathematica 球体上两个球坐标之间的ViewVector变换,wolfram-mathematica,Wolfram Mathematica,继续这个项目,我目前正在制作一个动画,展示一系列城市之间的运动。我当前的代码呈现一个城市列表,并创建一组连接城市的大圆弧。城市列表是时间线的一部分,因此在访问一个城市后,动画将过渡到以下一个城市为中心 在我看来,这意味着应该调整起点城市和终点城市之间的点。由此产生的结果可能看起来像一张长途飞行的飞行地图,大大加快了飞行速度。单个帧可能看起来像以下手动生成的帧: 我现在了解了如何在最近的城市上方定位ViewVector,但我不确定如何在两个球坐标点之间平滑移动摄影机。我目前的代码如下: SC[{
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"]
在计算机图形学中,人们经常使用四元数在不同的摄像机观察方向之间平滑插值。Mathematica有一个可用于基本四元数算术的函数。描述了四元数和欧拉角之间的转换
描述了插值过程。+1。有意思,我从没想过。对于球体上的点,这必须与从
SU(2)
到SO(3)
的同态有关。