1. Limited time only! Sign up for a free 30min personal tutor trial with Chegg Tutors
    Dismiss Notice
Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

I Intersection between line and cylinder

  1. Jun 22, 2017 #1
    I have an expression for a "line- to sphere intersection" that works:
    a = 1 + Ax^2 + Ay^2
    b = 2*(-zs + Ax*(Bx-xs) + Ay*(By-ys))
    c = zs^2 + (Bx-xs)^2 + (By - ys)^2 - R^2

    This is part of a code in Matlab, and works fine. It is derived from substituting (x=Ax*z+Bx, y=Ay*z+By) into:
    ((x-xs)^2+(y-ys)^2+(z-zs)^2 = R

    I am now trying to do the same for a cylinder, by substituting(x=Ax*z+Bx, y=Ay*z+By) into: (x-xs)^2+(y-ys)^2 = R
    Ending up with:
    a = Ax^2+Ay^2;
    b = 2*Ax*Bx - 2*Ax*xs + 2*Ay*By - 2*Ay*ys;
    c = -2*Bx*xs - 2*By*ys + Bx^2 + By^2 + xs^2+ys^2 - R^2;

    This doesn't seem to work. Can anyone tell me if something seems off with the math or logic?
    Any comments at all would be greatly appreciated.
    Last edited: Jun 22, 2017
  2. jcsd
  3. Jun 22, 2017 #2


    Staff: Mentor

    Without any supplemental explanation, this doesn't make much sense. A line and a sphere in space can intersect in one of three ways:
    1. No intersection
    2. Exactly one point of intersection (the line is tangent to the sphere)
    3. Two points of intersection

    In your equations above, what are a, b, and c?
    How did you get these equations?
    Again, with no explanation, this doesn't make much sense.

    By the way, the equation of a sphere of radius R, with center at the point ##(x_0, y_0, z_0)## is ##(x - x_0)^2 + (y - y_0)^2 + (x - z_0)^2 = R^2##. In your equation above it looks like you are using just R.
    A line and a cylinder in space can intersect in one of four ways:
    1. No intersection
    2. Exactly one point of intersection (the line is tangent to the cylinder)
    3. Two points of intersection
    4. An infinite number of points of intersection (the line is parallel to the cylinder's axis and lies on the cylinder)
  4. Jun 23, 2017 #3
    Ok, thank you for your reply!!

    For the first two questions: I got a,b and c from putting the equation for a line into the equation for a sphere. I ended up with a quadratic equation when I solved for "Az". a,b and c are simply; zs(a)^2, zs(b), c. That is, the inputs for the quadratic formula (NOT the solutions, because its part of a code that changes the variables over and over(if that makes sense)).

    For the 3rd question; "It is derived from substituting...", my "xs, ys, and zs" are equal to your "x0, y0, z0." What I did here was basically to put the line equations into sphere equation.

    Comment to your 4th point:
    The R I think I have simply forgot to square in the first lines. ( I changed it later so it shouldn't matter)
    I am tracing a ray. This is the next step of the code:

    z1 = (-b + sqrt(b^2 - 4*a*c))/(2*a); x1 = Ax*z1+Bx; y1 = Ay*z1+By;
    z2 = (-b - sqrt(b^2 - 4*a*c))/(2*a); x2 = Ax*z2+Bx; y2 = Ay*z2+By;

    So basically, I just need a set of expressions that does the job for a cylinder instead of a sphere. At least, this is what I'm thinking. I am not sure if this will work.
  5. Jun 23, 2017 #4


    Staff: Mentor

    It would be helpful to see the equations you used for the line (parametric equations? symmetric equations?, vector equation?) as well as at least some of your work, rather than just a description of what you did.
  6. Jun 26, 2017 #5
    This is the equations I used for the line:
    x=Ax*z+Bx, y=Ay*z+By (I solved for z)

    This is basically the .m-file that make up the intersection(sphere):

    function [r1v,a2v] = lens_vec(s1,r1,a1v,r0v,v1,v2,direk,mirror_skew)

    %Find intersection and refraction:

    % s1 - sphere center (z-value)
    % r1 - sphere radius
    % a1v - unit vector defining direction of ray
    % r0v - starting point of ray
    % v1 - speed of sound, material 1
    % v2 - speed of sound, material 2
    % direk - choose croosing, direk==0 to the right of s1, direk==1, to the

    % left of s1
    xs = 0.0000; ys=mirror_skew; zs=s1; % center of sphere

    R = r1; % radius of sphere

    %.......Define parameters for x and y coordinate of straight line (Ax,Bx),
    %.......(Ay, By)

    if a1v(1) ~= 0

    Ax = a1v(1)/a1v(3);


    Ax = 0;


    if a1v(2) ~= 0

    Ay = a1v(2)/a1v(3);


    Ay = 0;


    Bx = r0v(1)- Ax*r0v(3);

    By = r0v(2)- Ay*r0v(3);

    % Intersection straight line and sphere:

    a = 1 + Ax^2 + Ay^2;
    b = 2*(-zs + Ax*(Bx-xs) + Ay*(By-ys));
    c = zs^2 + (Bx-xs)^2 + (By - ys)^2 - R^2;

    z1 = (-b + sqrt(b^2 - 4*a*c))/(2*a); x1 = Ax*z1+Bx; y1 = Ay*z1+By;
    z2 = (-b - sqrt(b^2 - 4*a*c))/(2*a); x2 = Ax*z2+Bx; y2 = Ay*z2+By;

    % (After this comes a section on Snell's law and refraction code)
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook

Have something to add?
Draft saved Draft deleted