Effizient alle Punkte innerhalb eines Kreises
-
Hallo, ich möchte Pixelwerte innerhalb von Kreisen auslesen.
Zur Zeit bilde ich mir ein Quadrat, das den Kreis umschließt, und prüfe für alle Pixel im Quadrat, ob diese im Kreis liegen.
Alternativ berechne ich ein Quadrat innerhalb des Kreises und weiß für alle Pixel im Quadrat, dass sie im Kreis liegen.Im ersten Fall überprüfe ich unnötig viele Pixel und im zweiten Fall verliere ich Pixel ...
Gibt es eine bessere Möglichkeit, alle relevanten Pixelkoordinaten an Hand der Mittelpunkte und Radien zu bestimmen?
-
abstand punkt zu mittelpunkt berechnen.
wenn der radius kleiner als der abstand ist. so liegt der punkt im kreis...
-
größer asbstand..
-
Brauchst nur am Rand langzulaufen.
Ich fange mal am Mittelpunkt an und laufe nach rechts bis zum letzten innerhalb liegenden Pixel.
Also bis dx=radius dy=0 mit immer x=mx+dx y=my+dy.
Und von da gehe ich um ein Pixel hoch ++dy. Und rücke gegebenenfalls nach links if(dx*dx+dy*dy>radius*radius) --dx;
Und ich muß nur einen Viertelkreis so machen, die anderen drei Viertel sind symmetrisch zum ersten und lassen sich mitmalen oder mitberechnen.
Oder gar nur einen Achtelkreis while(dx>=dy).