eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingnastepny punkt › Re: nastepny punkt
  • X-Received: by 10.157.44.219 with SMTP id e27mr3133267otd.5.1489416387757; Mon, 13
    Mar 2017 07:46:27 -0700 (PDT)
    X-Received: by 10.157.44.219 with SMTP id e27mr3133267otd.5.1489416387757; Mon, 13
    Mar 2017 07:46:27 -0700 (PDT)
    Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!news.glorb.com!
    u69no2865455ita.0!news-out.google.com!78ni13237itm.0!nntp.google.com!w124no2868
    968itb.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
    Newsgroups: pl.comp.programming
    Date: Mon, 13 Mar 2017 07:46:27 -0700 (PDT)
    In-Reply-To: <oa60b6$o6j$1@node2.news.atman.pl>
    Complaints-To: g...@g...com
    Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=5.172.255.227;
    posting-account=Sb6m8goAAABbWsBL7gouk3bfLsuxwMgN
    NNTP-Posting-Host: 5.172.255.227
    References: <0...@g...com>
    <oa4g7g$b9j$1@node2.news.atman.pl>
    <b...@g...com>
    <2...@g...com>
    <c...@g...com>
    <oa60b6$o6j$1@node2.news.atman.pl>
    User-Agent: G2/1.0
    MIME-Version: 1.0
    Message-ID: <3...@g...com>
    Subject: Re: nastepny punkt
    From: fir <p...@g...com>
    Injection-Date: Mon, 13 Mar 2017 14:46:27 +0000
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: quoted-printable
    Xref: news-archive.icm.edu.pl pl.comp.programming:210314
    [ ukryj nagłówki ]

    W dniu poniedziałek, 13 marca 2017 12:38:15 UTC+1 użytkownik bartekltg napisał:
    > 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.
    >

    chyba sluszna uwaga raczej nie przemyslalem tego

    > 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.
    >

    a masz jakis matematyczny/logiczny dowód
    ze tego sie nie da zrobic?

    dla mnie nie jest to takie pewne (nie mam zdania)

    tego co uzywam raczej uzywalbym do rysowania lini - taka forma jest bardziej 'ogolna'
    np latwo z tego zrobic rysowanie lini przerywanej, w dwu kolorach -- no i mozna tez
    uogolnic na nielinie (ale przypadek o ktory pytam to rysowanie lini)

    moge przerobic na floaty ale troche szkoda ze nie kojarze poprawnej wersji
    na intach - ew mozna kombinowac z zapamietywaniem tego subpixelowego przesuniecia
    jako wewnetrznej zmiennej statycznej - temat niby prosty a wymaga troche przemyslania



    > 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: