Javascript 如何防止功能区/路径出现“错误”;跨越;在d3中?

Javascript 如何防止功能区/路径出现“错误”;跨越;在d3中?,javascript,math,d3.js,svg,intersection,Javascript,Math,D3.js,Svg,Intersection,我正在使用以下逻辑将功能区从外部饼图创建为内部饼图: 从外部饼图开始。开始角度并绘制一条圆弧到外部饼图。结束角度(跟踪外部饼图的内部圆弧) 在内部饼图上绘制一条贝塞尔曲线。使用2个控制点结束角度 第一个控制点与起点相同(即“无弯曲”) 第二个控制点是一个比内部饼图半径长的恒定半径(我们称之为cp_2) 在内部饼图上画一条圆弧。开始角度(跟踪内部饼图的外部圆弧) 最后,将最终的贝塞尔曲线绘制到外部饼图。开始角度(步骤1中的起点)有2个控制点 第一个控制点与步骤4相同(我们称之为cp\u 1) 第二

我正在使用以下逻辑将功能区从外部饼图创建为内部饼图:

  • 从外部饼图开始。开始角度并绘制一条圆弧到外部饼图。结束角度(跟踪外部饼图的内部圆弧)
  • 内部饼图上绘制一条贝塞尔曲线。使用2个控制点结束角度
  • 第一个控制点与起点相同(即“无弯曲”)
  • 第二个控制点是一个比内部饼图半径长的恒定半径(我们称之为
    cp_2
  • 内部饼图上画一条圆弧。开始角度
    (跟踪内部饼图的外部圆弧)
  • 最后,将最终的贝塞尔曲线绘制到
    外部饼图。开始角度
    (步骤1中的起点)有2个控制点
  • 第一个控制点与步骤4相同(我们称之为
    cp\u 1
  • 第二个控制点与步骤3相同
  • 现在的问题是
    cp_1
    cp_2
    都是常量,功能区“交叉”取决于以下值:

    • pie\u外部。开始角度
    • pie_-outer.end_-angle
    • pie_outer.r
    • pie\u内部。开始角度
    • pie_内部。end_角度
    • pie_inner.r
    • pie_inner.cx
    • pie_inner.cy
    因此,我需要一些疯狂的数学公式(或一些递归函数)来调整
    cp_1
    cp_2
    ,直到色带不交叉,看起来“漂亮”

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

    问题是:

    没问题: