![]() |
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 |
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 ![]() MfG, hanselmansel |
Re: Minipaint - Kreis von Mittelpunkt aufziehen
Zitat:
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! |
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: |
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:
So kann ich eine Gummiellipse zeichnen.
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; 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 |
Re: Minipaint - Kreis von Mittelpunkt aufziehen
Delphi-Quellcode:
Was jedoch eine Gummilinie ist, musst du mir bei Zeiten und einem guten Bier ( :cheers: ) noch einmal erklären. :zwinker:
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; Gute Nacht, hanselmansel |
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 |
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 |
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? |
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 02:10 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