Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Apfelmann ohne Zoom (https://www.delphipraxis.net/46384-apfelmann-ohne-zoom.html)

biganstar 24. Mai 2005 09:30


Apfelmann ohne Zoom
 
Jo

könnte mir irgendjemand helfen?? ich versuche eine Apfelmann zu programieren und scheitere an der Zoomfunktion! :wall: hier mein quelltext

Delphi-Quellcode:
unit UNT_julia_1;

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

type
  TFRM_apfelmann = class(TForm)
    BTN_zeichnen: TBitBtn;
    BTN_close: TBitBtn;
    LBL_xmin: TLabel;
    EDT_xmax: TEdit;
    LBL_xmax: TLabel;
    EDT_ymin: TEdit;
    LBL_ymin: TLabel;
    EDT_xmin: TEdit;
    LBL_ymax: TLabel;
    EDT_ymax: TEdit;
    LBL_kmax: TLabel;
    EDT_kmax: TEdit;
    LBL_creal: TLabel;
    EDT_creal: TEdit;
    LBL_cimag: TLabel;
    EDT_cimag: TEdit;
    LBL_fluchtgrenze: TLabel;
    EDT_rmax: TEdit;
    procedure BTN_closeClick(Sender: TObject);
    procedure BTN_zeichnenClick(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);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FRM_apfelmann: TFRM_apfelmann;

implementation

{$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 TFRM_apfelmann.BTN_closeClick(Sender: TObject);
begin
  close;
end;

procedure iteration(x_bild,y_bild: integer);
begin
  x := xmin + x_bild*dx;
  y := ymax - y_bild*dy;
  cimag := (x_bild -300) / 100;
  creal := (y_bild -200) / 100;
  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_apfelmann.canvas.pixels[x_bild+152,y_bild+8] := 16000000div(k+1);
end;


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

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

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

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

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


end.
[edit=alcaeus]Delphi-Tags eingefügt. Das nächste mal bitte selbst machen. Danke :) Mfg, alcaeus[/edit]

marabu 24. Mai 2005 12:24

Re: Apfelmann ohne Zoom
 
Hallo Neuling,

wahrscheinlich hast du inzwischen die Suchfunktion hier im Forum entdeckt, nach Apfelmännchen gesucht und dabei diesen Beitrag gefunden.

Grüße vom marabu

DP-Maintenance 24. Mai 2005 12:25

DP-Maintenance
 
Dieses Thema wurde von "alcaeus" von "Die Delphi-IDE" nach "Multimedia" verschoben.
Ist keine Frage zur Delphi-IDE

Kroko1999 25. Mai 2005 12:11

Re: Apfelmann ohne Zoom
 
ich habe erstmal folgendes geändert, damit das richtige Apfelmännchen herauskommmt:
Delphi-Quellcode:
procedure TFRM_Apfelmann.BTN_ZeichnenClick(Sender: TObject);
begin
  CalcApfel;
end;

procedure TFRM_Apfelmann.CalcApfel;
var
  P: TPoint;
  K: Integer;
  X,Y,
  Xa,Xe,
  Ya,Ye,
  R,
  dX,dy: Extended;
  function _Iter (Ax,Ay: Extended): Integer;
  var
    A2,B2,
    A,B,M: Extended;
    I: Integer;
  begin
    A := Ax;
    A2 := A*A;
    B := Ay;
    B2 := B*B;
    I := 0;
    repeat
      M := A2-B2+Ax;
      B := 2*A*B+Ay;
      A := M;
      A2 := A*A;
      B2 := B*B;
      Inc (I);
    until (A2+B2>R) or (I>K);
    if I>=K then Result := 0
            else Result := K;
  end;
begin
  Xe := strtofloat(EDT_xmax.text);
  Xa := strtofloat(EDT_xmin.text);
  Ye := strtofloat(EDT_ymax.text);
  Ya := strtofloat(EDT_ymin.text);
  K := strtoint(EDT_kmax.text);
  R := strtoFloat(EDT_rmax.Text);
  dX := (Xe-Xa)/600;
  dY := (Ye-Ya)/400;
  P.Y := 8;
  Y := Ya;
  while Y<Ye do
  begin
    P.X := 152;
    X := Xa;
    while X<Xe do
    begin
      FRM_Apfelmann.Canvas.Pixels[P.X,P.Y] := 16000000 div (1+_Iter (X,Y));
      X := X+dX;
      Inc (P.X);
    end;
    Y := Y+dY;
    Inc (P.Y);
  end;

end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:26 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