Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Minipaint - Kreis von Mittelpunkt aufziehen (https://www.delphipraxis.net/58677-minipaint-kreis-von-mittelpunkt-aufziehen.html)

co0kie 10. Dez 2005 18:36


Minipaint - Kreis von Mittelpunkt aufziehen
 
Hallo!

Ich prorgrammiere gerade ein kleines Paintprogramm.
Im Buch steht, man soll zum Programm die Funktion hinzufügen, dass man einen Kreis zeichnen kann, indem man ihn von seinem Mittelpunkt aufzieht.
Das heißt, wenn ich die Maustaste drücke, dann wird der Kreismittelpunkt gesetzt und wenn ich dann die Maus bewege wird der Radius und damit der Kreis immer größer.
Beim Loslassen der Maustaste wird der Kreis dann gezeichnet.

Wisst ihr, wie man einen Kreis vom Mittelpunkt zeichnet?

Gruß,
kex

hanselmansel 10. Dez 2005 18:50

Re: Minipaint - Kreis von Mittelpunkt aufziehen
 
HiHo und willkommen in der DP!

da du ja Literatur zur Hand haben scheinst, denke ich, dass dir der Gebrauch von einem Canvas geläufig sein sollte. Gucke dir diesbezüglich einmal die Methode Delphi-Referenz durchsuchenEllipse an. Nimm dir dann ein Stück Papier zur Hand, male dort auf, wo dein Zentrum ist, was du letztendlich erhalten möchtest und überlege dir dann anhand einer solchen Vorlage, wie du Zentrum und Endpunkt umrechnen kannst, um die Koordinaten zu erhalten, die Ellipse braucht, um deinen Kreis zu zeichnen. :thumb:

MfG,

hanselmansel

co0kie 12. Dez 2005 19:14

Re: Minipaint - Kreis von Mittelpunkt aufziehen
 
Zitat:

Zitat von hanselmansel
HiHo und willkommen in der DP!

da du ja Literatur zur Hand haben scheinst, denke ich, dass dir der Gebrauch von einem Canvas geläufig sein sollte. Gucke dir diesbezüglich einmal die Methode Delphi-Referenz durchsuchenEllipse an. Nimm dir dann ein Stück Papier zur Hand, male dort auf, wo dein Zentrum ist, was du letztendlich erhalten möchtest und überlege dir dann anhand einer solchen Vorlage, wie du Zentrum und Endpunkt umrechnen kannst, um die Koordinaten zu erhalten, die Ellipse braucht, um deinen Kreis zu zeichnen. :thumb:

MfG,

hanselmansel

Vielen Dank, hanselmansel!

Leider hab ichs nicht hinbekommen.
Ich krieg einfach nicht raus, wie man den Mittelpunkt des Kreises rausbekommt und schon gar nicht, wie man um einen Punkt herum ein immer größer werdendes Quadrat ziehen kann.

Tut mir Leid, aber ich komm echt nicht mehr weiter!

Stanlay Hanks 12. Dez 2005 19:25

Re: Minipaint - Kreis von Mittelpunkt aufziehen
 
Moin. Für einen Kreis brauchst du 4 Punkte: Links oben/unten und rechts oben/unten. Wenn jemand auf das Image/Paintbox klickt, kannst du dir in einer Variablen den Punkt (wird im MouseDown in einer Variablen übergeben), auf den geklickt wurde, merken. Nun hast du deinen Mittelpunkt. Nun prüfst du im OnMouseMove Ereignis, ob sich die Maus bewegt und wie groß der absolute Abstand in x-Richtung zum Mittelpunkt (den du dir ja gemerkt hast) ist. Nun hast du auch den Radius des Kreises. Folglich hast du auch deine 4 Eckpunkte:

Links oben: (y_Mittelpunkt - Radius; x_Mittelpunkt - Radius)
Links unten: (y_Mittelpunkt + Radius; x_Mittelpunkt - Radius)
Rechts oben: (y_Mittelpunkt - Radius; x_Mittelpunkt + Radius)
Rechts unten: (y_Mittelpunkt + Radius; x_Mittelpunkt + Radius)

Ich hoffe, das hilft dir weiter.

Man liest sich, Stanlay :hi:

co0kie 12. Dez 2005 20:28

Re: Minipaint - Kreis von Mittelpunkt aufziehen
 
Das geht nicht.
Immer wenn ich was von den relativen Koordinaten abziehe oder was addiere funktioniert die "Gummilinie" nicht mehr!

Das ist mein Code:
Delphi-Quellcode:
  private
  mausgedrueckt: boolean;
    xa,xb,ya,yb: integer;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
mausgedrueckt := true;
xa := x;
ya := y;
xb := x;
yb := y;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin if mausgedrueckt then begin
canvas.Pen.Mode := pmnotxor;
canvas.ellipse(xa,ya,xb,yb);
canvas.ellipse(xa,ya,x,y);
xb := x;
yb := y;
So kann ich eine Gummiellipse zeichnen.
Was muss ich nun verändern, damit ich einen Gummikreis bekomme?
Also der abstand zwischen xa und x immer gleich dem Abstand zwischen ya und y entspricht.
danach kann man ja immer noch gucken, wie man das hinbekommt, dass es um den mittelpunkt gezogen wird

hanselmansel 12. Dez 2005 22:27

Re: Minipaint - Kreis von Mittelpunkt aufziehen
 
Delphi-Quellcode:
Var
  Center :TPoint;

...

procedure MouseDown;
begin
Center := Point(X,Y);
end;

procedure MouseUp;
Var
  aRect :TRect;
  radius :Integer;
begin
//raduius mittels pytagodingsda ausrechnen
aRect.Left := Center.X - distance;
aRect.Top := Center.Y - distance;
aRect.Right := Center.X + distance;
aRect.Bottom := Center.Y + distance;
Form1.Canvas.Ellipse(aRect);
end;
Was jedoch eine Gummilinie ist, musst du mir bei Zeiten und einem guten Bier ( :cheers: ) noch einmal erklären. :zwinker:

Gute Nacht,

hanselmansel

runger 13. Dez 2005 05:25

Re: Minipaint - Kreis von Mittelpunkt aufziehen
 
Hallo,

die Berechnung des Kreismittelpunkts ist einfach:

Seitelänge des Quadrats ( um den Kreis ) a
Punkt links unten P(x0,y0)
Auf canvas bezogen:
Pm(x0+(a div 2),y0-(a div 2))
das Minus im y Wert steht nur deshalb, weil die Null für die y Werte oben liegt und y positiv nach unten gezählt wird.

das Ganze hat absolut nichts mit dem Pythagoras zu tun ( 8. Klasse Hauptschule )

Die Hypotenuse zum Quadrat ist gleich die Summe der Kathetenquadrate

Rainer

hanselmansel 13. Dez 2005 14:07

Re: Minipaint - Kreis von Mittelpunkt aufziehen
 
:wall: Oh mann! Es geht doch nicht darum, von wo nach wo ein Canvas seine Pizel zählt.

Es geht einfach darum, dass die Distanz zwischen Anfangs- und Endpunkt (Kreismittelpunkt und ein Punkt auf der Kreislinie) berechnet wird :!: Und um diese Entfernung zu erhalten, muss man wohl oder übel die einzelnen Komponenten in X- bzw. Y-Richtung zusammenzählen. (mittels Pytagoras...) Cookie möchte am Ende ja Kreise und keine Ellipsen haben. Das heißt, es muss egal sein, in welche Richtung er die Maus vom Mittelpunkt aus bewegt, solange der Abstand konstant bleibt. :zwinker:

MfG,

hanselmansel

co0kie 13. Dez 2005 15:56

Re: Minipaint - Kreis von Mittelpunkt aufziehen
 
Sorry, aber irgendwie klappt das alles nicht.
Wenn ich deinen Code nehmen, hanselmansel, dann meckert er an der Stelle
aRect.Left := Center.X - distance;

Und wie kann man in Delphi Wurzeln und Quadrate berechnen?

AmY 13. Dez 2005 15:59

Re: Minipaint - Kreis von Mittelpunkt aufziehen
 
unit math
und power(x,y) ~ x^y
sqrt(x) ~ wurzel(x)
sqr(x) ~ x*x


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:17 Uhr.
Seite 1 von 4  1 23     Letzte »    

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