2017-02-18 38 views
1

我想“飞行”(3D)弧添加到我的正投影,如图here,但剪报,而不是淡入淡出效果。这似乎很难,因为弧线是独立于投影创建的。开始,结束和大圆中点沿着从画布的中心的线延伸 - - (每个电弧通过从投影获得三个点定义但电弧本身是使用在对应的“2D”基数插值绘制)裁剪非突出元件(正投影)

我的第一个想法是,我可能需要做一些球形几何来获得剪切发生的坐标,但现在我想知道是否有一个更直接的方法来完成这个(我D3是新的)。

这是我的地图是什么样子没有削波:

enter image description here

回答

0

我也很绿色D3,幸好我也从我自己的搜索为裁剪飞行一个体面的解决方案新鲜在正字法线。您链接到该演示是在很多方面聪明不止一个:

  1. 弧从与在一个Catmull-Rom curve插值三点绘制投射二维坐标恰好在3D视觉近似正圆曲线很好地
  2. 线与任其点接近剪取平面变淡,因为你已经指出

在绘制投影,二维坐标花键消除了任何选择在投影之前分割线,让视觉平滑便宜,即使d3有t他本身就具有功能性(反正我一直无法找到)。这意味着插值必须更加手动。

我首先想到的是,我可能需要做一些球面几何来获得,其中剪裁发生的坐标,但现在我不知道是否有做到这一点

在一个更简单的方法

  1. 通过与正常当前全球中心的叉积获取削波点的坐标大圆:最后用什么,我认为最明显的选择,不幸的是你的目标正是为了避免结算计划弧的e。鉴于您的始发地和目的地PoPd分别和全球中心C,你正在寻找C x (Po x Pd)标准化
  2. 插值的始发地和目的地使用类似d3.geoInterpolate
  3. 项目插入点在正确的scale之间的坐标(读:仰角)地面为飞行线
  4. 从原点到沿之间内插点的削波点绘制一个[平滑]线的那部分,而另一个从削波点到目的地,相应地移动一个以上的背景。观察整条线位于裁剪平面前方或后方的情况。

要确定飞行路径中的哪个位置需要拼接您的剪切点,您可能需要将剪切点的较大角度与一端或端对端进行比较。另请注意,性能会受到影响,但您仍然可以对示例中绘制的航班线数量感到满意。