eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingnastepny punkt › Re: nastepny punkt
  • Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
    atman.pl!.POSTED!not-for-mail
    From: bartekltg <b...@g...com>
    Newsgroups: pl.comp.programming
    Subject: Re: nastepny punkt
    Date: Mon, 13 Mar 2017 12:38:12 +0100
    Organization: ATMAN - ATM S.A.
    Lines: 102
    Message-ID: <oa60b6$o6j$1@node2.news.atman.pl>
    References: <0...@g...com>
    <oa4g7g$b9j$1@node2.news.atman.pl>
    <b...@g...com>
    <2...@g...com>
    <c...@g...com>
    NNTP-Posting-Host: 89-70-119-159.dynamic.chello.pl
    Mime-Version: 1.0
    Content-Type: text/plain; charset=utf-8; format=flowed
    Content-Transfer-Encoding: 8bit
    X-Trace: node2.news.atman.pl 1489405094 24787 89.70.119.159 (13 Mar 2017 11:38:14
    GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Mon, 13 Mar 2017 11:38:14 +0000 (UTC)
    User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101
    Thunderbird/45.7.0
    In-Reply-To: <c...@g...com>
    Xref: news-archive.icm.edu.pl pl.comp.programming:210312
    [ ukryj nagłówki ]

    On 13.03.2017 01:15, fir wrote:
    > W dniu niedziela, 12 marca 2017 23:47:04 UTC+1 użytkownik fir napisał:
    >> W dniu niedziela, 12 marca 2017 23:23:35 UTC+1 użytkownik fir napisał:
    >>> W dniu niedziela, 12 marca 2017 22:57:05 UTC+1 użytkownik bartekltg napisał:
    >>>> On 12.03.2017 22:46, fir wrote:
    >>>>> szukam dosyc prostego algorytmu
    >>>>>
    >>>>> mam punkt int x,y np 0,0
    >>>>> i chce znalezc nastepny punkt
    >>>>> w kierunku jakiegos dowolnego punktu
    >>>>> int dist_x, dist_y, tak jak gdybym
    >>>>> rysowal linie prostą
    >>>>>
    >>>>> jak wzynaczyc ten przylegly punkt?
    >>>>>
    >>>>
    >>>> Algorytm Bresenhama
    >>>>
    >>> raczej fragment bressenhama ale jaki

    Z testów wygląda, że całego.



    >>
    >> w sumie to chyba bedzie cos takiego
    >>
    >> int2 NextPointTowards(int x, int y, int dest_x, int dest_y)
    >> {
    >> int2 n = {x, y};
    >>
    >> int dx = dest_x - x;
    >> int dy = dest_y - y;
    >>
    >> int sx = sign(dx);
    >> int sy = sign(dy);
    >>
    >> if(sx==0) n.y += sy;
    >> else if(sy==0) n.x += sx;
    >> else
    >> {
    >> float m = fabs(((float)dy)/dx);

    a to da się zrobić bez floatów. Choćby tak:
    if ( 2*abs(dx) < abs(dy) )...
    else if ( abs(dx) > 2*abs(dy) )...

    >>
    >> if( m < 0.5) n.x += sx;
    >> else if( m > 2.0) n.y += sy;
    >> else { n.x += sx; n.y += sy; }
    >> }
    >>
    >> return n;
    >>
    >> }
    >>
    >> mozna by wywalic dzielenie zastepujac ifem ale nie wiedomo czy if szybszy
    >>
    >> pozatym w dzialaniu to chyba nie zastpi bresenhama (trzebby sprawdzic) choc mw o
    to mi chodzi bo taka procedura jest jaby bardziej ogolna
    >
    > zrobilem testy i okazalo sie ze to nie dziala dobrze

    >
    > http://minddetonator.htw.pl/compact.jpg
    >
    > gorna linia to normalne a dolna dolna linia to wynik generowania tych punktow
    > wyzej

    Nic dziwnego. Ten kod pozwala na wybór jednego z 8 kierunków.
    Będzie używał 2 kierunków na zmianę tylko wtedy, gdy jest na ich
    granicy.
    Efektywnie będzie wiec tworzył proste jedynie w 16 różnych kierunkach.

    Aby temu zapobiec, trzeba albo pamiętać linię, po której się porusza
    (skomplikowane, niepotrebne i, a do tego jak się domyślam, że śledzony
    punkt się porusza:) )
    albo pamiętać ułamkową pozycję i robić ideowo jak u Bresenhama.


    I teraz pytanie, co tak naprawdę robisz.

    Jeśli rysujesz linię,
    - Użyj Bresenhama.
    - Twoja biblioteka graficzna nie ma rysowania linii? Muis mieć. Niech
    ona to zrobi, wtedy karta graficzna narysuje linię, nie procek;-)

    Jeśli jets to ludzik goniący za być możę ruchomym punktem,
    idea jest ta sama (błąd-korekcja) - ludzik ma pozycję znaną
    dokałdniej niż 'ten piksel'. Nie da się sprowadzić do wspolnego
    mianownika jak dla stałej linii, więc albo float (najwygdniej) albo
    'stały przecinek', czyli np pozycja z to int z dokłądnosćią do 1/1024
    piksela.

    BTW, jesli to ludzik i pogoń, to tak, jak to opisałeś, ma jeszcze jedną
    wadę. Ruch pionowy i poziomy jest wolniejszy niż po przekątnych
    o sqrt(2).

    pzdr
    bartekltg


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: