# 3D graphics bug? Anonymous

Hi,

When I use the following code and I change the values of phi or theta, the previous red dot(point of projection) remains on the image and the new dot is added onto the image, giving two red dots. If I repeatedly change the values then more red dots appear. This problem does not occur if I get rid of the polygon inside the sphere. I'm not sure why this is happening...

Works:

S = sphere(size=10,color="yellow",opacity=0.5)
north_pole = point3d((0,0,10), color="blue")
r = 10
@interact
def _(theta = slider(0,2*pi,pi/20, default = pi/3, label="theta"),
phi = slider(0,2*pi,pi/20, default = pi/4, label="phi")):
point_of_projection = point3d((r*sin(theta)*cos(phi),r*sin(theta)*sin(phi),r*cos(theta)), color="red")
show(S + north_pole + point_of_projection)


Doesn't work:

Z = Polyhedron([[2,3,3],[3,0,3],[2,6,1],[1,0,1],[6,7,2]])
Z_set_as_graphics = Z.show()
S = sphere(size=10,color="yellow",opacity=0.5)
north_pole = point3d((0,0,10), color="blue")
r = 10
@interact
def _(theta = slider(0,2*pi,pi/20, default = pi/3, label="theta"), phi = slider(0,2*pi,pi/20, default = pi/4, label="phi")):
point_of_projection = point3d((r*sin(theta)*cos(phi),r*sin(theta)*sin(phi),r*cos(theta)), color="red")
show(Z_set_as_graphics + S + north_pole + point_of_projection)

edit retag close merge delete

1

I just tried this, and don't get this behavior... maybe because you posted the version of the code without the polygon?

Z = Polyhedron([[2,3,3],[3,0,3],[2,6,1],[1,0,1],[6,7,2]]) Z_set_as_graphics = Z.show() S = sphere(size=10,color="yellow",opacity=0.5) north_pole = point3d((0,0,10), color="blue") r = 10 @interact def _(theta = slider(0,2*pi,pi/20, default = pi/3, label="theta"), phi = slider(0,2*pi,pi/20, default = pi/4, label="phi")): point_of_projection = point3d((r*sin(theta)*cos(phi),r*sin(theta)*sin(phi),r*cos(theta)), color="red") show(Z_set_as_graphics + S + north_pole + point_of_projection)

Sort by » oldest newest most voted

My guess is that this is just a manifestation of this bug: http://trac.sagemath.org/sage_trac/ti...

more

Okay, what I think is going on here is that Polyhedron doesn't really play nice with other graphics methods. It's probably pretty old (for Sage) code that stems from a time before we had lots of nice 3d options - maybe?

So in particular, the way it renders vertices is also via point3d

return point3d(self.coordinates_of(self.points), **kwds)


so my somewhat educated guess is that since you are adding things to Z_set_as_graphics (itself a hack you shouldn't have to do, but that's another story), and since you defined that outside the interact, it is adding those points to itself. So the following works.

S = sphere(size=10,color="yellow",opacity=0.5)
north_pole = point3d((0,0,10), color="blue")
r = 10
@interact
def _(theta = slider(0,2*pi,pi/20, default = pi/3, label="theta"), phi = slider(0,2*pi,pi/20, default = pi/4, label="phi")):
point_of_projection = point3d((r*sin(theta)*cos(phi),r*sin(theta)*sin(phi),r*cos(theta)), color="red")
Z = Polyhedron([[2,3,3],[3,0,3],[2,6,1],[1,0,1],[6,7,2]])
Z_set_as_graphics = Z.plot()
show(Z_set_as_graphics + S + north_pole + point_of_projection)


Note that you could make many of the other things interactive too, and could probably even get the outputs to the sliders to LaTeX up nicely...

more