polygonlinien mergen
-
ich hab eine ganze menge polygone (werden durch ihre eckpunkte beschrieben), wobei polygone oft eine seite mit einem anderen polygon teilen. die polygone werden gezeichnet was aber langsam ist, also will ich die polygone durch linien ersetzen. es muesste dann ja eigentlich weniger zu zeichnen sein, weil keine strecke mehr doppelt da ist.
ich kann die polygone easy in linien zerlegen, wobei eine linie durch ihre einzelnen punkte beschrieben wird, es sind also keine einfachen start->end linien, sondern sie koennen ueber mehrere punkte gehen. was mir aber fehlt ist ein algorithmus, der die linien "mergt", also doppelte stellen rauswirft und zusammenhaengende linien erkennt und vereint.
die performance ist relativ egal, weil ich damit nur einmalig neue daten fuer eine datenbank generieren will.kennt jemand einen passenden algorithmus?
-
Im Prinzip gaz einfach:
Du nimmst die eine dieser Linien, begrenzt durch die Punkte P1 und P2.
Daraus formulierst Du eine Konvexkombination:f(t)=t*P1+(1-t)*P2
Jetzt nimmst Du die Endpunkte einer anderen Geraden X1 und X2, berechnest die beiden t für X1=f(t) bzw. X2=f(t). Liegen beide t zwischen 0 und 1, liegen sowohl X1, als auch X2 auf der Lineie und damit ist die Linie durch X1 und X2 ein Teilstück der Linie P1 und P2 und könnte somit rausgeworfen werden.
Das wiederholst Du mit allen anderen Punkten.
Eventuell gibt es aber ein Problem mit der Rechengenauigkeit.