Undergrad Intersection between line and cylinder

Click For Summary
SUMMARY

This discussion focuses on deriving equations for the intersection of a line with a cylinder, building on previously established equations for line-sphere intersections in MATLAB. The user successfully derived the quadratic coefficients a, b, and c for the sphere but encountered issues when attempting to apply similar logic to the cylinder. The equations for the cylinder intersection were presented as a = Ax^2 + Ay^2, b = 2*Ax*Bx - 2*Ax*xs + 2*Ay*By - 2*Ay*ys, and c = -2*Bx*xs - 2*By*ys + Bx^2 + By^2 + xs^2 + ys^2 - R^2. The user seeks validation and insights into potential errors in their mathematical approach.

PREREQUISITES
  • Understanding of quadratic equations and their applications in geometry
  • Familiarity with MATLAB programming and syntax
  • Knowledge of parametric equations for lines
  • Concepts of geometric intersections, specifically between lines and cylinders
NEXT STEPS
  • Review the mathematical derivation of line-cylinder intersection equations
  • Implement and test the derived cylinder intersection equations in MATLAB
  • Explore the implications of different intersection scenarios (no intersection, tangent, two points, infinite points)
  • Study the use of MATLAB functions for solving quadratic equations and their applications in 3D geometry
USEFUL FOR

Mathematics enthusiasts, computer graphics programmers, and engineers working on ray tracing or geometric modeling who need to understand line and cylinder intersections in three-dimensional space.

Joacim Jacobsen
Messages
3
Reaction score
0
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:
Mathematics news on Phys.org
Joacim Jacobsen said:
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
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?
Joacim Jacobsen said:
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
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.
Joacim Jacobsen said:
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.
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)
 
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.
 
Joacim Jacobsen said:
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.
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.
 
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);

else

Ax = 0;

end

if a1v(2) ~= 0

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

else

Ay = 0;

endBx = 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)
 

Similar threads

  • · Replies 13 ·
Replies
13
Views
3K
  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 11 ·
Replies
11
Views
2K
  • · Replies 4 ·
Replies
4
Views
2K
Replies
4
Views
2K
  • · Replies 2 ·
Replies
2
Views
2K
Replies
1
Views
2K
  • · Replies 11 ·
Replies
11
Views
2K
  • · Replies 8 ·
Replies
8
Views
3K