# Finding point of intersection between a line and a sphere

86 ビュー (過去 30 日間)
André C. D. 2019 年 6 月 6 日
Answered: EVELYN ROSSANA PARRA LOPEZ 2019 年 10 月 14 日
Hello all,
I have a MATLAB code that plots a 3D sphere using:
[xs,ys,zs] = sphere(10);
surface = surf(350*zs+1000,350*ys,350*xs);
I also have a line that represents the normal between three points (labeled P0, P1, P2) on a plane, which is plotted from the middle-point between all three points:
P0 = [tz1,ty1,tx1]; P1 = [tz2,ty2,tx2]; P2 = [tz3,ty3,tx3]; %represent a triangle
Pm = mean([P0;P1;P2]); %represents the midpoint between P0, P1 and P2
normal = cross(P0-P1,P0-P2);
cn = normal + Pm;
normal_vector = plot3([Pm(1) cn(1)],[Pm(2) cn(2)],[Pm(3) cn(3)],'k--'); %normal
What I am trying to do is find the coordinates of the point of intersection between the line "normal_vector" and the sphere "surface".
This is what the plot looks like: The points P0, P1 and P2 are shown as coloured circles and are always inside the sphere, so their normal is always showing 'outwards' through the surface of the sphere.

#### 0 件のコメント

サインイン to comment.

### 採用された回答

Torsten 2019 年 6 月 6 日

Sphere:
(x-xs)^2 + (y-ys)^2 + (z-zs)^2 = R^2
Line:
[x y z] = Pm + l*normal
Thus
(Pm(1)+l*normal(1)-xs)^2 + (Pm(2)+l*normal(2)-ys)^2 + (Pm(3)+l*normal(3)-zs)^2 = R^2
Solve for (the positive) l.

#### 7 件のコメント

André C. D. 2019 年 6 月 7 日
xs, ys and zs are not scalars. The sphere(10) function returns three 11x11 doubles in order to 'simulate' the surface of the sphere.
That is probably where the issue is at; however, I am not sure how to get from the xs, ys, zs matrices to ordinary coordinate vectors that represent every point in the surface.
Torsten 2019 年 6 月 7 日
Ah, I thought (xs,ys,zs) is the center of the sphere.
You have to solve
sol = solve((Pm1+(l*normal1) - xc)^2 + (Pm2+(l*normal2) - yc)^2 + (Pm3+(l*normal3) - zc)^2 == R^2,l)
where (xc,yc,zc) is the center of the sphere.
André C. D. 2019 年 6 月 7 日
Ahh thank you so much, now it works perfectly!

サインイン to comment.

EVELYN ROSSANA PARRA LOPEZ 2019 年 10 月 14 日
The last line of code is summarized in replacing the terms x, y and z of the parametric equation of a line in space, in the equation that describes a sphere, and the variable to be found is the parameter, in this case l. I apply the same with a sphere and a known line, but the answer is as follows:
CODE LINES:
syms t
sol=solve((0.2118+t*0.8473-1).^2+(0.06883+t*0.2754-0.5).^2+(0.1135+t*0.4541-0.5).^2==((0.25).^2),t)
RESULT:
sol=
240523932/249992315 - (10^(1/2)*3160661400392057^(1/2))/999969260
(10^(1/2)*3160661400392057^(1/2))/999969260 + 240523932/249992315

#### 0 件のコメント

サインイン to comment.

サインイン してこの質問に回答します。