Dynamisch erstellen Sie ein point-array
Ich würde gerne so zeichnen Sie eine Kurve mit graphics.DrawCurve
und ich haben x-und y-Werte in separaten arrays (float x[]
und float y[]
). Als DrawCurve
Bedürfnisse point-array als Eingabe, die ich brauche, um zu konvertieren oder dynamisch erstellen das point-array von float-arrays x und y ein. Gibt es einen schnellen Weg für das?
Habe ich rund 20000 Punkte zum zeichnen der Kurve, Ist es eine gute Idee zu verwenden graphics.DrawCurve
auf diesen Zweck?
- Der einzige Weg ist die Verknüpfung der beiden arrays zusammen, aber dann wäre Sie nicht besser mit einer Liste von Punkten, um mit zu beginnen? Was haben Sie versucht?
- Ich konnte nicht versuchen alles so weit, außer die Suche. Was ich versuche ist die erste Zuweisung das point-array und dynamisch sammeln Sie die x-und y-Werte in die zugewiesenen point-array in einer Schleife. Aber, so weit ich konnte nicht herausfinden, wie zu reservieren ein point-array. (warum ist der minus-vote für??)
- Sind Sie auf der Suche nach Zip (LINQ)? - Wie (ungetestet):
xArray.Zip(yArray, (x, y) => (new Point(x,y))).ToArray()
- Gut, was haben Sie recherchiert, so weit und was hat nicht funktioniert? Zeigen Sie, was Sie versucht haben, die downvote, weil Sie noch nicht gezeigt, Forschung/Aufwand
- Ah cool! Also googeln das problem und verbringen unterschiedliche Codierung Kombinationen für einen halben Tag, zählt nicht als Versuch. Beim nächsten mal werde ich handstanding, während googeln es zu zeigen, dass ich verbringen wirklich eine Anstrengung, um mein problem zu lösen. Andere Problem ist, dass es nicht leicht zu trennen array-Zeiger und Punkt-array in den Suchergebnissen; aber es gibt genügend Fragen&Antworten, die für array-Zeiger.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es einige Fragen zu beantworten.
Gut, es gibt keinen Unterschied in der Zuweisung ein point-array als dies für jede andere Art von array:
Aber arrays sind, fehlt eine gewisse "Bequemlichkeit". Zum Beispiel, Sie haben eine Feste Größe, die Sie angeben müssen, zu dem Zeitpunkt der Initialisierung (Zuweisung). Und wenn Sie mehr Speicherplatz benötigen, müssen Sie manuell erstellen Sie ein neues (größeres) array und kopieren Sie alle Werte von der alten auf die neue.
Deshalb fast überall würden Sie arbeiten mit einem array, du bist wahrscheinlich besser dran, unter Verwendung einer Liste:
Und dann, wo Sie wirklich brauchen, um ein array übergeben, können Sie einfach get it via:
Beim arbeiten mit einer Liste, das ist so einfach wie:
Wir wissen nicht, wie Sie füllen Sie Ihre
float x[]
undfloat y[]
. Wenn möglich, würde ich nicht diese zwei separate arrays in den ersten Platz, und nutzen Sie einfach diepointList
von Anfang an. Mit einer Einschränkung: ein System.Zeichnung.Punkt funktioniert nur mitint
Werte, nicht mitfloat
Werte. Also ich nehme an, du meintest zu sammelnint
Werte für die Koordinaten.Wenn Sie nicht ändern, die Sammlung der Koordinaten und haben, um die Arbeit mit diesen arrays können Sie "zip" Sie zusammen, wie diese:
Oder, wenn Sie wissen, Sie brauchen ein array:
Für diese, Sie müssen in der Lage sein zu verwenden
System.Linq
(in anderen Worten höher als .Net 2.0).Wenn Sie nicht verwenden können, Linq, muss man es "von hand". So etwas wie:
PointF[] pointArray = new PointF[500]; for(int i = 0; i < 500; i++){ pointArray[i] = new PointF((float)yPoints[i], (float)xPoints[i]); }
Jedoch Liste erstellen und Punkt hinzufügen zur Liste funktioniert nicht mit der Grafik.DrawCurve. Ich habe in der Tat float-Werte in der x-Achse und eigentlich funktioniert es gut mit der Grafik.DrawCurve. Ich habe nicht versucht, die Linq-Lösung so weit, und ich werde Bearbeiten Sie diese Antwort, wenn ich vergleichen Sie die Laufzeit der Lösungen.Point
in meiner Antwort aufPointF
entfernen Sie die(int)
Gießen und vergessen, was ich schrieb, brauchenint
^_^. Ich verstehe nicht ganz, was meinen Sie mit "Liste erstellen und Punkt hinzufügen zur Liste funktioniert nicht mit der Grafik.DrawCurve". Machen Sie eine Ausnahme oder einen compile-Fehler? "nicht arbeiten" konnte alles bedeuten. - sind Sie fehlen alle anderen benötigten Parameter für Grafiken.DrawCurve?Point[] pointArray = pointList.ToArray();
" -- also in Ihrem Fall, Sie haben zu schreiben:g.DrawCurve(pen, pointArray.ToArray(), 1F);
Können Sie erstellen
List<Point>
was besser ist, als arrays.Können Sie alle x-und y-Koordinaten von zwei arrays und zusammen in der Liste als Punkte und als diese Liste verwenden, um zu zeichnen Kurve.
Gegeben die Werte in beiden arrays haben den gleichen Index können Sie itereate über Sie, erzeugen Sie die Punkte und fügen Sie Sie in einer Liste.
Sehe ich nicht ein spezielles problem bei der Verwendung
DrawCurve
hier.Wenn Sie ein array von Punkten verwenden
points.ToArray();