如何防止色带/路径越过"越过"在d3?

时间:2016-08-14 21:54:46

标签: javascript math d3.js svg intersection

我使用以下逻辑从外部饼图创建一个功能区到内部饼图:

  1. outer_pie.start_angle开始并绘制圆弧到outer_pie.end_angle(跟踪外部饼图的内弧)
  2. 使用2个控制点将{Bezier曲线绘制到inner_pie.end_angle
  3. 第一个控制点与起点相同(即"没有弯曲")
  4. 第二个控制点的半径比内部饼的半径长(我们称之为cp_2
  5. 绘制圆弧到inner_pie.start_angle(跟踪内部饼图的外弧)
  6. 最后使用2个控制点将最终的贝塞尔曲线绘制到outer_pie.start_angle(步骤1中的起点)
  7. 第一个控制点与步骤4相同(让我们称之为cp_1
  8. 第二个控制点与步骤3相同
  9. 现在的问题是cp_1cp_2都是不变的,而且"交叉"取决于以下值:

    • pie_outer.start_angle
    • pie_outer.end_angle
    • pie_outer.r
    • pie_inner.start_angle
    • pie_inner.end_angle
    • pie_inner.r
    • pie_inner.cx
    • pie_inner.cy

    所以我需要一些疯狂的数学公式(或一些递归函数)来调整cp_1cp_2,直到丝带不穿过并且看起来很漂亮&#34;。< / p>

    请注意,内部饼图将始终位于外部饼图内。

    问题:

    enter image description here enter image description here

    不是问题:

    enter image description here

0 个答案:

没有答案