Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Liniendiagramm mit verschiedenen Farben (https://www.delphipraxis.net/145624-liniendiagramm-mit-verschiedenen-farben.html)

egal 5. Jan 2010 11:46


Liniendiagramm mit verschiedenen Farben
 
Hallo zusammen!
Ich suche eine Komponente für Delphi 2006(2010), die Liniendiagramme kann, allerdings mit verschiedenen Farben für unterschiedliche Steigungen. Auch als Shareware, aber unbedingt mit dem Quellcode. Vielen Dank im voraus!

s.h.a.r.k 5. Jan 2010 11:49

Re: Liniendiagramm mit verschiedenen Farben
 
Wie komplex muss es denn sein? Vielleicht wäre es wert, das selbst zu schreiben -- auch wenn das nicht direkt die Antwort auf deine Frage ist. Ich hatte jedenfalls immer die Erfahrung gemacht, dass die Komponenten meist genau das nicht gemacht hatten, was ich wollte. Es waren halt immer so gewisse Details, die fehlten, um die Komponente in Meinen Augen vollständig wirken zu lassen.

Torpedo 5. Jan 2010 11:56

Re: Liniendiagramm mit verschiedenen Farben
 
Ich würde es auch selbst programmieren. Liniendiagramme sind ja nicht sehr komplex und die Farbe an die Steigung anzupassen ist auch kein Problem.

Übrigens glaube nicht nicht, dass man für Shareware den Quellcode bekommt.

Wolfgang Mix 5. Jan 2010 12:00

Re: Liniendiagramm mit verschiedenen Farben
 
Liste der Anhänge anzeigen (Anzahl: 1)
Das angefügte Bild habe ich mit Canvas erstellt,
einfach mit MoveTo und LineTo.

v2afrank 5. Jan 2010 12:16

Re: Liniendiagramm mit verschiedenen Farben
 
Und was ist mit TChart, wenn Du da allerding den Sourcecode haben willst kostet es ordentlich

markus5766h 5. Jan 2010 12:17

Re: Liniendiagramm mit verschiedenen Farben
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ebenfalls mal ein Beispiel, gezeichnet auf Canvas, LineTo - MoveTo

... ist eigentlich einfach zu realisieren
und bietet eben die Möglichkeit, Zeichenfläche und Graphen
den eigenen Bedürfnissen anzupassen.

Torpedo 5. Jan 2010 12:18

Re: Liniendiagramm mit verschiedenen Farben
 
Zitat:

Zitat von Wolfgang Mix
Das angefügte Bild habe ich mit Canvas erstellt,
einfach mit MoveTo und LineTo.

Ja und wenn man es mit MoveTo und LineTo macht, hat man auch immer die Steigung, um die Farbe entsprechend anzupassen.
Beispiel:
MoveTo 10 20
LineTo 30 40

Steigung = (40-20)/(30-10) (glaube ich)

Um die Steigung in eine Farbe umzuwandeln, könnte man z.B. nur die Rot-Anteil den Farbe verändern.
Rot := 0 bei maximaler negativer Steigung
Rot := 255 bei maximaler positiver Steigung

Edit:
Und wenn man das alles hat, kann man es so zeichnen:
MoveTo...
steigung := ...
SetColor(berechnefarbe(steigung))
LineTo...

egal 5. Jan 2010 13:00

Re: Liniendiagramm mit verschiedenen Farben
 
Zitat:

Zitat von s.h.a.r.k
Wie komplex muss es denn sein? Vielleicht wäre es wert, das selbst zu schreiben -- auch wenn das nicht direkt die Antwort auf deine Frage ist. Ich hatte jedenfalls immer die Erfahrung gemacht, dass die Komponenten meist genau das nicht gemacht hatten, was ich wollte. Es waren halt immer so gewisse Details, die fehlten, um die Komponente in Meinen Augen vollständig wirken zu lassen.

"Selbst zu schreiben" ist natürlich möglich, aber für uns ist eigentlich billiger schon was fertiges kaufen und dann eventuell erweitern.

egal 5. Jan 2010 13:05

Re: Liniendiagramm mit verschiedenen Farben
 
Zitat:

Zitat von v2afrank
Und was ist mit TChart, wenn Du da allerding den Sourcecode haben willst kostet es ordentlich

da fehlt doch diese Möglichkeit oder? Da kann man, glaube ich, nur die Punkte mit verschiedenen Farben markieren.

Torpedo 5. Jan 2010 13:12

Re: Liniendiagramm mit verschiedenen Farben
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe mal einen Sinus programmiert, der je nach Steigung die Farbe ändert. So soll es sein, oder?
Ich kenne keine fertige Komponente, die die Farbe an die Steigung anpasst...

egal 5. Jan 2010 14:22

Re: Liniendiagramm mit verschiedenen Farben
 
Zitat:

Zitat von Torpedo
Ich habe mal einen Sinus programmiert, der je nach Steigung die Farbe ändert. So soll es sein, oder?
Ich kenne keine fertige Komponente, die die Farbe an die Steigung anpasst...

ja, so soll's sein, Kurven können aber verschieden sein. Für einen Tipp, wie du das gemacht hast, wäre ich dankbar. 8-)

markus5766h 5. Jan 2010 14:39

Re: Liniendiagramm mit verschiedenen Farben
 
Hallo,
... hab' auch mal 'nen bisschen rumprobiert :
Delphi-Quellcode:
var
Steigung : real;
Winkel  : real;

...


 Steigung := (x1 - x0) / (y1 - y0);
 Winkel := RadToDeg(arctan2(y1-y0, x1-x0));
 Winkel := (Trunc(Winkel * 10)) / 10;
Steigung gibt den Steigungswert (dezimal) zwischen zwei Punkten,
-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:
const
 Colors : array[1..9] of TColor = (clBlue .....

...
case Winkel of
 0..10 : pen.Color := Colors[1];
11..20 : pen.Color := Colors[2];
 ...
end;
alternativ kann natürlich auch entsprechend des Winkels
ein Farbanteil (z.B. Rot) verändert werden.


... nur mal so als Denkanstoss

Torpedo 5. Jan 2010 17:25

Re: Liniendiagramm mit verschiedenen Farben
 
Zitat:

Zitat von egal
ja, so soll's sein, Kurven können aber verschieden sein. Für einen Tipp, wie du das gemacht hast, wäre ich dankbar. 8-)

Das funktioniert auch mit allen anderen Kurven, solange man die Steigung berechnen kann. Und wenn man sie zeichnen kann, kann man auch die Steigung berechnen. ;)
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 18:57 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz