eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingkolizja prostokątówRe: kolizja prostokątów
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!nf1.ipartners.pl!ipartners.pl!news.sile
    man.pl!not-for-mail
    From: Kicer <...@...c>
    Newsgroups: pl.comp.programming
    Subject: Re: kolizja prostokątów
    Date: Thu, 22 Dec 2011 09:32:36 +0100
    Organization: Sileman news server
    Lines: 96
    Message-ID: <jcupv2$563$1@kushnir.sileman>
    References: <jcs40l$bt7$1@kushnir.sileman> <jcs55a$o1h$2@inews.gazeta.pl>
    <jcti3f$p89$1@kushnir.sileman> <s...@j...net>
    NNTP-Posting-Host: host-5db0eeee.sileman.net.pl
    Mime-Version: 1.0
    Content-Type: text/plain; charset="ISO-8859-2"
    Content-Transfer-Encoding: 8Bit
    X-Trace: kushnir.sileman 1324542754 5315 93.176.238.238 (22 Dec 2011 08:32:34 GMT)
    X-Complaints-To: u...@k...sileman
    NNTP-Posting-Date: Thu, 22 Dec 2011 08:32:34 +0000 (UTC)
    User-Agent: KNode/4.8 beta2
    Xref: news-archive.icm.edu.pl pl.comp.programming:194441
    [ ukryj nagłówki ]

    Stachu 'Dozzie' K. wrote:

    > On 2011-12-21, Kicer <...@...c> wrote:
    >> Paweł Kierski wrote:
    >>
    >>>
    >>> Czy prostokąty mają boki równoległe do siebie (lub może lepiej - do osi
    >>> współrzędnych)?
    >>>
    >>
    >> tak, mają.
    >
    > To algorytm ustalania jakie powinno być przesunięcie jest prosty.
    >
    > 1. Prostokąty A i B mają współrzędne:
    > * xA1, xA2, yA1, yA2
    > * xB1, xB2, yB1, yB2


    niechę będzie że mam:

    +---+
    | |
    | |
    | |
    | |
    | |
    +---+

    +-----------------+
    | |
    +-----------------+

    > 2. Upewniasz się, że xA1 < xA2, xB1 < xB2, yA1 < yA2, yB1 < yB2.
    > Chodzi o to, żeby mieć lewy bok i dolny bok zawsze we współrzędnej *1

    upewnione ;)

    > 3. Upewniasz się, że xA1 < xB1.
    > Chodzi o to, żeby wiedzieć, który prostokąt jest lewy, a który prawy.

    ten na dole jest prawy

    > 4. Jeśli to prawy prostokąt jest przesuwany, liczysz wektor przesunięcia
    > równoległego do osi x między xA2 i xB1. Jeśli lewy prostokąt jest
    > przesuwany, wektor ma przeciwny zwrot.

    no to wyszedł wektor o długości 0, bo odlegość na osi odciętych (x) między
    prawym bokiem górnego a lewym bokiem dolnego == 0.

    > 5. Obliczasz wektor przesunięcia wzdłuż osi y. Może być za pomocą
    > proporcji. Możesz nawet sprawdzić, czy udało się tak przesunąć
    > prostokąt, żeby dowolny bok poziomy jednego prostokąta znajdował się
    > między bokami drugiego prostokąta (wystarczą dwie proste alternatywy).

    tu przyznam, że nie do konca rozumiem. Z proporcji miedzy czym a czym?
    Jeśli chodzi o jakieś proporcje związane z wektorem poziomym to i tak wyszło
    0, wiec nie ma co liczyć.

    > Nie wiem czemu uważasz, że to jakieś czary. Co najwyżej, jak ktoś
    > w innej odpowiedzi zauważył, wynik z punktu piątego może nie być liczbą
    > całkowitą.


    rozważ taki przypadek:

    +----------+
    | |
    +----------+

    +----------+
    | |
    +----------+

    wg punktu 3 dolny prostokąt jest prawy

    wg punktu 4 wyjdzie mi wektor nakazujący przesunąć dolny prostokąt w prawo i
    to o spory kawałek, bo liczę wektor o współrzędnej x = xB1 - xA2 co daje
    niespodziewane liczbę ujemną.

    Nie ważne co mówią kolejne punkty, bo i tak algorytm już poszedł w maliny,
    bo oczekiwane przesunięcie (po prostej między środkami prostokątów) to 1 w
    lewo i 1 w górę.

    Poświęciłem naprawdę sporo czasu na rozwiązanie tego problemu i uwierz mi,
    wszelkie algorytmy wymyślane "od ręki" mają jakieś błędy dla wymyślnych
    przypadków.

    pozdrawiam

    --
    Michał Walenciak
    gmail.com kicer86
    http://kicer.sileman.net.pl
    gg: 3729519

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: