Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   alle Integerkoordinaten eines Kreises (https://www.delphipraxis.net/144996-alle-integerkoordinaten-eines-kreises.html)

Delphi-Narr 21. Dez 2009 19:08


alle Integerkoordinaten eines Kreises
 
Hallo, ich suche nach einer Schleife, die alle Integerkoordinaten eines Kreises in einem Shape ausspuckt, wenn man ihr die Left, Top, Width und Heigthwerte des Shapes gibt.
Hab leider keine Ahnung, wie ich das angehen soll, da ich in Mathematik so erwas noch nicht gemacht habe...

Liebe Grüße!

mkinzler 21. Dez 2009 19:14

Re: alle Integerkoordinaten eines Kreises
 
0<i<2*Pi
X-Koordinate: sin(i)*r
y-koordinate: cos(i)*r

Delphi-Laie 21. Dez 2009 19:24

Re: alle Integerkoordinaten eines Kreises
 
Zitat:

Zitat von mkinzler
0<i<2*Pi
X-Koordinate: sin(i)*r
y-koordinate: cos(i)*r

Oben wurden aber Integerkoordinaten erbeten.

Wegen der Transzendenz der Winkelfunktionen gibt es aber kaum welche. Auf Anhieb fallen mir nur der Mittelpunkt und die vier Punkte "oben", "unten", "links" und "rechts" ein. Dann gibt es noch ganz wenige Punkte, die bei "integrem" Winkel wenigstens eine rationale (gute Voraussetzung für integre) Koordinate haben: sin 30°=cos 60°=0,5 (analog die an 90° gespiegelten Winkel sowie alle negativen Pendants).

Also wird man sich mit Rundung (Funktion "round") behelfen müssen.

alzaimar 21. Dez 2009 19:38

Re: alle Integerkoordinaten eines Kreises
 
Eventuell könnte der Bresenham-Algorithmus gemeint sein.

Phoenix 21. Dez 2009 19:38

Re: alle Integerkoordinaten eines Kreises
 
Such mal nach dem Bresenham-Algorithmus. Der ist genau das, was Du willst.

Edith sagt: Zu langsam :cry:

Delphi-Narr 21. Dez 2009 20:14

Re: alle Integerkoordinaten eines Kreises
 
Also wenn ich das jetzt richtig verstanden habe, dann muss das so gemacht werden:

Shape: Alle Werte = 100

Delphi-Quellcode:
var
SL:TStringlist;

...


while 0<i<2*pi do
  begin
       SL.Add(IntToStr(round(sin(i))));
       SL.Add(IntToStr(round(cos(i))));
  end;

Stimmt das so. Wenn die Werte nur ungefähr sind, reicht das völlig aus.
Ich aber wirklich ALLE Punkte, die IM Kreis liegen, also auch Mittelpunkt, Mittelpunkt -1 etc...
Wird dies durch diese Schleife erreicht?

Medium 21. Dez 2009 20:21

Re: alle Integerkoordinaten eines Kreises
 
Dann hättest du anders fragen müssen, weil die Punkte im Kreis gehören nicht zum Kreis! In dem Fall langt es einfach jeden möglichen Pixel auf seinen Abstand zum Mittelpunkt hin zu überprüfen. Ist der > Width bzw. Height (welche ja gleich sein sollten, sonst ist's eine Ellipse), gehört der Pixel nicht zur Kreisfläche. Kreismittelpunkt sollte ja kein Problem darstellen, und der Vektor von einem Pixel p0 zum Mittelpunkt M ist einfach (M-p0). Davon die Länge, und du bist fast fertig.

Delphi-Narr 21. Dez 2009 20:45

Re: alle Integerkoordinaten eines Kreises
 
Ja gut, also ich hab mich unverständlich ausgedrückt...
Ich muss nicht die Koordinaten haben, sondern möchte nur wissen, ob bestimmte Koordinaten X Y im Kreis liegen. Das ginge bestimmt auch nur mit den Umfangskoordinaten.

mkinzler 21. Dez 2009 20:53

Re: alle Integerkoordinaten eines Kreises
 
http://www.delphipraxis.net/internal...t.php?t=148748

Delphi-Narr 21. Dez 2009 21:33

Re: alle Integerkoordinaten eines Kreises
 
Da blick ich nicht so ganz durch...
Da diese Kreise unvorhersehbar auch nicht-integer Radien haben, klappt das doch nicht, oder?


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