Guten Tag,
Ziel: Prozedure erstellen, die:
mit folgenden Parametern: Kreismittelpunkt (M), Radius (r), Canvas (BC)
folgendes tut:
- auf ein jetziges Canvas (z.B. Bitmap.Canvas woebei auf der bitmap ein sich bewegendes bild ist) den Umriss eines Kreises zeichnet...
- schneller als 5ms ist (bei einer Berechnung von einem radius bis zu 300 (pixeln))
Bis jetzt ist es meistens am 2ten gescheitert....
Folgendes habe ich ausprobiert:
Zuerst: normaler Kreis mit "durchsichtiger"/"weißer" farbe gefüllt und farbigen rand...
Problem: bei weißer mitte: bitmap im kreis überzeichnet bei durchsictiger mitte: mitübergebene canvas fehlte ebenfalls in dem kreis.. in dem kreis war mein desktophintergrund zu sehen
Danach: (siehe
de.wikipedia.org/wik...oordinatengleichung)
2 Forschleifen,wobei die eine von m.x-r bis m.x+r und die andere (in der erstn) von m.y-r bis m.y+r geht... danach der entsprechende die strecke (Sr) von punkt (a|b) (a = durchlaufsvariable aus der ersten for-schleife (x-koordinate) (b= durchlaufsvariable aus der zweiten for-schleife (y-koordinate) zum mittelpunkt mit dem satz des pytagoras berechnet wird und wenn Sr = r dann wird der pixel an dem punkt (a|b) gezeichnet. .. (also viereck pixel für pixel durchgehen und berechnen ob der pixel die entfernung des pixels zum mittelpunkt = der radius ist)
Problem: dauert zu lang... klappt aber einwandfrei
Danach: (siehe
de.wikipedia.org/wik...3.A4ndiger_Oktanten)
Berechnung nach dem Ansatz nach der Methode von Horn.. (8 punkte berechnen (obem mitte, unten mitte, mitte rechts, links mitte und entsprechend wenn man r in 2 gleichlange seiten unterteilt (r^2 =sx^2+sy^2))
Problem: Es sind nur 8 Punkte , also ein 8 Eck... bei größeren radien (ab 100) sehr ungenau/unübersichtlich (starke abweichungen) wenn man geraden zwischen den punkten zieht
ERgänzung:
danach habe ich die Methode von Horn weiter verfolgt..
Horn hat nun diese 8 Punkte rotieren lassen (siehe "Kreisvariante des Algorithmus" (im link)) mit einer while schleife....
Problem: ich habe das Beispiel nicht ganz verstanden und damit falsch ungesetzt...
Letzter Versuch:
Punktberechnung und mit sinus den punkt, wie an einer schnur, um den mittelpunkt kreisen lassen...
Teilproblem: Mal hats mit dem 5 ms geklappt mal nicht... Sinus und Cosinus sind in Delphi sehr langsam in der Berechnung...
Könnt ihr mir bei der Methode von Horn oder bei meinem letzten Ansatz helfen?
Freue mich auf Ideenreiche antworten
Moderiert von Narses: Topic aus Sonstiges (Delphi) verschoben am Mo 28.01.2013 um 22:41