AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Liniendiagramm mit verschiedenen Farben

Ein Thema von egal · begonnen am 5. Jan 2010 · letzter Beitrag vom 5. Jan 2010
Antwort Antwort
Seite 2 von 2     12   
egal

Registriert seit: 14. Jul 2004
190 Beiträge
 
Delphi XE4 Professional
 
#11

Re: Liniendiagramm mit verschiedenen Farben

  Alt 5. Jan 2010, 15:22
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.
  Mit Zitat antworten Zitat
Benutzerbild von markus5766h
markus5766h

Registriert seit: 5. Mär 2009
Ort: Hamburg
569 Beiträge
 
Delphi XE8 Professional
 
#12

Re: Liniendiagramm mit verschiedenen Farben

  Alt 5. Jan 2010, 15:39
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
Markus H.
  Mit Zitat antworten Zitat
Torpedo

Registriert seit: 21. Dez 2003
410 Beiträge
 
#13

Re: Liniendiagramm mit verschiedenen Farben

  Alt 5. Jan 2010, 18:25
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.
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;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:08 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