私はSVG の経験がほとんどなく、初めてRaphaëlを使用しています。この 2 つに詳しい人が助けてくれる必要があります。
動的セクターを含む円グラフを作成しました。丸いボタンをドラッグすると、セクターのサイズを変更できます。このフィドルを参照してください。必要なブラウザーである Chrome と Safari でのみテストしました。
円グラフはまだ完成していません。セクターはオーバーラップできます。今は無視してください。
セクターの開始角度が終了角度よりも大きい場合、問題に直面しました。これは、終了角度が 0/360° マークを超える場合です。これを解決するために、path- rotation -parameter を使用しました。終了角度が 360 になるまで、角度を戻しながらセクターを前方に移動しました。これは、この関数のフィドルで確認できます。
function sector_update(cx, cy, r, startAngle, endAngle, sec) {
var x1 = cx + r * Math.cos(-startAngle * rad),
x2 = cx + r * Math.cos(-endAngle * rad),
y1 = cy + r * Math.sin(-startAngle * rad),
y2 = cy + r * Math.sin(-endAngle * rad);
var rotation = 0;
// This is the part that I have the feeling could be improved.
// Remove the entire if-clause and let "rotation" equal 0 to see what happens
if (startAngle > endAngle) {
rotation = endAngle;
startAngle = startAngle - endAngle;
endAngle = 360;
}
sec.attr('path', ["M", cx, cy, "L", x1, y1, "A", r, r, rotation,
+(endAngle - startAngle > 180), 0, x2, y2, "z"]);
}
うまく機能しますが、私は少し懐疑的です。これはパスを回転させずに解決できますか? 助けや指針をいただければ幸いです。