


Einführung in die Methode zum Zeichnen von Kreisdiagrammen mit Canvas (Code)
Der Inhalt dieses Artikels ist eine Einführung in die Methode zum Zeichnen von Kreisdiagrammen auf Leinwand (Code). Ich hoffe, dass er für Sie hilfreich ist.
1. Aufgabenbeschreibung
Verwenden Sie natives canvasAPI
, um ein Kreisdiagramm (Nightingale Rose) zu zeichnen. (Screenshots und Daten stammen aus der offiziellen Beispielbibliothek von Baidu Echarts [Beispiellink anzeigen]).
2. Wichtige Tipps
Es gibt viele Möglichkeiten, das Nachtigall-Rosendiagramm zu zeichnen. Die beiden in Echarts
bereitgestellten Methoden sind unterschiedlich In diesem Artikel wird als Beispiel die flächenproportionale Zeichenmethode verwendet. Der Zeichenalgorithmus lautet wie folgt:
- Bestimmen Sie den Winkel jedes Sektors. Da sich die Winkel aller Sektoren zu 2π addieren, berechnen wir zunächst den Winkel gemäß dem Datenverhältnis:
- Die Fläche jedes Sektors und die Gesamtfläche Das Verhältnis zwischen ihnen ist das Verhältnis der Werte im angegebenen Parameterarray
options.radius
werden als Zeichnungsdaten des Sektors mit dem größten Wert verwendet die GesamtflächeS
:
- Verwenden Sie dann die obige Formel, um den entsprechenden Außenkreisradius jedes Sektors zu berechnen, und zeichnen Sie den Pfad auf der Leinwand und fülle es.
3. Beispielcode
Beispielcode für die Zeichnung eines Nachtigall-Rosendiagramms:
//绘制饼图 drawPieChart(options); /** * 绘制饼图 * @param {[type]} options [description] * @return {[type]} [description] */ function drawPieChart(options) { //记录最大数值以反求面积总和 options.maxValue = 0; //求数据集总和以在后续计算每个扇形的角度比例 options.totalNum = options.data.reduce((pre,cur)=>{ if (cur.value > options.maxValue) { options.maxValue = cur.value; } return pre+cur.value; },0); /*以最大值对应最大半径来计算面积总和,并覆盖原值 *使得最大的一块扇形外圆半径为options.radius[0] *内圆半径为options.radius[1] */ let Rmin = options.radius[0]; let Rmax = options.radius[1]; let r = Math.sqrt((Rmax*Rmax - Rmin*Rmin)*options.totalNum / options.maxValue + Rmin*Rmin); options.radius[1] = r; //移动坐标系原点至绘图中心 let paintingCenter={ x:parseInt(options.center[0],10)/100 * (options.chartZone[2] - options.chartZone[0]) + options.chartZone[0], y:parseInt(options.center[1],10)/100 * (options.chartZone[3] - options.chartZone[1]) + options.chartZone[1] } context.translate(paintingCenter.x, paintingCenter.y); //绘制每个扇形,过程中累加旋转角度 let allAngle = options.data.reduce((prev,cur,index)=>{ context.fillStyle = options.colorPool[index] let angle = calcPaintingData(cur,options); return prev + angle; },0); //绘制中空白色圆 context.beginPath(); context.fillStyle = 'white'; context.arc(0,0,options.radius[0],0,2*Math.PI,false); context.fill(); } /** * 计算每个扇形所需要的绘图参数 */ function calcPaintingData(data,options) { let scale = data.value / options.totalNum; let angle = scale * 2 * Math.PI; let Rmin = options.radius[0]; let Rmax = options.radius[1]; let r = Math.sqrt(scale * (Rmax*Rmax - Rmin*Rmin) + Rmin*Rmin); data.r = r; //绘制扇形 paintFan({ r:r, angle:angle, data:data, options:options }); return angle;//将角度值返回给外层函数以供累加 } //绘制扇形 function paintFan(opt) { context.beginPath(); context.lineTo(opt.r,0); context.arc(0,0,opt.r,0,opt.angle,false); context.lineTo(0,0); context.closePath(); context.fill(); context.rotate(opt.angle); }
Der Effekt kann im Browser angezeigt werden:
4. Die Implementierungsidee der Hover-Hervorhebung
- Während des Zeichenvorgangs werden die Zeichendaten jedes Sektors (Radius, Startwinkel relativ zum Mittelpunkt des Kreises, Sektorwinkel) werden auf den Zeichnungsdaten montiert.
- Hört das Mausbewegungsereignis
canvas
auf demmousemove
-Tag und wandelt die Mausbewegungsereignisseevent.clientX
undevent.clientY
in numerische Werte(mouseX,mouseY)
relativ zu den Leinwandkoordinaten im um Rückruffunktion. - wird von den Kreismittelpunktkoordinaten
(paintingCenter.x,paintingCenter.y)
mit(mouseX,mouseY)
als Vektor verbunden. Anhand des Winkels und des Moduls des Vektors können Sie feststellen, ob sich die Maus auf einem bestimmten Sektor befindet. - Wenn es sich über dem Sektor befindet, zeichnen Sie den Keyframe mit Übergangsanimation, damit der Hover-Effekt erscheint. Ändern Sie zunächst die
context.fillStyle
-Farbe in die Hervorhebungsfarbe des entsprechenden Sektors, erhöhen Sie dann den Zeichnungsradius des äußeren Kreises linear auf die Zielgröße (z. B. 10 %) Bild für Bild und verwenden Sie den Zeichenkontext der Leinwand, um erneut zu zeichnen -Schließen Sie den Zeichenbereich in jedem Rahmen. Zeichnen Sie einfach die Linie und füllen Sie sie dann aus. Wenn der Hover-Effekt erscheint, zeichnen Sie den hervorgehobenen Farbzeichenbereich. Wenn der Hover-Effekt verschwindet, zeichnen Sie einfach die weißen äußeren Sektoren Bild für Bild, beginnend mit dem äußeren Kreis, und zeichnen Sie schließlich die Datensektoren hinein die Originalfarbe.
[Verwandte Empfehlungen: HTML5-Video-Tutorial]
Das obige ist der detaillierte Inhalt vonEinführung in die Methode zum Zeichnen von Kreisdiagrammen mit Canvas (Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Zu den Schulen, die Leinwand verwenden, gehören die Stanford University, das MIT, die Columbia University, die University of California, Berkeley usw. Ausführliche Einführung: 1. Die Stanford University nutzt Canvas als ihre wichtigste Online-Lernplattform. Lehrer und Studenten der Stanford University nutzen Canvas, um Kursinhalte zu verwalten und zu kommunizieren und durch Funktionen wie Online-Diskussionen, Abgabe von Aufgaben und Prüfungen zu lernen Das Polytechnic Institute und das MIT nutzen Canvas ebenfalls als Online-Lernmanagementsystem und führen die Kursverwaltung über die Canvas-Plattform durch. 3. Columbia University usw.

Zu den Canvas-Pfeil-Plugins gehören: 1. Fabric.js, das über eine einfache und benutzerfreundliche API verfügt und benutzerdefinierte Pfeileffekte erstellen kann. 2. Konva.js, das die Funktion zum Zeichnen von Pfeilen bietet und verschiedene Pfeile erstellen kann 3. Pixi.js, das umfangreiche Grafikverarbeitungsfunktionen bietet und verschiedene Pfeileffekte erzielen kann; 4. Two.js, das auf einfache Weise Pfeilstile und Animationen erstellen und steuern kann; 6. Grobe .js, Sie können handgezeichnete Pfeile usw. erstellen.

Zu den Details der Leinwanduhr gehören das Aussehen der Uhr, Teilstriche, Digitaluhr, Stunden-, Minuten- und Sekundenzeiger, Mittelpunkt, Animationseffekte, andere Stile usw. Ausführliche Einführung: 1. Erscheinungsbild der Uhr: Sie können mit Canvas ein kreisförmiges Zifferblatt als Erscheinungsbild der Uhr zeichnen und die Größe, Farbe, den Rand und andere Stile des Zifferblatts festlegen. 2. Skalenlinien: Zeichnen Sie Skalenlinien ein 3. Digitaluhr: Sie können eine Digitaluhr auf das Zifferblatt zeichnen, um die aktuelle Stunde und Minute anzuzeigen.

Zu den Versionen von html2canvas gehören html2canvas v0.x, html2canvas v1.x usw. Detaillierte Einführung: 1. html2canvas v0.x, eine frühe Version von html2canvas. Die neueste stabile Version ist v0.5.0-alpha1. Es handelt sich um eine ausgereifte Version, die in vielen Projekten weit verbreitet und verifiziert wurde. 2. html2canvas v1.x, dies ist eine neue Version von html2canvas.

Zu den Tkinter-Canvas-Attributen gehören BG, BD, Relief, Breite, Höhe, Cursor, Highlightbackground, Highlightcolor, Highlightthickness, Insertbackground, Insertwidth, Selectbackground, Selectforeground, XScrollcommand-Attribute usw. Ausführliche Einführung

Für die Verwendung von Canvas zum Zeichnen von Diagrammen und Animationseffekten in Uniapp sind bestimmte Codebeispiele erforderlich. 1. Einführung Mit der Beliebtheit mobiler Geräte müssen immer mehr Anwendungen verschiedene Diagramme und Animationseffekte auf dem mobilen Endgerät anzeigen. Als plattformübergreifendes Entwicklungsframework auf Basis von Vue.js bietet uniapp die Möglichkeit, Canvas zum Zeichnen von Diagrammen und Animationseffekten zu verwenden. In diesem Artikel wird vorgestellt, wie Uniapp Canvas verwendet, um Diagramm- und Animationseffekte zu erzielen, und es werden spezifische Codebeispiele gegeben. 2. Leinwand

Entdecken Sie das Canvas-Framework: Um die häufig verwendeten Canvas-Frameworks zu verstehen, sind spezifische Codebeispiele erforderlich. Einführung: Canvas ist eine in HTML5 bereitgestellte Zeichen-API, mit der wir umfangreiche Grafik- und Animationseffekte erzielen können. Um die Effizienz und den Komfort des Zeichnens zu verbessern, haben viele Entwickler verschiedene Canvas-Frameworks entwickelt. In diesem Artikel werden einige häufig verwendete Canvas-Frameworks vorgestellt und spezifische Codebeispiele bereitgestellt, um den Lesern ein tieferes Verständnis für die Verwendung dieser Frameworks zu vermitteln. 1. EaselJS-Framework Ea

Verstehen Sie die Leistungsfähigkeit und Anwendung von Canvas in der Spieleentwicklung. Überblick: Mit der rasanten Entwicklung der Internettechnologie werden Webspiele bei Spielern immer beliebter. Als wichtiger Bestandteil der Webspielentwicklung hat sich die Canvas-Technologie nach und nach in der Spieleentwicklung durchgesetzt und ihre leistungsstarke Leistungsfähigkeit und Anwendung unter Beweis gestellt. In diesem Artikel wird das Potenzial von Canvas in der Spieleentwicklung vorgestellt und seine Anwendung anhand spezifischer Codebeispiele demonstriert. 1. Einführung in die Canvas-Technologie Canvas ist ein neues Element in HTML5, das uns die Verwendung ermöglicht
