AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Minipaint - Kreis von Mittelpunkt aufziehen
Thema durchsuchen
Ansicht
Themen-Optionen

Minipaint - Kreis von Mittelpunkt aufziehen

Offene Frage von "co0kie"
Ein Thema von co0kie · begonnen am 10. Dez 2005 · letzter Beitrag vom 11. Feb 2008
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
co0kie

Registriert seit: 10. Dez 2005
6 Beiträge
 
#1

Minipaint - Kreis von Mittelpunkt aufziehen

  Alt 10. Dez 2005, 19:36
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
  Mit Zitat antworten Zitat
Benutzerbild von hanselmansel
hanselmansel

Registriert seit: 23. Feb 2005
Ort: Kaiserslautern
279 Beiträge
 
Delphi 2009 Enterprise
 
#2

Re: Minipaint - Kreis von Mittelpunkt aufziehen

  Alt 10. Dez 2005, 19:50
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.

MfG,

hanselmansel
Es gibt nur sehr wenige Probleme auf dieser Welt, die sich nicht mit einigen hundert Gramm Sprengstoff lösen ließen.
  Mit Zitat antworten Zitat
co0kie

Registriert seit: 10. Dez 2005
6 Beiträge
 
#3

Re: Minipaint - Kreis von Mittelpunkt aufziehen

  Alt 12. Dez 2005, 20:14
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.

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!
  Mit Zitat antworten Zitat
Benutzerbild von Stanlay Hanks
Stanlay Hanks

Registriert seit: 1. Mär 2003
2.078 Beiträge
 
Delphi 2005 Professional
 
#4

Re: Minipaint - Kreis von Mittelpunkt aufziehen

  Alt 12. Dez 2005, 20:25
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
  Mit Zitat antworten Zitat
co0kie

Registriert seit: 10. Dez 2005
6 Beiträge
 
#5

Re: Minipaint - Kreis von Mittelpunkt aufziehen

  Alt 12. Dez 2005, 21:28
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
  Mit Zitat antworten Zitat
Benutzerbild von hanselmansel
hanselmansel

Registriert seit: 23. Feb 2005
Ort: Kaiserslautern
279 Beiträge
 
Delphi 2009 Enterprise
 
#6

Re: Minipaint - Kreis von Mittelpunkt aufziehen

  Alt 12. Dez 2005, 23:27
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 ( ) noch einmal erklären.

Gute Nacht,

hanselmansel
Es gibt nur sehr wenige Probleme auf dieser Welt, die sich nicht mit einigen hundert Gramm Sprengstoff lösen ließen.
  Mit Zitat antworten Zitat
runger
(Gast)

n/a Beiträge
 
#7

Re: Minipaint - Kreis von Mittelpunkt aufziehen

  Alt 13. Dez 2005, 06:25
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
  Mit Zitat antworten Zitat
Benutzerbild von hanselmansel
hanselmansel

Registriert seit: 23. Feb 2005
Ort: Kaiserslautern
279 Beiträge
 
Delphi 2009 Enterprise
 
#8

Re: Minipaint - Kreis von Mittelpunkt aufziehen

  Alt 13. Dez 2005, 15:07
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.

MfG,

hanselmansel
Es gibt nur sehr wenige Probleme auf dieser Welt, die sich nicht mit einigen hundert Gramm Sprengstoff lösen ließen.
  Mit Zitat antworten Zitat
co0kie

Registriert seit: 10. Dez 2005
6 Beiträge
 
#9

Re: Minipaint - Kreis von Mittelpunkt aufziehen

  Alt 13. Dez 2005, 16:56
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?
  Mit Zitat antworten Zitat
AmY

Registriert seit: 27. Jan 2005
21 Beiträge
 
#10

Re: Minipaint - Kreis von Mittelpunkt aufziehen

  Alt 13. Dez 2005, 16:59
unit math
und power(x,y) ~ x^y
sqrt(x) ~ wurzel(x)
sqr(x) ~ x*x
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 06:22 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