eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingŁączenie wielokątów › Re: Łączenie wielokątów
  • X-Received: by 10.140.28.117 with SMTP id 108mr20503qgy.38.1414429624360; Mon, 27 Oct
    2014 10:07:04 -0700 (PDT)
    X-Received: by 10.140.28.117 with SMTP id 108mr20503qgy.38.1414429624360; Mon, 27 Oct
    2014 10:07:04 -0700 (PDT)
    Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!news.glorb.com!
    peer02.iad.highwinds-media.com!news.highwinds-media.com!feed-me.highwinds-media
    .com!r10no659687igi.0!news-out.google.com!u5ni12qab.1!nntp.google.com!u7no53032
    8qaz.1!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
    Newsgroups: pl.comp.programming
    Date: Mon, 27 Oct 2014 10:07:04 -0700 (PDT)
    In-Reply-To: <m2lp5j$q7o$1@node2.news.atman.pl>
    Complaints-To: g...@g...com
    Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=31.61.136.116;
    posting-account=VFwkXwoAAADdT4-lLKRZrMYkTjizGoyn
    NNTP-Posting-Host: 31.61.136.116
    References: <m2lp5j$q7o$1@node2.news.atman.pl>
    User-Agent: G2/1.0
    MIME-Version: 1.0
    Message-ID: <4...@g...com>
    Subject: Re: Łączenie wielokątów
    From: Wojciech Muła <w...@g...com>
    Injection-Date: Mon, 27 Oct 2014 17:07:04 +0000
    Content-Type: text/plain; charset=ISO-8859-2
    Content-Transfer-Encoding: quoted-printable
    X-Received-Bytes: 3162
    X-Received-Body-CRC: 604588584
    Xref: news-archive.icm.edu.pl pl.comp.programming:206819
    [ ukryj nagłówki ]

    On Monday, October 27, 2014 4:42:45 PM UTC+1, Borneq wrote:
    > Pierwsza rzecz to szybka detekcja, czy wielokąty dotykają się czy też
    > przecinają. Można dość szybko odrzucić gdy nie przecinają się prostokąty
    > ograniczające wielokąty (niekoniecznie wypukłe)

    Zamiast prostokątów możesz użyć wielokątów-otoczek wypukłych zbudowanych
    w oparciu o wierzchołki wielokąta. Testy przecięcia wielokątów wypukłych
    są całkiem proste, a masz dużo większą precyzję niż dla prostokątów.
    Ale to tylko propozycja.

    > Druga sprawa - gdy mamy dwa wielokąty, które się przecinają lub dotykają
    > to jak je połączyć w jeden?

    Chodzi Ci o sumę boolowską, tak? Potrzebujesz tak naprawdę policzyć
    wszystkie przecięcia krawędzi obu wielokątów i je podzielić
    w tych punktach na "pododcinki". W tym momencie każdy odcinek może
    być jednoznacznie zakwalifikowany, czy leży wewnątrz wielokąta 1 lub 2
    (albo jest krawędzią) - te, które leżą wewnątrz któregokolwiek
    wielokąta kasujesz. Klasyfikację "pododcinków" możesz sprowadzić do
    stwierdzenia, czy którykolwiek jego punkt (np. środkowy) należy do
    wielokąta.

    Policzenie wszystkich przecięć możesz zrobić metodą zamiatania,
    tu masz opis: http://wazniak.mimuw.edu.pl/index.php?title=Zaawanso
    wane_algorytmy_i_struktury_danych/Wyk%C5%82ad_12#prz
    ecinanie_sie_zbioru_odcinkow
    Chociaż, jeśli nie masz wielokątów o dużej liczbie krawędzi możesz
    na początek zrobić naiwną metodą każdy-z-każdym.

    Natomiast stwierdzenie, czy punkt należy do wielokąta można zrobić
    na wiele sposobów: http://erich.realtimerendering.com/ptinpoly/
    Prosty do zaprogramowania jest "Crossing test".

    Generalnie nie jest to bardzo trudne, ale trzeba uważać w przypadkach
    skrajnych. Rozważ użycie gotowca, np. http://www.cgal.org/.

    w.

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: