Я использую Raphaël в первый раз с небольшим опытом svg, и мне нужен кто-то, кто действительно хорошо разбирается в этих двух, чтобы помочь мне.
Я создал круговую диаграмму с динамическими секторами. Секторы можно изменить, перетащив круглые кнопки. См. эту скрипту. Я тестировал только в Chrome и Safari, которые являются единственными требуемыми браузерами.
Круговая диаграмма еще не завершена. Секторы могут перекрываться. Пожалуйста, проигнорируйте это сейчас.
У меня возникли проблемы, когда начальный угол сектора был больше угла окончания. Это тот случай, когда конечный угол проходит отметку 0/360 °. Чтобы решить эту проблему, я использовал параметр path rotation. Я двигал сектор вперед, двигая углы назад, пока конечный угол не достиг 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"]);
}
Хотя это работает красиво, я немного скептически настроен. Можно ли это решить без поворота пути? Я ценю любую помощь или указатели.