Przy jednym z projektów postanowiłem wykorzystać algorytm Bresenhama do rysowania elips. Niestety algorytm miał dla mnie jedną, poważną wadę - wykorzystanie punktu środkowego. Uniemożliwia to narysowanie elipsy o parzystej szerokości, bądź wysokości wyrażonej w pixelach. Jeśli ktoś ma pod ręką kartkę w kratkę, niech wskaże środek kwadratu o boku 16x16 kratek a zrozumie o co chodzi.
Potrzebowałem więc możliwości narysowania elipsy wpisanej w prostokąt o zadanych współrzędnych przeciwległych wierzchołków. Rozwiązanie okazało się stosunkowo prostym zabiegiem. Upraszczając - skoro środkiem kwadratu 16x16 są (bardzo umownie!) cztery punkty a nie jeden, należy dla każdego z nich jako środka, narysować odpowiednią część elipsy. Wystarczy zatem wprowadzenie dwóch zmiennych pomocniczych do algorytmu Bresenhama, które będą środek przesuwać jeśli szerokość lub wysokość parzysta, bądź - nie, jeśli nieparzysta.
Przykład kodu implementującego opisywany algorytm można pobrać stąd
Na koniec, jako ciekawostka, dla porównania przykład jak rysuje zmodyfikowany algorytm Bresenhama w porównaniu do funkcji ellipse z biblioteki systemowej Windows - gdi32.
© EKSoft. Wszelkie prawa zastrzeżone. | Design by TEMPLATED.
Ostatnia modyfikacja: