-
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
Następne wpisy z tego wątku
- 13.03.17 15:46 fir
- 13.03.17 17:09 fir
- 13.03.17 17:50 fir
- 13.03.17 18:10 bartekltg
- 13.03.17 19:16 fir
- 13.03.17 20:30 bartekltg
- 13.03.17 20:42 fir
- 13.03.17 22:29 bartekltg
- 13.03.17 22:53 fir
- 14.03.17 14:24 Adam Wysocki
- 15.03.17 16:08 fir
Najnowsze wątki z tej grupy
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
Najnowsze wątki
- 2024-12-03 Wróblewo => Analityk finansowy <=
- 2024-12-03 Praktyczny test GPS...
- 2024-12-02 Tak się sprzedają elektryczne woldzwageny ;-)
- 2024-12-02 Akumulator do Hyundai
- 2024-12-02 Olsztyn => Sales Specialist <=
- 2024-12-02 Poznań => Technical Artist <=
- 2024-12-02 Bieruń => Regionalny Kierownik Sprzedaży (OZE) <=
- 2024-12-02 Kraków => Business Development Manager - Dział Sieci i Bezpieczeńst
- 2024-12-02 Chrzanów => Team Lead / Tribe Lead FrontEnd <=
- 2024-12-02 Białystok => Delphi Programmer <=
- 2024-12-02 Poznań => Dyspozytor Międzynarodowy <=
- 2024-12-02 Szczecin => Key Account Manager (ERP) <=
- 2024-12-02 Poznań => Senior PHP Developer <=
- 2024-12-03 Usiłuję zapłacić za energetyzację...
- 2024-12-02 Gdańsk => Full Stack web developer (obszar .Net Core, Angular6+) <=