eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingcircle midpoint + windowing › Re: circle midpoint + windowing
  • Data: 2013-06-28 11:57:30
    Temat: Re: circle midpoint + windowing
    Od: Radoslaw Jocz <r...@g...com> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    >
    > Pisałeś zdaje się, że nie możesz używać putpixel. Co się zmieniło?
    >
    >
    > Co do zasadniczego pytania: przemnóż d przez 4, żeby nie było ułamka.
    >
    > Przez 4 też musisz przemnożyć czynniki wpływające na d.
    >
    >
    >
    > Pozwolę sobie dać linka do mojego art., gdzie ten temat już przerabiałem:
    >
    > http://0x80.pl/articles/bresenham.html#rasteryzacja-
    okregu
    >

    Putpixela nie ma w Javie SE i Androidzie ale mozna rysowac krotkie odcinki,
    lub jesli juz konieczny jest putpixel to moga byc prostakoty o bokach = 1
    Jednak w celu optymalizacji mozna wspolrzedne odcinkow dac do tablicy i wywolac za 1
    razem. W SE i Andr. sa do tego funkcje (w graphics i canvas).

    Co do przemnozenia przez 4 to nie jest to konieczne bo mozna uzyc podstawienia
    h = d - 1/4 a porownanie z 1/4 mozna sprowadzic i tak do 0 bo to liczby calkowite.
    Mam kilka artykulow na temat midpoina w niektorych omawiaja drobne optymalizacje
    polegajace na: uproszczeniu floatow do intow, redukcji wyrazen aby uniknac omnozenia
    i tylko dodawac.

    Jednak moze pytanie bylo na temat jak zainicjowac zmienne aby rysowac od dowolnego
    punktu na okregu P(0, r) to wszyscy omawiaja.

    Zauwazylem ze zmienna decyzyjna d to jest poprostu zmienna opisujaca rownanie okregu.
    I mozna ja pezposrednio dowolnie zainiacjowac na poczatku majac obliczony punkt
    startowy.
    Poczatkowo nie bylem pewien jak bezposredno zainicjowac zmienna d od innego punktu
    niz P(0, r), dlatego ze w petli do uzyskania kolejnej wartosci d uzywa sie wartosci
    poprzedniej.

    W niektorych artykulach jest opisane to bardziej zrozumiale, bez niepotrzebnych
    skrotow. Wiec,
    d = f(x,y) = x^2 + y^2 - r^2

    Jednak nigdzie nie widzialem takiego przykladu aby zainicjowac d od innego punktu niz
    (0, r), czy od (1, r - 1/2).

    W celu optymalizacji rysowania w Javie chce rysowac krotkie odcinki.
    Nie musze przechowywac w pamieci kazdego punktu.
    Nie jestem jednak pewien czy inicjowanie duzych tablic ktore przechowuja punkty
    odcinkow jest dobrym rozwiazaniem bo wtedy obciaza to pamiec.

    Zalezy mi na tym aby przy dowolnym powiekszeniu abstrakcyjnego ukladu wspolrzednych
    poprawnie wyswietloac okregi.
    Widze ze standardowe bibliteki w Javie (ale pewnie nie tylko) maja bugi ktore
    uniemozliwiaja poprawne rysowanie okregow o duzym promieniu.

    public abstract void drawOval(int x,
    int y,
    int width,
    int height)

    public abstract void drawArc(int x,
    int y,
    int width,
    int height,
    int startAngle,
    int arcAngle)

    inty uniemozliwiaja podania okregu o duzym promieniu o srodku daleko od okna ekranu

    public void drawCircle(float cx, float cy, float radius, Paint paint)

    W Androidzie niby jest juz lepiej ale i tak implementacja algorytmu jest kiepska
    co powoduje niedokladnosci przy duzym promieniu, co wynika prawdopodobnie z
    przepelnienia intow.

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: