Hallo Gibt es eine (schnelle) Funktion, mit der man Kreissegmente zwischen zwei Winkeln zeichnen kann, ohne dabei sin/cos zu verwenden? Ähnlich wie man mit Algorithmen nach Bresenham ganze Kreise zeichnet?
Wenn ich nach Bresenham gugele, finde ich auch Referenzen auf Kreis- und Ellipsen-Funktionen.
Bresenham macht soweit ich weiß nur 45 Grad Segmente, den Rest muß man mit Symmetrie erreichen
Ich hab sowas recht aufwendig im Rahmen meiner Diplomarbeit gemacht. Fertige Routinen oder Algorithmen, die wirklich beliebige Kreissegmente zeichnen und auch füllen, habe ich leider nicht im Netz gefunden. Mein Ansatz ist, mit Tabellen für den Kreisbogen und der Kreissekante zu arbeiten. Dabei sind einige kniffelige Spezialfälle zu beachten. Wenn man nicht füllen möchte, ist es zwar etwas einfacher, aber auch da fand ich persönlich Tabellen recht flott und nützlich. Und man braucht tatsächlich keinen Sinus und Cosinus dafür. Man rechne ein Achtel Kreis nach Bresenham aus, spiegele diesen auf ein Viertel, beachte hierbei das 45° Problem, spiegele dieses Ganze auf die Hälfte und dann auf den vollen Kreis. Das geht ziemlich schnell. Und die Sekanten-Schnittpunkte kann man sich dann durch Umrechnung von 360° auf die Anzahl der tatsächlichen Bogenpunkte leicht errechnen. Am Ende zeichnet man alle Bogenpunkte des Segments von Start bis Ende und die dazugehörige Sekante. Fertig. Natürlich kann man jetzt einwenden, dass diese Vorgehensweise zuviel Speicher verbraucht und recht unalgorithmisch ist, aber ich hatte an meinen AT90CAN128 512KB SRAM extern drangepackt und diesen kaum genutzt. In der Nachbetrachtung wäre es auch mit den internen 4KB gegangen, aber meine Arbeit leistet ja noch einiges mehr.
Zu Urzeiten der Homecomputer habe ich mal einen schnellen Algorithmus gesehen, der das irgendwie mit komplexen Zahlen realisiert hat. Wenn ich recht erinnere, entspricht eine Multiplikation mit einer bestimmten komplexen Zahl (vom Betrag eins) einem Drehoperator um einen festen Winkel. Kann man komponentenweise mit Festkomma ausrechnen.
Man könnte ja vieleicht auch sin mit einer Tayler Reihe abbilden von 3 Gliedern vieleicht geht das schneller?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.