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: Sat, 7 Apr 2012 23:09:27 +0000 (UTC)
    Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
    Lines: 79
    Message-ID: <jlqhf7$9i8$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>
    NNTP-Posting-Host: localhost
    Content-Type: text/plain; charset=ISO-8859-2
    Content-Transfer-Encoding: 8bit
    X-Trace: inews.gazeta.pl 1333840167 9800 172.20.26.238 (7 Apr 2012 23:09:27 GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Sat, 7 Apr 2012 23:09:27 +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:196664
    [ ukryj nagłówki ]

    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.

    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: