私はRailsアプリケーションでSVG piechartを作成しようとしています。私はほとんどの時間で動作するメソッドを書いたことがありますが、時には奇妙な結果を生じることがあります。このパイチャートでSVGパスが間違って描画されるのはなぜですか?
このチャートは、1つのセグメントを除き、正しく構築されています!
セグメントは
<path d='M0,0 L99.99949084376563,0.3191096796332688 A100,100 0 **0,0** 99.99893303088741,0.46194445996738664 Z' fill='#136F7F' />
であると私は問題の原因は、私は**
に包まれてきた値であってもよいと思うことを作成するSVGコード(星は実際のコードには存在しません!)。
次の方法でチャートを作成しています。ここでは、キー値ペアのハッシュとしてdata
を指定しています。
svg = "<svg viewBox='-100 -100 200 200'>"
data.each do |d|
svg += "<path d='M0,0 L#{previous_x},#{previous_y} A100,100 0 #{x <= 0 ? 1 : 0},#{y <= 0 ? 1 : 0} #{x},#{y} Z' fill='#{col[i]}' fill-opacity='1' />"
end
svg += "</svg>"
x
とy
は100
乗じ、ラジアンセグメントの角度の余弦および正弦いる私は正しいlarge-arc-flag
とsweep-flag
値を設定し、これらはに時々セグメントを引き起こしているものであるアム失敗します?
を決定しますsreeenshot ...開始点はエンドポイントとほぼ同じです... –
ありがとう@Holger私はハッキングしているので、これをチェックするコードを再生成する必要があります。私は質問を編集します。その間、私の理解が正しいことを確認することができます。パイのセグメントが> 50%の場合、large-arc-flagは1になります。それ以外の場合は0になります。しかし、私は自分の問題がスイープフラッグにあると思う。どのような条件で旗の変化を掃除する必要がありますか?私は仕様を完全に理解していません!私が見ることのできるところから見ると、パイは4つの組み合わせのうちの2つ、つまり> 50%の円弧に応じて1,0または0,1のうちの2つしか必要としません。しかし、これは事実ではないようですか? –
心配しないで!私はセグメント%を計算していたやり方で愚かな間違いを犯しました。すべて今働いている! –