2013-04-08 9 views
7

Mam brązowe ścieżki wypełnione svg i chcę wykryć i ostrzec mojego użytkownika, jeśli za jakimś kształtem znajduje się jakiś kształt. Wiem, że lista przecięć dostaje się, jeśli przecinają się na krawędziach, ale co się stanie, jeśli chcę wykryć kształt, który jest za innym kształtem, ale nie przecina się na krawędziach?Ścieżki SVG wykrywają zachodzące na siebie lub zamknięte kształty.

Metoda enoluseList wydaje się zajmować ramkami ograniczającymi, a nie tym.

Wszelkie pomysły?

+0

Może ta strona może ci pomóc: [KevLinDev] (http://www.kevlindev.com/geometry/2D/intersections/index.htm) Jest nieco przestarzały, ale wciąż jest świetną pulą pomysłów wokół skrzyżowań svg. – BausTheBig

Odpowiedz

1

Aby wykryć, czy ścieżka/kształt pokrywa się z innym
1. Obliczanie obszar objęty ostatecznym kształcie osiągniętego
2. obliczenie sumy powierzchni wszystkich kształtów niezależnie (ponieważ jest to SVG i szczegóły każdego element ścieżki jest znany, można to zrobić)
3. Porównanie 2 obszarów. Jeśli 2 obszary są takie same, wówczas nie ma nakładania się, w przeciwnym razie nakładają się co najmniej 2 kształty.

Trudnym krokiem jest krok 1, który można w przybliżeniu obliczyć za pomocą algorytmu do malowania pikseli (moje preferencje). W przypadku innych metod możesz przejść przez następujące stackoverflow question dotyczące obszaru nakładających się kółek.

+1

Jak zrobić krok 1? – CompanyDroneFromSector7G

Powiązane problemy