Parametric plot doesn't work as expected

I'm working on some visualizations. In fact, I'd like to vizualize lines and curves on the projective plane. I started with something very easy: draw a line on sphere. I figured out the following.

Compute intersection of a plane with the unit sphere:

sage: x, y, z = var('x y z')
sage: sol = solve([x + y + z == 0.0, x^2 + y^2 + z^2 == 1.0], y, z)
sage: sol
[[y == -1/2*x - 1/2*sqrt(-3*x^2 + 2), z == -1/2*x + 1/2*sqrt(-3*x^2 + 2)],
[y == -1/2*x + 1/2*sqrt(-3*x^2 + 2), z == -1/2*x - 1/2*sqrt(-3*x^2 + 2)]]


Draw the plane, the sphere, and their intersection:

sage: p = implicit_plot3d(x + y + z, (x, -5, 5), (y, -5, 5), (z, -5, 5), color="blue", opacity=0.2)
sage: p += implicit_plot3d(x^2 + y^2 + z^2 - 1, (x, -5, 5), (y, -5, 5), (z, -5, 5), color="red", opacity=0.4)
sage: for s in sol:
....:     p += parametric_plot3d([x, y.subs(s[0]), z.subs(s[1])], (x, -5.0, 5.0), color="green")
sage: show(p)


I believe the computation is correct.

However I'm not satisfied with the resulting plot. Instead of a smooth line (like a tilted equator) I have strange "triangles" at opposite points of the sphere.

What can I do about it?

edit retag close merge delete

( 2021-04-10 16:59:51 +0100 )edit

Sort by » oldest newest most voted

Your computation is somehow wrong. It comes from the formula sqrt(-3*x^2 + 2) that is valid only in a certain range of x. Here you let x run from -5 to 5 and you will have negative numbers inside the sqrt such as

sage: sqrt(-3*5**2 + 2)
sqrt(-73)


I find it curious that you still get a picture.

more

Thank you very much, for your suggestion! I fixed my example code:

x,y,z=var('x y z')
sol = solve([x+y+z==0.0, x^2+y^2+z^2 == 1.0], y, z);
print(sol)
# p = implicit_plot3d(x+y+z, (x,-5,5), (y,-5,5), (z,-5,5), color="blue", opacity=0.2)
p = implicit_plot3d(x^2+y^2+z^2 - 1,(x,-5,5), (y,-5,5), (z,-5,5), color="red", opacity=0.4)
for s in sol:
p += parametric_plot3d([x,y.subs(s[0]), z.subs(s[1])], (x,-1/3*sqrt(3)*sqrt(2), 1/3*sqrt(3)*sqrt(2)), color="green")
show(p)


And now the result is satisfying. I'm wondering if there is a way to automatize this kind of calculations

( 2021-04-10 23:48:08 +0100 )edit

negative numbers inside the [square root] [...] I find it curious that you still get a picture

I wonder whether this might be related to:

( 2021-04-13 21:15:53 +0100 )edit

I'm wondering if there is a way to automate this kind of calculations

One might walk the expression tree for each solved variable, list things things that must be nonnegative or positive by detecting arguments of square roots and logarithms, and find the correct plotting intervals that way.

( 2021-04-13 23:27:02 +0100 )edit