![]() |
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:
[edit=alcaeus]Delphi-Tags eingefügt. Das nächste mal bitte selbst machen. Danke :) Mfg, alcaeus[/edit]
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. |
Re: Apfelmann ohne Zoom
Hallo Neuling,
wahrscheinlich hast du inzwischen die Suchfunktion hier im Forum entdeckt, nach Apfelmännchen gesucht und dabei ![]() Grüße vom marabu |
DP-Maintenance
Dieses Thema wurde von "alcaeus" von "Die Delphi-IDE" nach "Multimedia" verschoben.
Ist keine Frage zur Delphi-IDE |
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 00:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz