[sage-support] Re: Using sage to find point on a line a given distance from circle in 3D

2008-09-27 Thread Eugene Jhong

Thanks so much for characterizing the problem properly in this manner
- that's exactly right.  I just did a search for torus-line
intersections and found some solutions:

http://tog.acm.org/GraphicsGems/gemsii/intersect/inttor.c

On Sep 26, 9:11 pm, "David Joyner" <[EMAIL PROTECTED]> wrote:
> Maybe I don't understand the question exactly.
>
> Consider the circle x^2+y^2=1, z=0, and the set S of all points
> at a small distance d, say d near 1/100, from this circle. I think
> that is a torus, isn't it?
> You want a symbolic equation (ie, a function of d) for the points in
> the intersection
> of this torus with a line?
>
> Just guessing, I would imagine this could depend on d in a complicated way,
> as when d is small you could have 0, 1, 2, 3, or 4 solutions, but when d is
> large, it seems to me you could have 0, 1 or 2 solutions.
> Maybe it's not so simple?
>
> On Fri, Sep 26, 2008 at 11:46 PM, Eugene Jhong <[EMAIL PROTECTED]> wrote:
>
> > Newbie to sage - trying to find a point on a line in 3D that is a
> > specified distance from a circle (the line is not coplanar with the
> > circle).  Here's what I've inputed into sage:
>
> > var("line_dir_x line_dir_y line_dir_z line_p_x line_p_y line_p_z
> > cent_x cent_y cent_z norm_x norm_y norm_z u radius length")
> > line_dir = vector([line_dir_x, line_dir_y, line_dir_z])   # direction
> > of line
> > line_p = vector([line_p_x, line_p_y, line_p_z])           # point on
> > the line
> > cent = vector([cent_x, cent_y, cent_z])                      # center
> > of circle
> > norm = vector([norm_x, norm_y, norm_z])                # normal to
> > plane of circle
> > p = line_p + u * line_dir
> > diff0 = p - cent
> > dist = diff0.dot_product(norm)
> > diff1 = diff0 - dist * norm
> > sqr_len = diff1.dot_product(diff1)
> > closest_point1 = cent + (radius/sqrt(sqr_len))*diff1
> > diff2 = p - closest_point1
> > eq = length**Integer(2) == diff2.dot_product(diff2)
> > solve([eq], u)
>
> > Here's what eq looks like:
>
> > rleg_len^2 == (-radius*(-norm_z*(norm_z*(line_dir_z*u + line_p_z -
> > cent_z) + norm_y*(line_dir_y*u + line_p_y - cent_y) +
> > norm_x*(line_dir_x*u + line_p_x - cent_x)) + line_dir_z*u + line_p_z -
> > cent_z)/sqrt((-norm_z*(norm_z*(line_dir_z*u + line_p_z - cent_z) +
> > norm_y*(line_dir_y*u + line_p_y - cent_y) + norm_x*(line_dir_x*u +
> > line_p_x - cent_x)) + line_dir_z*u + line_p_z - cent_z)^2 + (-
> > norm_y*(norm_z*(line_dir_z*u + line_p_z - cent_z) +
> > norm_y*(line_dir_y*u + line_p_y - cent_y) + norm_x*(line_dir_x*u +
> > line_p_x - cent_x)) + line_dir_y*u + line_p_y - cent_y)^2 + (-
> > norm_x*(norm_z*(line_dir_z*u + line_p_z - cent_z) +
> > norm_y*(line_dir_y*u + line_p_y - cent_y) + norm_x*(line_dir_x*u +
> > line_p_x - cent_x)) + line_dir_x*u + line_p_x - cent_x)^2) +
> > line_dir_z*u + line_p_z - cent_z)^2 + (-radius*(-
> > norm_y*(norm_z*(line_dir_z*u + line_p_z - cent_z) +
> > norm_y*(line_dir_y*u + line_p_y - cent_y) + norm_x*(line_dir_x*u +
> > line_p_x - cent_x)) + line_dir_y*u + line_p_y - cent_y)/sqrt((-
> > norm_z*(norm_z*(line_dir_z*u + line_p_z - cent_z) +
> > norm_y*(line_dir_y*u + line_p_y - cent_y) + norm_x*(line_dir_x*u +
> > line_p_x - cent_x)) + line_dir_z*u + line_p_z - cent_z)^2 + (-
> > norm_y*(norm_z*(line_dir_z*u + line_p_z - cent_z) +
> > norm_y*(line_dir_y*u + line_p_y - cent_y) + norm_x*(line_dir_x*u +
> > line_p_x - cent_x)) + line_dir_y*u + line_p_y - cent_y)^2 + (-
> > norm_x*(norm_z*(line_dir_z*u + line_p_z - cent_z) +
> > norm_y*(line_dir_y*u + line_p_y - cent_y) + norm_x*(line_dir_x*u +
> > line_p_x - cent_x)) + line_dir_x*u + line_p_x - cent_x)^2) +
> > line_dir_y*u + line_p_y - cent_y)^2 + (-radius*(-
> > norm_x*(norm_z*(line_dir_z*u + line_p_z - cent_z) +
> > norm_y*(line_dir_y*u + line_p_y - cent_y) + norm_x*(line_dir_x*u +
> > line_p_x - cent_x)) + line_dir_x*u + line_p_x - cent_x)/sqrt((-
> > norm_z*(norm_z*(line_dir_z*u + line_p_z - cent_z) +
> > norm_y*(line_dir_y*u + line_p_y - cent_y) + norm_x*(line_dir_x*u +
> > line_p_x - cent_x)) + line_dir_z*u + line_p_z - cent_z)^2 + (-
> > norm_y*(norm_z*(line_dir_z*u + line_p_z - cent_z) +
> > norm_y*(line_dir_y*u + line_p_y - cent_y) + norm_x*(line_dir_x*u +
> > line_p_x - cent_x)) + line_dir_y*u + line_p_y - cent_y)^2 + (-
> > norm_x*(norm_z*(line_dir_z*u + line_p_z - cent_z) +
> > norm_y*(line_dir_y*u + line_p_y - cent_y) + norm_x*(line_dir_x*u +
> > line_p_x - cent_x)) + line_dir_x*u + line_p_x - cent_x)^2) +
> > line_dir_x*u + line_p_x - cent_x)^2
>
> > I try to do the solve but it doesn't seem to terminate after several
> > hours.  Just looking for any pointers about finding an analytical
> > solution to this seemingly simple problem.
--~--~-~--~~~---~--~~
To post to this group, send email to sage-support@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sage-support
URLs: http://www.sagemath.org
-~--~~~---

[sage-support] Re: Using sage to find point on a line a given distance from circle in 3D

2008-09-26 Thread David Joyner

Maybe I don't understand the question exactly.

Consider the circle x^2+y^2=1, z=0, and the set S of all points
at a small distance d, say d near 1/100, from this circle. I think
that is a torus, isn't it?
You want a symbolic equation (ie, a function of d) for the points in
the intersection
of this torus with a line?

Just guessing, I would imagine this could depend on d in a complicated way,
as when d is small you could have 0, 1, 2, 3, or 4 solutions, but when d is
large, it seems to me you could have 0, 1 or 2 solutions.
Maybe it's not so simple?

On Fri, Sep 26, 2008 at 11:46 PM, Eugene Jhong <[EMAIL PROTECTED]> wrote:
>
> Newbie to sage - trying to find a point on a line in 3D that is a
> specified distance from a circle (the line is not coplanar with the
> circle).  Here's what I've inputed into sage:
>
> var("line_dir_x line_dir_y line_dir_z line_p_x line_p_y line_p_z
> cent_x cent_y cent_z norm_x norm_y norm_z u radius length")
> line_dir = vector([line_dir_x, line_dir_y, line_dir_z])   # direction
> of line
> line_p = vector([line_p_x, line_p_y, line_p_z])   # point on
> the line
> cent = vector([cent_x, cent_y, cent_z])  # center
> of circle
> norm = vector([norm_x, norm_y, norm_z])# normal to
> plane of circle
> p = line_p + u * line_dir
> diff0 = p - cent
> dist = diff0.dot_product(norm)
> diff1 = diff0 - dist * norm
> sqr_len = diff1.dot_product(diff1)
> closest_point1 = cent + (radius/sqrt(sqr_len))*diff1
> diff2 = p - closest_point1
> eq = length**Integer(2) == diff2.dot_product(diff2)
> solve([eq], u)
>
> Here's what eq looks like:
>
> rleg_len^2 == (-radius*(-norm_z*(norm_z*(line_dir_z*u + line_p_z -
> cent_z) + norm_y*(line_dir_y*u + line_p_y - cent_y) +
> norm_x*(line_dir_x*u + line_p_x - cent_x)) + line_dir_z*u + line_p_z -
> cent_z)/sqrt((-norm_z*(norm_z*(line_dir_z*u + line_p_z - cent_z) +
> norm_y*(line_dir_y*u + line_p_y - cent_y) + norm_x*(line_dir_x*u +
> line_p_x - cent_x)) + line_dir_z*u + line_p_z - cent_z)^2 + (-
> norm_y*(norm_z*(line_dir_z*u + line_p_z - cent_z) +
> norm_y*(line_dir_y*u + line_p_y - cent_y) + norm_x*(line_dir_x*u +
> line_p_x - cent_x)) + line_dir_y*u + line_p_y - cent_y)^2 + (-
> norm_x*(norm_z*(line_dir_z*u + line_p_z - cent_z) +
> norm_y*(line_dir_y*u + line_p_y - cent_y) + norm_x*(line_dir_x*u +
> line_p_x - cent_x)) + line_dir_x*u + line_p_x - cent_x)^2) +
> line_dir_z*u + line_p_z - cent_z)^2 + (-radius*(-
> norm_y*(norm_z*(line_dir_z*u + line_p_z - cent_z) +
> norm_y*(line_dir_y*u + line_p_y - cent_y) + norm_x*(line_dir_x*u +
> line_p_x - cent_x)) + line_dir_y*u + line_p_y - cent_y)/sqrt((-
> norm_z*(norm_z*(line_dir_z*u + line_p_z - cent_z) +
> norm_y*(line_dir_y*u + line_p_y - cent_y) + norm_x*(line_dir_x*u +
> line_p_x - cent_x)) + line_dir_z*u + line_p_z - cent_z)^2 + (-
> norm_y*(norm_z*(line_dir_z*u + line_p_z - cent_z) +
> norm_y*(line_dir_y*u + line_p_y - cent_y) + norm_x*(line_dir_x*u +
> line_p_x - cent_x)) + line_dir_y*u + line_p_y - cent_y)^2 + (-
> norm_x*(norm_z*(line_dir_z*u + line_p_z - cent_z) +
> norm_y*(line_dir_y*u + line_p_y - cent_y) + norm_x*(line_dir_x*u +
> line_p_x - cent_x)) + line_dir_x*u + line_p_x - cent_x)^2) +
> line_dir_y*u + line_p_y - cent_y)^2 + (-radius*(-
> norm_x*(norm_z*(line_dir_z*u + line_p_z - cent_z) +
> norm_y*(line_dir_y*u + line_p_y - cent_y) + norm_x*(line_dir_x*u +
> line_p_x - cent_x)) + line_dir_x*u + line_p_x - cent_x)/sqrt((-
> norm_z*(norm_z*(line_dir_z*u + line_p_z - cent_z) +
> norm_y*(line_dir_y*u + line_p_y - cent_y) + norm_x*(line_dir_x*u +
> line_p_x - cent_x)) + line_dir_z*u + line_p_z - cent_z)^2 + (-
> norm_y*(norm_z*(line_dir_z*u + line_p_z - cent_z) +
> norm_y*(line_dir_y*u + line_p_y - cent_y) + norm_x*(line_dir_x*u +
> line_p_x - cent_x)) + line_dir_y*u + line_p_y - cent_y)^2 + (-
> norm_x*(norm_z*(line_dir_z*u + line_p_z - cent_z) +
> norm_y*(line_dir_y*u + line_p_y - cent_y) + norm_x*(line_dir_x*u +
> line_p_x - cent_x)) + line_dir_x*u + line_p_x - cent_x)^2) +
> line_dir_x*u + line_p_x - cent_x)^2
>
> I try to do the solve but it doesn't seem to terminate after several
> hours.  Just looking for any pointers about finding an analytical
> solution to this seemingly simple problem.
>
>
> >
>

--~--~-~--~~~---~--~~
To post to this group, send email to sage-support@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sage-support
URLs: http://www.sagemath.org
-~--~~~~--~~--~--~---