eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming4ry wierzchołki (głupi problem) › Re: 4ry wierzchołki (głupi problem)
  • Path: news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
    From: " M.M." <m...@W...gazeta.pl>
    Newsgroups: pl.comp.programming
    Subject: Re: 4ry wierzchołki (głupi problem)
    Date: Sun, 8 Apr 2012 08:19:10 +0000 (UTC)
    Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
    Lines: 99
    Message-ID: <jlrhlu$ia4$1@inews.gazeta.pl>
    References: <jlnf9t$ip5$1@inews.gazeta.pl> <jlnlen$1d2$1@inews.gazeta.pl>
    <jlol4d$h1d$1@inews.gazeta.pl>
    <4f808add$0$26707$65785112@news.neostrada.pl>
    <jlqhf7$9i8$1@inews.gazeta.pl> <jlrcgb$360$1@inews.gazeta.pl>
    NNTP-Posting-Host: localhost
    Content-Type: text/plain; charset=ISO-8859-2
    Content-Transfer-Encoding: 8bit
    X-Trace: inews.gazeta.pl 1333873150 18756 172.20.26.243 (8 Apr 2012 08:19:10 GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Sun, 8 Apr 2012 08:19:10 +0000 (UTC)
    X-User: mariotti
    X-Forwarded-For: 89.229.34.123
    X-Remote-IP: localhost
    Xref: news-archive.icm.edu.pl pl.comp.programming:196668
    [ ukryj nagłówki ]

    <f...@W...gazeta.pl> napisał(a):

    > M.M. <m...@W...gazeta.pl> napisał(a):
    >
    > > slawek <s...@h...pl> napisał(a):
    > >
    > > >
    > > > Użytkownik <f...@W...gazeta.pl> napisał w wiadomości grup
    > > > dyskusyjnych:jlol4d$h1d$...@i...gazeta.pl...
    > > > > M.M. <m...@W...gazeta.pl> napisał(a):
    > > > >
    > > > >> <f...@g...SKASUJ-TO.pl> napisał(a):
    > > > >>
    > > > >> > mam cztery wierzcholki prostokata
    > > > >> >
    > > > >> > int Ax, Ay, Bx, By, Cx, Cy, Dx, Dy;
    > > > >> >
    > > > >> > ktore maja przypisane wartosci, potrzebuje te
    > > > >> > wartosci przwpisac do
    > > > >> >
    > > > >> > int upX, upY, downX, downY, leftX, leftY, rightX, rightY;
    > > > >> >
    > > > >> > zgodnie z nazwami tj ten najbardziej z lewej do leftX leftY
    > > > >> > itp, jak to zrobic w prosty sposob?
    > > > >>
    > > > >> Funkcje min i max będą przydatne.
    > > > >
    > > > > to by bylo chyba za dlugie, chyba moge to zrobic sprawdzajac
    > > > > w jakiej cwiartce jest wektor B-A (mozna zalozyc ze ABCD sa
    > > > > uporzadkowane np prawoskretnie wiec chyba powinno byc ok)
    > > >
    > > > Posortować oddzielnie (Ax, Bx, Cx, Dx) i (Ay, By, Cy, Dy).
    > > >
    > > > Lewe są te z najmniejszymi x-sami, górne te z najmniejszymi
    > (największymi?
    > > > zależy od przyjętego układu współrzędnych) y-kami.
    > > >
    > > > Trochę logiki i powinno działać.
    > > >
    > > > Funkcje min i max nie będą (chyba) szybsze niż if-else .
    > > >
    > > > Najogólniej? Są 24 przypadki, wystarczy "zajarzyć" który z nich i już
    > jest
    > > > prosto.
    > >
    > > Jeśli to ma być szybko, to bez ifów i z wykorzystaniem specyficznych cech
    > > danych wejściowych. Jeśli zmienne są nazywane leftX i leftY to rozumiem,
    > > że chodzi tylko o takie kwadraty które da się opisać czterema liczbami:
    > > dwie współrzędne lewego górnego rogu i dwie prawego dolnego. Do wyświetlania
    > > na monitorze w zupełności wystarczy 16 bitów, daje to sporą rozdzielczość
    > > 65tys na 65tys punktów logicznych czy tam fizycznych. Czyli apropo
    > > struktury danych mamy cztery liczby upakowane do jednej 64 bitowej,
    > najlepiej
    > > jakby ona znalazła się w rejestrze.
    > >
    > > Mamy cztery dane wejściowe:
    > > Ax, Ay, Bx, By, Cx, Cy, Dx, Dy
    > > Być może to już jest błędem, może algorytm wypluwający te dane da się
    > > tak przebudować, aby dawał tylko 4 liczby, gdyż każda współrzędna dla
    > > prostokąta obróconego o wielokrotność 90 stopni występuje dwa razy. Jeśli
    > > się da algorytm wypluwający przebudować, to wystarczy porównać dwie
    > > liczby if( a < b ) szesnastobitowe utworzone odpowiednio z bitów 0-15 i
    > > 32-47. W przypadku gdy współrzędne są podawane tak jak zwykle, czyli
    > > najpierw x a potem y, to w przypadku gdy a < b wiemy że lewy górny punkt
    > > jest zakodowany w bitach 0-31, prawy dolny w bitach 32-64 i nic nie musimy
    > > zmieniać. W przypadku gdy a > b to musimy zamienić 32 bity młodsze ze
    > starszymi
    > > .
    > >
    > > Mniej/więcej coś takiego:
    > > uint64 swp_corners( uint64 input ) {
    > > const uint32 tmp = ( ( input & x_corner_1 ) >> offset_x1 ) < ( ( input &
    > > x_corner_2 ) >> offset_x2 );
    > > return (input>>(32*tmp))|(input<<(32*tmp));
    > > }
    > >
    > > Można pomyśleć jeszcze jak w tmp uzyskać jedynkę gdy wynik porównywania
    > > jest prawdziwy i zero gdy jest nieprawdziwy w sposób niewymagający użycia
    > > operatora mniejszości. Tak żeby kompilator nie wstawiał instrukcji
    > > jum_if_less.
    > >
    >
    > nienie chodzi mi o cos innego
    >
    >
    > a b c d to wierzcholki przekrzywionego (obroconego o kat alfa)
    > prostokata, mozna tez zalozyc ze sa uporzadkowane np prawoskretnie

    Jeśli chcesz tak super optymalizować to może zapamiętaj je inaczej?
    Wystarczy pięć liczb: szerokość, wysokość, (x,y) środka i kąt obrotu?
    9 bitów na kąt obrotu, to zostaje 64-9=55. 55 podzielić przez cztery
    pozostałe dane daje ponad 13 bitów, czyli w rozdzielczości 8tys na 8tys
    zadziała :)
    Pozdrawiam



    --
    Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/

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: