Autor Beitrag
ähM_Key
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 88

Windows XP Professional
D7 Enterprise
BeitragVerfasst: Di 02.05.06 17:47 
Hi!

Ich möchte ein Diagram mit n Kurven erstellen. Damit man diese unterscheiden kann sollen sie n unterschiedliche Farben haben. Nun bin ich auf der Suche nach einem Algo, womit man die RGB-Werte dieser Farben erhält.
Einen Farbverlauf von r über g und b nach r habe ich schon realsiert, jedoch die Anteile der Farbkomponenten mit einer Sinus-Kurve angenähert, wodurch es nicht ganz so schön aussieht wie bei einem 'normalen', üblichen Farbverlauf, um den Haufen an an Fallunterscheidungen zu umgehen.

Nun wollte ich die Farben in gleichmäßigen Abständen aus dem Farbband wählen.

Als Ergbenis wollte ich sowas haben wie:
n=3: rot, grün, blau
n=6: rot, gelb, grün, türkis, blau, lila
usw... (n € N)

Jemand ne Idee, wie man das (einfach) besser hinbekommen kann als mit dem Sinus; oder gibts so nen Algo schon fertig (vielleicht auf ne ganz andere Art und Weise).

Dank, Gruß, ähM_Key

PS: Das Forum war grade ganz schön lahm bzw. kurzzeitig unerreichbar oO
Einloggen, um Attachments anzusehen!
_________________
Alles geht ni! Aber ein bissl' was muss!
Master_of_Magic
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 56

Win 98, Win XP
D6 Pers, D2005 Arch
BeitragVerfasst: Di 02.05.06 18:27 
Hallo ähM_Key,

Ich hab mich auch mal vor einiger Zeit mit dem Problem beschäftigt und hab mir nen einfachen Algo geschrieben. Dabei wird aus dem Farbraum von Rot bis Lila (Regenbogen) in regelmäßigen Abständen eine Farbe entnommen.
Meine ist sicherlich nicht die eleganteste Lösung, jedoch erfüllt er meiner Meinung nach ihren Zweck :wink: :

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
procedure TForm1.listColors(anzahl:integer);
var number,red,green,blue,i:integer;
step:real;
begin
  RichEdit.Clear;
  step:=1275/(anzahl-1);

  for i:=0 to anzahl-1 do
  begin
    number:=round(i*step);
    red:=0;
    green:=0;
    blue:=0;

    case number of
    0..255:
      begin
        red:=255;
        green:=number;
      end;
    256..510:
      begin
        red:=510-number;
        green:=255;
      end;
    511..765:
      begin
        green:=255;
        blue:=number-510;
      end;
    766..1020:
      begin
        green:=1020-number;
        blue:=255;
      end;
    1021..1275:
      begin
        red:=number-1020;
        blue:=255;
      end;
    1276:
      begin
        red:=255;
        blue:=255;
      end;
    end;

    Richedit.SelAttributes.Color:=rgb(red,green,blue);
    Richedit.Lines.Add('#'+inttohex(red,2)+inttohex(green,2)+inttohex(blue,2));
  end;
end;


Ich hab noch ein paar Änderungen vorgenommen, der Code müsste aber noch funktionieren.
ähM_Key Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 88

Windows XP Professional
D7 Enterprise
BeitragVerfasst: Di 02.05.06 18:48 
Joa, sieht gut aus, thx!

MK

_________________
Alles geht ni! Aber ein bissl' was muss!