First time here? Check out the FAQ!

Ask Your Question
1

Parametric plot doesn't work as expected

asked 4 years ago

pawel.bogdan gravatar image

updated 4 years ago

slelievre gravatar image

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)

Plane, sphere and their intersection

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?

Preview: (hide)

Comments

Here is the result I was writing about: https://zielony-backlog.pl/wp-content/uploads/2021/04/screenshot1.png (pict)

pawel.bogdan gravatar imagepawel.bogdan ( 4 years ago )

1 Answer

Sort by » oldest newest most voted
1

answered 4 years ago

vdelecroix gravatar image

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.

Preview: (hide)
link

Comments

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

pawel.bogdan gravatar imagepawel.bogdan ( 4 years ago )

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

I wonder whether this might be related to:

slelievre gravatar imageslelievre ( 4 years ago )

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.

slelievre gravatar imageslelievre ( 4 years ago )

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 4 years ago

Seen: 484 times

Last updated: Apr 11 '21