Zeichnen Sie einen gekrümmten Pfad auf Leinwand?
Wie könnte ich zeichnen Sie eine quadratische Kurve oder eine trigonometrische Kurve (wie sin(x)
) auf eine Canvas
?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie könnte ich zeichnen Sie eine quadratische Kurve oder eine trigonometrische Kurve (wie sin(x)
) auf eine Canvas
?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Meisten der Zeichnungs-API dont bieten solche Funktionen, Sie werden zur Berechnung der Pixel der von Ihnen gewünschten Kurve in Pixel und zeichnen, Stück für Stück auf der Leinwand über einen oder mehrere Aufrufe an die canvas-API.
Wie Sie, ich brauchte, um zu zeichnen Sie eine gekrümmte Linie von
point(x1, y1)
zupoint (x2, y2)
. Ich habe einige der Suche rund um, die führen mich zu der Path-Klasse (android.graphics.Path
). Pfad verfügt über zahlreiche Methoden zum zeichnen von Linien. Sobald Sie erstellt haben, einen Pfad, den Sie verwenden, eine draw-Methode, um die aktuelle Zeile. Die Wege können gedreht werden, transformiert, gespeichert und Hinzugefügt. Es gibt Bögen, Kreise und Rechtecke gezeichnet werden, die mit dieser Klasse auch.http://developer.android.com/reference/android/graphics/Path.html
Set start point-of-Pfad →
mPath.moveTo(x1, y1);
Set-Konstante und end-Punkte →
mPath.quadTo(cx, cy, x2, y2);
Konvertieren Pfad line →
canvas.drawPath(mPath, mPaint);
Hier ist ein drawEquation () - Methode, die ich schrieb, für einen Graph-Klasse - ich denke, es kann helfen. Die grundlegende Idee, um eine Methode zu erstellen, dass nimmt die Gleichung ein (das ist im Grunde nur eine Funktion), wie
und dann in einer Schleife durch die Grenzen des Graphen und zeichnet kleine Segmente verbinden jeden Punkt. Die transformContext() nur kehrt der canvas-Kontext, so dass die steigenden Werte von y gehen Sie nach oben und nicht nach unten:
Verwenden
Canvas-Bereich.drawPath
undWeg.quadTo
.Gehe ich davon aus, dass Sie sind vertraut mit grundlegenden Linien der Zeichnung auf eine Leinwand zu malen, wenn nicht, dann reagieren Sie zurück und wir können sich weiter zurück. Jedoch, so weit als nur zeichnen eine Sinus-Funktion es ist eine Funktion in der Math-Klasse, die hat einfach was Sie brauchen.
http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Math.html#sin%28double%29
Von dort brauchen Sie nur Ihren pass variable x(im Bogenmaß) in die Funktion und speichern Sie die Ausgabe als y-variable. Diese repräsentieren einen Punkt auf dem graph an. Jetzt erhöhen Sie die x1-variable um einen kleinen Betrag (vielleicht 1/100 der Ihr Diagramm, wenn Sie benötigen, um diesen Wert anzupassen, um zu schmecken), führen Sie es durch die Funktion erneut aus, und speichern Sie diese Variablen(x2 und y2) als zweiten Punkt. Zeichnen Sie eine Linie zwischen diesen beiden Punkten. Speichern Sie Ihre x2,y2 Variablen als x1, y1 und erhöhen Sie Ihre x-Wert wieder zu finden, der Dritte Punkt, und so weiter und so Fort. Ist dies nicht eine "echte" Kurve, wie es ist wirklich nur eine Reihe von Linien, die annähernd die Funktion eines Kalküls Ansatz, wenn man so will.
Also:
x1 = x; //wobei x einen Punkt auf der x-Achse, die Sie möchten, zu starten grafische Darstellung an.
y1 = sin(x);
x2 = x1 + Inkrement;
y2 = sin(x2);
//Eine Linie zeichnen, hier
x1 = x2;
y1 = y2;
//zurück zum Anfang, dieser code würde natürlich auch in eine Schleife, in der Inkrement verwendet, als seine eigene portion mit dem ersten Wert gleich dem Betrag, den Sie möchten, zu erhöhen jedes mal, wenn(sagen wir mal....5) und die "next" - Anweisung wird die Schrittweite = Schrittweite + 5.
Gibt es auch eine GraphCanvas Klasse, die ich bin nicht vertraut mit, das erscheint, nehmen Sie die gleichen Punkte und zeichnen Sie die Kurve zwischen Ihnen, obwohl ich bin nicht sicher, welche Art von Transformation wird genutzt, um ziehen die Kurve und wie genau das ist. Hier ist die Klasse:
http://www.java2s.com/Code/Java/Swing-Components/GraphCanvas.htm