I'm working on determining relationships (boundary/interior intersections) between two 3D objects (triangular faces) and stumbled on <a href="http://pypi.python.org/pypi/Shapely" rel="nofollow">shapely</a>, which I am interested in using instead of implementing my own point/segment/ray/triangle intersection functions.
However, I'm running into the following problem:
>>> from shapely.geometry import Polygon >>> poly = Polygon([(0,1,1),(1,-1,1),(-1,-1,1)]) >>> poly2 = Polygon([(0,1,0),(1,-1,0),(-1,-1,0)]) >>> poly.intersects(poly2) True >>> poly.equals(poly2) True
The problem I seem to be running into is that the two polygons are equal in their 2D orthogonal projections (same triangle), but in different planes (one's at Z=1, other at Z=0), but shapely is saying they're equal and intersect.
Is there some magic I'm missing to make shapely think in 3 dimensions? I've been googling, but every example I've seen so far is only in two dimensions.Answer1:
According to the <a href="http://toblerity.github.com/shapely/manual.html#geometric-objects" rel="nofollow">Shapely manual</a>, it states that the following for the z coordinate plane for geometric objects:<blockquote>
<em>A third z coordinate value may be used when constructing instances, <strong>but has no effect on geometric analysis. All operations are performed in the x-y plane.</strong></em></blockquote>
If your calculations require the z coordinate plane, then Shapely might not be for you. Of course, you could try to get the points of the polygon as a list and compare it to other polygons. However, if you want to have a Python geometric library that can handle the z dimension, you can find some <a href="https://stackoverflow.com/questions/1076778/good-geometry-library-in-python" rel="nofollow">here</a>.