Autor |
Beitrag |
stray00
Hält's aus hier
Beiträge: 10
|
Verfasst: Fr 06.03.09 16:20
Hi,
ich hab einen Counter erstellt und bei jedem tick möchte ich das ein punkt gezeichnet wird und als Kurve erscheint.
Folgender Code liegt vor
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| Tick event
private void tmCounter_Tick(object sender, EventArgs e) { hier will ich das die Kurve nacheinander erstellt wird !!! }
private void pictureBox1_Paint(object sender, PaintEventArgs e) { Point[] pt = new Point[]{new Point(0,4), new Point(50,(int)counter), new Point(100,70), new Point(150,155)};
e.Graphics.DrawCurve(new Pen(Brushes.Black, 2), pt);
} |
Danke im Voraus!!! Moderiert von Kha: Topic aus C# - Die Sprache verschoben am Fr 06.03.2009 um 16:10
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 06.03.09 16:34
Hallo und
Ja, und was ist die Frage bzw. das Problem? Ich meine, was hast du denn bisher versucht / dir überlegt dazu?
|
|
stray00 
Hält's aus hier
Beiträge: 10
|
Verfasst: Fr 06.03.09 16:40
Ich möchte das nach jedem Tick schritt für schritt meine kurve gezeichnet wird
Ich hab aber nur über das Paint event eine Kurve direkt zu zeichnen hingekriegt.
So möchte ich das aber nicht wie gesagt .
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 06.03.09 16:54
Du kannst z.B. gradweise die einzelnen Punkte zeichnen. In einer Variable merkst du dir den aktuellen Wert in Grad, also 0 bis 360. Bei 360 setzt du den Wert wieder auf 0 zurück.
Mit Hilfe der Kreisfunktionen kannst du die Punkte berechnen:
de.wikipedia.org/wik...metrische_Funktionen
|
|
stray00 
Hält's aus hier
Beiträge: 10
|
Verfasst: Fr 06.03.09 17:08
Die Frage ist ,wie mache ich das in c# sharp der code im paint evet erstellt mir ein punkt oder ne linie
ich möchte diesen code nach jedem tick ausgeführt bekommen.
Ich habe eine Software die mir die Spannung misst und einen Counter der die Zeit zählt.
Und bei jeder sekunde möchte das der punkt xy aus Spannung und Zeit als Kurve oder so gezeichnet wird .
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Fr 06.03.09 17:17
stray00 hat folgendes geschrieben : | Ich habe eine Software die mir die Spannung misst und einen Counter der die Zeit zählt. |
In dem Fall hast du ja nicht wie im Beispiel oben eine fixe Anzahl Punkte, sondern z.B. eine List<Point>, die am Anfang leer ist und der im Tick-Eventhandler immer jeweils ein Punkt hinzugefügt wird. In diesem rufst du dann Refresh() auf, um ein Neuzeichnen zu erzwingen. Und im Paint-Handler schickst du die Liste über ToArray() an DrawCurve.
_________________ >λ=
|
|
stray00 
Hält's aus hier
Beiträge: 10
|
Verfasst: Fr 06.03.09 19:00
Ich kann mir kein Bild davon machen wie das im code aussehen könnte
Könntest du mir vielleicht einen Anhaltspunkt geben .
Mein Problem ich kann ja mit dem Paint event eines Steuerelements etwas zeichnen aber ich hab keine vorstellung davon wie
das innerhalb des tick events aussehen könnte .
|
|
stray00 
Hält's aus hier
Beiträge: 10
|
Verfasst: Fr 06.03.09 19:48
Nun das mit dem neu zeichnen kriege ich hin ,das Problem .
Für jeden wert soll ein punkt gezeichnet werden die anderen punkte sollen jedoch nicht verschwinden.
Und wenn immer ein neuer punkt "gezeichnet" wird wird sie mit dem anderen punkt verbunden so soll ein "Kurve "entstehen .
Bitte um Unterstützung !!!
|
|
Th69
      

Beiträge: 4798
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Fr 06.03.09 19:55
Kha hat dir schon die Lösung genannt!
Um eine geschwungene Kurve durch alle Punkte zu erhalten, müßtest du mal nach "Spline" suchen...
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Fr 06.03.09 20:32
Th69 hat folgendes geschrieben : | Um eine geschwungene Kurve durch alle Punkte zu erhalten, müßtest du mal nach "Spline" suchen... |
...was DrawCurve schon von Haus aus macht  .
@ stray00: Hapert es an einem konkreten Punkt in meiner Erklärung? Wenn du z.B. noch nie eine List<T> benutzt hast, ist es für aufwändigere Grafik-Probleme vielleicht noch etwas zu früh.
_________________ >λ=
|
|
stray00 
Hält's aus hier
Beiträge: 10
|
Verfasst: Sa 07.03.09 11:28
Nun ich füge dem List<Point> werte hinzu siehe code
C#-Quelltext 1:
| p.Add(new Point(20, (int)counter)); |
Das Problem ist aber mein Programm misst ja die Werte und schreibt sie gleichzeitig in die List<Point>
aber wie übergebe ich das an DrawCurve oder anderen Draw Methoden siehe code
C#-Quelltext 1: 2: 3: 4: 5: 6: 7:
| private void pictureBox1_Paint(object sender, PaintEventArgs e) {
Pen pen = new Pen(Color.Blue, 10);
e.Graphics.DrawBeziers(pen, ??? ); } |
wäre nett wenn mir Jemand den Code dafür angibt
Danke im Voraus !!!
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 07.03.09 11:44
Siehe Dokumentation:
Graphics.DrawBeziers
List<T>.ToArray
Das ergibt: C#-Quelltext 1:
| e.Graphics.DrawBeziers(pen, p.ToArray()); |
|
|
stray00 
Hält's aus hier
Beiträge: 10
|
Verfasst: Sa 07.03.09 11:59
Das habe ich mir schon gedacht aber da kommt dieser eine Fehler
siehe screenshot
Moderiert von Kha: Bild angehängt
Einloggen, um Attachments anzusehen!
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Sa 07.03.09 12:06
Merkwürdig. Die Hilfe erwähnt keine ArgumentException bei DrawBeziers  .
Klicke mal auf "Details" und schau im Stack-Trace nach, welche Methode genau die Exception ausgelöst hat.
_________________ >λ=
|
|
stray00 
Hält's aus hier
Beiträge: 10
|
Verfasst: Sa 07.03.09 12:12
Also viel kann ich damit auch nicht anfangen
[url= img14.imageshack.us/...p?image=fehler2.png] [/URL]
Und wenn ich auf stacktrace klicke kommt das
[URL= img12.imageshack.us/...2.imageshack.us/img1
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 07.03.09 12:48
Nicht DrawBeziers sondern DrawCurve wurde ja vorgeschlagen, das Problem ist die Anzahl der Punkte. Zitat: | Die erste Béziersplinekurve wird zwischen dem ersten und dem vierten Punkt im Punktarray gezeichnet. Der zweite und der dritte Punkt sind Kontrollpunkte, die die Form der Kurve bestimmen. Für jede folgende Kurve sind genau drei neue Punkte erforderlich: zwei weitere Kontrollpunkte und ein Endpunkt. Der Endpunkt der vorigen Kurve wird als Anfangspunkt für die jeweils folgende Kurve verwendet. |
Mit DrawCurve wäre das so, mindestens 3 Punkte sind erforderlich: C#-Quelltext 1: 2:
| if (p.Count > 2) e.Graphics.DrawCurve(pen, p.ToArray<Point>()); | Und ich glaube hier wäre vielleicht eher Graphics.DrawLines sinnvoll:
msdn.microsoft.com/d...ibrary/7ewkcdb3.aspx C#-Quelltext 1: 2:
| if (p.Count > 1) e.Graphics.DrawLines(pen, p.ToArray<Point>()); |
|
|