JavaScript. Подробное руководство, 6-е издание, стр. 352
<b> <circle cx="5" cy="5" r="5" fill="blue"/></b><b> </svg></b><b> </body></b><b></html></b>На момент написания этих строк непосредственное встраивание SVG-изображе-ний в разметку HTML поддерживали только самые последние версии броузеров.
Так как формат SVG - это грамматика языка XML, рисование SVG-изображений заключается просто в использовании модели DOM для создания соответствующих XML-элементов. В примере 21.2 приводится реализация функции
<b>pieChart(),</b>
Рис. 21.3. Круговая диаграмма в формате SVG, построенная JavaScript-сценарием
Пример 21.2. Рисование круговой диаграммы средствами JavaScript и SVG
<b>/* *</b><b>* Создает элемент <svg> и рисует в нем круговую диаграмму.</b><b>* Аргументы:</b><b>* data: массив чисел для диаграммы, по одному для каждого сектора.</b><b>* width,height: размеры SVG-изображения в пикселах</b><b>* сх, су, г: координаты центра и радиус круга</b><b>* colors: массив цветов в формате HTML, по одному для каждого сектора</b><b>* labels: массив меток для легенды, по одной для каждого сектора</b><b>* 1х, 1у: координаты левого верхнего угла легенды диаграммы</b><b>* Возвращает:</b><b>* Элемент <svg>, хранящий круговую диаграмму.</b><b>* Вызывающая программа должна вставить возвращаемый элемент в документ.</b><b>*/</b><b>function pieChart(data, width, height, cx, су, r, colors, labels, lx, ly) {</b><b> // Пространство имен XML для элементов svg </b><b> var svgns = "</b><a href="http://www.w3.org/2000/svg"><b>http://www.w3.org/2000/svg</b></a><b>";</b><b> // Создать элемент <svg>, указать размеры в пикселах и координаты</b><b> var chart = document.createElementNS(svgns, "svg:svg");</b><b> chart.setAttribute("width", width);</b><b> chart.setAttribute("height", height);</b><b> chart.setAttribute("viewBox", "0 0 ” + width + " " + height);</b><b> // Сложить вместе все значения, чтобы получить общую сумму всей диаграммы</b><b> var total = 0;</b><b> for(var і = 0; і < data.length; і++) total += data[і];</b><b> // Определить величину каждого сектора. Углы измеряются в радианах,</b><b> var angles = []</b><b> for(var і = 0; і < data.length; і++) angles[i] = data[i]/total*Math.PI*2;</b><b> // Цикл по всем секторам диаграммы,</b><b> startangle = 0;</b><b> for(var і = 0; і < data.length; i++) {</b><b> // Точка, где заканчивается сектор</b><b> var endangle = startangle + angles[i];</b><b> // Вычислить координаты точек пересечения радиусов, образующих сектор,</b><b> // с окружностью. В соответствии с выбранными формулами углу 0 радиан</b><b> // соответствует точка в самой верхней части окружности,</b><b> // а положительные значения откладываются от нее по часовой стрелке.</b><b> var х1 = сх + r * Math.sin(startangle);</b><b> var y1 = су - r * Math.cos(startangle);</b><b> var x2 = cx + r * Math.sin(endangle);</b><b> var y2 = су - r * Math.cos(endangle);</b><b> // Это флаг для углов, больших половины окружности.</b><b> // Он необходим SVG-механизму рисования дуг</b><b> var big = 0;</b><b> if (endangle - startangle > Math.PI) big = 1;</b><b> // Мы описываем сектор с помощью элемента <svg:path>.</b><b> // Обратите внимание, что он создается вызовом createElementNS()</b><b> var path = document.createElementNS(svgns, "path");</b><b> // Эта строка хранит информацию о контуре, образующем сектор</b><b> var d = "М " + сх + + су + // Начало в центре окружности</b><b> " L " + х1 + "," + у1 + // Нарисовать линию к точке (х1,у1)</b><b> " А " + r + "," + r + // Нарисовать дугу с радиусом r</b><b> " 0 " + big + " 1 " + // Информация о дуге...</b>