Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > pl.comp.programming > #29484
| 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> |
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
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