![]() |
Re: Liniendiagramm mit verschiedenen Farben
Zitat:
|
Re: Liniendiagramm mit verschiedenen Farben
Hallo,
... hab' auch mal 'nen bisschen rumprobiert :
Delphi-Quellcode:
Steigung gibt den Steigungswert (dezimal) zwischen zwei Punkten,
var
Steigung : real; Winkel : real; ... Steigung := (x1 - x0) / (y1 - y0); Winkel := RadToDeg(arctan2(y1-y0, x1-x0)); Winkel := (Trunc(Winkel * 10)) / 10; -beschrieben durch X0,Y0 und X1,Y1- aus, allerdings sind hier Werte von 0 ... unendlich möglich, so dass eine Farbzuweisung schwierig wird. Winkel gibt die Steigung in einem Bereich von -90,0 ... +90,0 grad zurück, wodurch die Farbzuweisung schon etwas "übersichtlicher" wird. Die Farben könnten z.B. in einem array gespeichert sein und über eine case-Anweisung zugewiesen werden. z.B.
Delphi-Quellcode:
alternativ kann natürlich auch entsprechend des Winkels
const
Colors : array[1..9] of TColor = (clBlue ..... ... case Winkel of 0..10 : pen.Color := Colors[1]; 11..20 : pen.Color := Colors[2]; ... end; ein Farbanteil (z.B. Rot) verändert werden. ... nur mal so als Denkanstoss |
Re: Liniendiagramm mit verschiedenen Farben
Zitat:
Habe es nicht in Delphi gemacht, sondern in Java, deshalb die Funktionsweise erklärt: Naiv gesehen würde man einen Graphen so zeichnen, dass man einfach für jedes X ein Y berechnet und den Pixel X,Y auf eine bestimmte Farbe setzt. Besser ist es, wenn man die Koordinaten berechnet und sie dann mit den Koordinaten des vorherigen Punktes verbindet (Linie). Das heißt, man hat die Koordinaten vom aktuellen Punkt und die vom letzten Punkt. Aus zwei Punkten kann man ganz einfach die Steigung dazwischen berechnen (siehe unten). Aus dieser Steigung macht man dann noch eine Farbe und verbindet die zwei Punkte mit einer farbigen Linie. Pseudocode:
Delphi-Quellcode:
while ...
begin // jedes Teilstück des Graphen zeichnen lastX := nextX; lastY := nextY; nextX := neue X-Koordinate berechnen; nextY := neue Y-Koordinate berechnen; steigung := (nextY - lastY)/(nextX - lastX); color := 255/MAXIMALE_STEIGUNG * abs(steigung); // auf Datentypen und Rundungen achten if steigung >= 0 then setColor(Color(col, 0, 0)); else setColor(Color(0, 0, col)); drawLine((lastX, lastY, nextX, nextY ); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz