AGB  ·  Datenschutz  ·  Impressum  







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

Farbe beim Apfelmännchen verändern

Ein Thema von Daniel07A · begonnen am 15. Mai 2005 · letzter Beitrag vom 15. Mai 2005
Antwort Antwort
Daniel07A

Registriert seit: 15. Mai 2005
12 Beiträge
 
Delphi 7 Enterprise
 
#1

Farbe beim Apfelmännchen verändern

  Alt 15. Mai 2005, 13:05
Hi,

Ich habe ein Programm über das Apfelmännchen. Wie kann ich die Farbe des Apfelmännchens ändern, bzw. verschiedene Fabrarten zur auswahl stellen ?


Die entsprechende Zeilen im Quellcode:
Delphi-Quellcode:
if k >= kmax then k:=0;    
  FRM_Main.IMG_Apfelmann.canvas.pixels[x_bild+1,y_bild+1] := 16000000div(k+1);

Der gesamte Quellcode:
Delphi-Quellcode:
t UNT_AM_Main;    

interface    

uses    
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,    
  Dialogs, StdCtrls, Buttons, ExtCtrls, jpeg;    

type    
  TFRM_Main = class(TForm)    
    BTN_Options: TBitBtn;    
    BTN_Zeichnen: TBitBtn;    
    IMG_Apfelmann: TImage;    
    SHP_Unterteilung: TShape;    
    procedure BTN_OptionsClick(Sender: TObject);    
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;    
      Shift: TShiftState; X, Y: Integer);    
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;    
      Shift: TShiftState; X, Y: Integer);    
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,    
      Y: Integer);    
    procedure FormCreate(Sender: TObject);    
    procedure BTN_ZeichnenClick(Sender: TObject);    
  private    
    { Private-Deklarationen }    
  public    
    { Public-Deklarationen }    
  end;    

var    
  FRM_Main: TFRM_Main;    

implementation    

uses UNT_AM_Options;    

{$R *.dfm}    

var x_bild,y_bild,kmax,k,rmax,xo,xu,yl,yr : integer;    
    x,xalt,y,dx,dy,creal,cimag : real;    
    xmax,xmin,ymax,ymin : real;    
    md : boolean;    

procedure iteration(x_bild,y_bild: integer);    
begin    
  x := xmin + x_bild*dx;    
  y := ymax - y_bild*dy;    
  creal := (x_bild) *dx+xmin;    
  cimag := (400-y_bild) *dy+ymin;    
  k := 0;    
  repeat    
    xalt := x;    
    x := sqr(x) - sqr(y) + creal;    
    y := 2*xalt*y + cimag;    
    inc(k);    
  until (sqr(x)+sqr(y)>rmax) or (k>kmax);    
  if k >= kmax then k:=0;    
  FRM_Main.IMG_Apfelmann.canvas.pixels[x_bild+1,y_bild+1] := 16000000div(k+1);    
end;    

procedure TFRM_Main.BTN_OptionsClick(Sender: TObject);    
begin    
FRM_Options.show;    
end;    

procedure TFRM_Main.FormMouseDown(Sender: TObject; Button: TMouseButton;    
  Shift: TShiftState; X, Y: Integer);    
var a,b : real;    
begin    
  a := xmin + (x-152)*(xmax-xmin)/500;    
  b := ymax - (y-8)*(ymax-ymin)/400;    
  FRM_Options.EDT_xmin.Text := floattostrf(a,fffixed,10,8);    
  FRM_Options.EDT_ymax.Text := floattostrf(b,fffixed,10,8);    
  xo := x; yl := y; xu := x; yr := y;    
  md := true;    
end;    

procedure TFRM_Main.FormMouseUp(Sender: TObject; Button: TMouseButton;    
  Shift: TShiftState; X, Y: Integer);    
begin    
  md := false;    
end;    

procedure TFRM_Main.FormMouseMove(Sender: TObject; Shift: TShiftState; X,    
  Y: Integer);    
var a,b : real;    
begin    
  if md then    
   begin    
     a := xmin + (x-152)*(xmax-xmin)/500;    
     b := ymax - (y-8)*(ymax-ymin)/400;    
     FRM_Options.EDT_xmax.Text := floattostrf(a,fffixed,10,8);    
     FRM_Options.EDT_ymin.Text := floattostrf(b,fffixed,10,8);    
     IMG_Apfelmann.canvas.Pen.Mode := pmnotxor;    
     IMG_Apfelmann.canvas.Rectangle(xo,yl,xu,yr);    
     IMG_Apfelmann.canvas.Rectangle(xo,yl,x,y);    
     IMG_Apfelmann.canvas.Pen.Mode := pmcopy;    
     xu := x; yr := y;    
   end;    
end;    

procedure TFRM_Main.FormCreate(Sender: TObject);    
begin    
 md := false;    
end;    

procedure TFRM_Main.BTN_ZeichnenClick(Sender: TObject);    
begin    
xmax := strtofloat(FRM_Options.EDT_xmax.text);    
xmin := strtofloat(FRM_Options.EDT_xmin.text);    
ymax := strtofloat(FRM_Options.EDT_ymax.text);    
ymin := strtofloat(FRM_Options.EDT_ymin.text);    
kmax := strtoint(FRM_Options.EDT_kmax.text);    
rmax := strtoint(FRM_Options.EDT_rmax.Text);    
creal := strtofloat(FRM_Options.EDT_creal.text);    
cimag := strtofloat(FRM_Options.EDT_cimag.text);    
dx := (xmax-xmin)/500;    
dy := (ymax-ymin)/400;    
for x_bild := 0 to 500 do    
   for y_bild := 0 to 400 do iteration (x_bild,y_bild);    
end;    

end.
Hoffe ihr versteht mich.

Gruß Daniel
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Farbe beim Apfelmännchen verändern

  Alt 15. Mai 2005, 16:51
Die gebräuchlichste Art ein Mandelbrot/Julia-Fraktal einzufärben ist eine Palette. Angenommen du hast 20 Iterationen als Abbruchkriterium, so benötigst du eine Palette von 20 Farben. Dann zählst du in deiner Iterationsschleife mit, nach wie vielen Iterationen abgebrochen wurde (in deinem Source ist dass das k), und nimmst dieses als Palettenindex her.
Es gibt allerdings noch massig weitere Verfahren zur Einfärbung, wovon mir prinzipiell noch das Orbit-Vervahren bekannt ist. Dabei nimmt man nicht die tatsächlichen Iterationen als Palettenindex, sondern den Betrag der komplexen Zahl (gerundet) nach der n-ten Iteration (n wählbar). Ob das aber für 2D-Fraktale auch taugt weiss ich nicht genau - bei Quaternion-Fraktalen siehts sehr hübsch aus (dazu wird in naher Zukunft was hier erscheinen).

Gruss,
Fabian
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Daniel07A

Registriert seit: 15. Mai 2005
12 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Farbe beim Apfelmännchen verändern

  Alt 15. Mai 2005, 19:27
Danke für die Infos, aber ich weiß nicht wie man eine solche Farbpalette hier einbaut. Ich muss es auch so einbauen können das ich es verstehe und dem Lehrer erklären kann. Aber wenn du meinst das du noch was posten willst, bin ich mal gespannt

Gruß Daniel

Ps.: Hab es jetzt hingekriegt die die Farbe zu ändern. Aber über eine Lösung wie man eine Farbpalette einbaut wäre ich trotzdem dankbar. Kann auch ein Tuturial sein.
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Farbe beim Apfelmännchen verändern

  Alt 15. Mai 2005, 23:35
Eine Palette ließe sich z.B. ganz banal als "array of TColor" machen. Einfach eine Aneinanderreihung von Farbwerten auf die über einen Index zugegriffen werden kann.
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Antwort Antwort


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 00:07 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