Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > pl.comp.programming > #29484

Re: nastepny punkt

From bartekltg <bartekltg@gmail.com>
Newsgroups pl.comp.programming
Subject Re: nastepny punkt
Date 2017-03-13 12:38 +0100
Organization ATMAN - ATM S.A.
Message-ID <oa60b6$o6j$1@node2.news.atman.pl> (permalink)
References <019867e5-f245-4dc1-9cbf-af33b0d5ddb3@googlegroups.com> <oa4g7g$b9j$1@node2.news.atman.pl> <b89892ea-1a34-46c1-ab03-bd05d2f719f8@googlegroups.com> <20f5253f-17ed-4b76-8111-78b7c22f0ae0@googlegroups.com> <c3343b87-c942-4a1c-8116-8f437f638844@googlegroups.com>

Show all headers | View raw


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

Back to pl.comp.programming | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

nastepny punkt fir <profesor.fir@gmail.com> - 2017-03-12 14:46 -0700
  Re: nastepny punkt bartekltg <bartekltg@gmail.com> - 2017-03-12 22:57 +0100
    Re: nastepny punkt fir <profesor.fir@gmail.com> - 2017-03-12 15:23 -0700
      Re: nastepny punkt fir <profesor.fir@gmail.com> - 2017-03-12 15:47 -0700
        Re: nastepny punkt fir <profesor.fir@gmail.com> - 2017-03-12 17:15 -0700
          Re: nastepny punkt bartekltg <bartekltg@gmail.com> - 2017-03-13 12:38 +0100
            Re: nastepny punkt fir <profesor.fir@gmail.com> - 2017-03-13 07:46 -0700
              Re: nastepny punkt fir <profesor.fir@gmail.com> - 2017-03-13 09:09 -0700
                Re: nastepny punkt fir <profesor.fir@gmail.com> - 2017-03-13 09:50 -0700
              Re: nastepny punkt bartekltg <bartekltg@gmail.com> - 2017-03-13 18:10 +0100
                Re: nastepny punkt fir <profesor.fir@gmail.com> - 2017-03-13 11:16 -0700
                Re: nastepny punkt bartekltg <bartekltg@gmail.com> - 2017-03-13 20:30 +0100
                Re: nastepny punkt fir <profesor.fir@gmail.com> - 2017-03-13 12:42 -0700
                Re: nastepny punkt bartekltg <bartekltg@gmail.com> - 2017-03-13 22:29 +0100
                Re: nastepny punkt fir <profesor.fir@gmail.com> - 2017-03-13 14:53 -0700
                Re: nastepny punkt fir <profesor.fir@gmail.com> - 2017-03-15 08:08 -0700
                Re: nastepny punkt gof@somewhere.invalid (Adam Wysocki) - 2017-03-14 13:24 +0000

csiph-web