Próbowałem użyć foremnie, aby znaleźć przecięcie linii i wielokąta, ale mam problemy z niektórymi liczbami zmiennoprzecinkowymi.Przecięcie wieloboku z linią | Python Shapely
Przykładowy kod:
polygon = [(4.0, -2.0), (5.0, -2.0), (4.0, -3.0), (3.0, -3.0), (4.0, -2.0)]
shapely_poly = shapely.geometry.Polygon(polygon)
line = [(4.0, -2.0000000000000004), (2.0, -1.1102230246251565e-15)]
shapely_line = shapely.geometry.LineString(line)
intersection_line = list(shapely_poly.intersection(shapely_line).coords)
print intersection_line
co by się spodziewać jest lista dwoma wierzchołkami.
Punkt 1: punkt znajdujący się wewnątrz wielokąta lub (4.0, -2.0000000000000004) w tym przypadku.
Punkt 2: punkt będący punktem przecięcia [(4.0, -2.0000000000000004), (2.0, -1.1102230246251565e-15)] i [(3.0, -3.0), (4.0, -2,0)].
Jednak wynik otrzymuję to:
[(4.0, -2.0000000000000004)]
Mam również sprawdzić, czy istnieje w ogóle przecięcia z krawędzią że patrzę na:
>>> edge = shapely.geometry.LineString([(3.0, -3.0), (4.0, -2.0)])
>>> edge.intersects(shapely_line)
False
Gdybym zastąpić (4,0, -2,0000000000000004) z (4,0, -2,000000000000000), a następnie przecięcie krawędzi zostanie obliczone jako True.
Czy ktoś ma pomysły na to, co się dzieje lub czego mi brakuje? Dzięki!
Edit:
Ja testowałem przy użyciu zgrabną wersji 1.12 i Geos z 3.3.1, 3.3.5, 3.3.6, 3.3.7.
W przypadku gdy ktoś jest ciekaw, jak ja zaktualizowane wersję GEOS na oknach:
pobraniu geos- [wersja] .tar.bz2 ze strony internetowej GEOS. Wyodrębniono pliki i uruchomiono CMake przy użyciu generatora Visual Studio 10 Win64. Otworzył plik .sln i zbudował go, a następnie przeniósł wygenerowany plik geos_c.dll i wkleił go tam, gdzie został zainstalowany geos_c.dll przez kształt w katalogu Python.
zdjęcie zrobi to pytanie świat dobrej – flup
Dzięki wyjęciu do zdjęcia, wygląda lepiej niż ten, który miałem narysować! – Lisa
kiedy robię 'przecięcia = shapely_poly.intersection (shapely_line)' ', a następnie wydrukować intersection' uzyskać' LineString (+4,0000000000000000 -2.0000000000000004, +4,0000000000000000 -2,0000000000000000) ' – flup