# Error intersecting polyhedra I have a dictionary of polyhedra which I want to consider various intersections and unions of. For now, my dictionary has four polyhedra in it. When running the following for loop:

v={} # contains coordinates of the tetrahedron, centered at (0,0,0)
v = vector([1,0,-1/sqrt(2)])
v = vector([-1,0,-1/sqrt(2)])
v = vector([0,1,1/sqrt(2)])
v = vector([0,-1,1/sqrt(2)])

V = {1,2,3,4}

b={} # will contain coordinates of vertices of the subdivision of the tetrahedron

for X in powerset(V):
q = len(X)
if q > 0:
b[tuple(X)] = (1/q)*sum([v[i] for i in X])

poly_int = Polyhedron([b[key] for key in b.keys()]) # this is a tetrahedron containing
# all of my polyhedra
for i in [1,2,3,4]:
poly_int = poly[i] & poly_int


I get a very nasty error:

AttributeError: 'Polyhedra_RDF_cdd_with_category.element_class'
object has no attribute '_Vrepresentation'


(The traceback for the error is quite long. I can include it if needed.)

Manually computing

poly & poly & poly & poly


gives the same error. HOWEVER, if instead I compute

(poly & poly) & (poly & poly)


I get no errors. While this is a fine workaround for this particular case, I'm scripting these intersections and need some way to actually compute these intersections automatically. Using something like

poly.intersection(poly) # etc.


doesn't help either. Any thoughts?

edit retag close merge delete

If you could edit your question to include the definition of b that would probably help; I'm trying some basic polyhedra and just getting the empty polyhedron even with multiple &s, and the diagnosis you give indicates it's probably a very specific edge case that is going wrong. (Also note that intersection *should* (?) be the same as &, since this particular binary operator turns into __and__, I believe.)

@kcrisman OK. I included a definition of b. It's a dictionary containing the coordinates of the barycentric subdivision of a 3-simplex.

Sorry, one more question - what is poly? I thought maybe v is poly, but that doesn't make sense.

Right. Sorry. Each poly[i] is a polyhedron defined as a convex hull on some of the points from b.

With code, please... :-) Again, my first guesses at *which* points didn't work. Sorry for asking for *all* of it, but a "minimal working example" is key for debugging this. We don't want to try to guess what you mean.

OK. So, I've lost that original code which produced this error. However, I have noticed some new strange behavior when intersecting polyhedra and can give you specifics: a = Polyhedron([[1.0, 0.0, -0.7071067812], [0.5, -0.5, 0.0]]) b = Polyhedron([[-0.5,-0.5,0.0]]) c = Polyhedron([[0.0, -1.0, 0.7071067812], [0.5, -0.5, 0.0], [-0.5, -0.5, 0.0]]). a & b is empty, while (a & b) & c is 0-dimensional.

Perhaps it is because these polyhedra are degenerate?