前言
本文包括利用Matlab对三维空间中的球形和直线交点进行求解、球形的绘制。
一、问题描述
求三维空间中,球和直线的交点。球的中心坐标为(10,10,10),半径为:1.6。直线过点
(9.12572004 ,7.565155035,8.6508179)、(10,10,10)
这里,我将球的中心坐标重新定义为坐标原点(0,0,0),则问题转化为:球的中心坐标为(0,0,0),半径为:1.6。直线过点(-0.8743 ,-2.4348 ,-1.3492)、(0,0,0)
二、交点求解
利用solve函数进行交点的求解
clc;
clear;
hold off
syms x y z
%% 变量输入
a=9.12572004;
b=7.565155035;
c=8.6508179;
%% 函数定义
f1=(x-(a-10))^2+(y-(b-10))^2+(z-(c-10))^2-1.6^2;%球
%空间直线
f2=(x-0)/(a-10)-(y-0)/(b-10);
f3=(x-0)/(a-10)-(z-0)/(c-10);
f4=(y-0)/(b-10)-(z-0)/(c-10);
%% 求解
s=solve(f1,f2,f3,f4,x,y,z);
x1=vpa(s.x)
z1=vpa(s.z)
y1=vpa(s.y)
三、图像绘制
图像绘制时,为了更好的表达出交点的位置,可以设置球形的透明度使图像美观。
%绘制球形
[x2,y2,z2]= ellipsoid(a-10,b-10,c-10,1.6,1.6,1.6);
sss=surf(x2,y2,z2);
sss.FaceAlpha = 0.4; %透明度设置
axis equal
%绘制交点
scatter3(x1,y1,z1,'r','filled')
hold on;
plot3(x1,y1,z1)
hold on;
xlabel('x')
ylabel('y')
zlabel('z')
axis equal
四、求解结果
源码
clc;
clear;
hold off
syms x y z
%% 变量输入
a=9.12572004;
b=7.565155035;
c=8.6508179;
%% 函数定义
f1=(x-(a-10))^2+(y-(b-10))^2+(z-(c-10))^2-1.6^2;%球
%空间直线
f2=(x-0)/(a-10)-(y-0)/(b-10);
f3=(x-0)/(a-10)-(z-0)/(c-10);
f4=(y-0)/(b-10)-(z-0)/(c-10);
%% 求解
s=solve(f1,f2,f3,f4,x,y,z);
x1=vpa(s.x)
z1=vpa(s.z)
y1=vpa(s.y)
% [x,y,z]= ellipsoid(0,0,0,1.43,1.43,1.43);
% ss=surf(x,y,z) %画出来球axis equal
% ss.FaceAlpha = 0.6;
hold on;
[x2,y2,z2]= ellipsoid(a-10,b-10,c-10,1.6,1.6,1.6);
sss=surf(x2,y2,z2);
sss.FaceAlpha = 0.4;
axis equal
scatter3(x1,y1,z1,'r','filled')
hold on;
plot3(x1,y1,z1)
hold on;
xlabel('x')
ylabel('y')
zlabel('z')
axis equal
☀ 记录自己学习的同时,也希望能对大家有所帮助,欢迎留言交流!