Mtalab 空间直线和球形的交点以及图像绘制

Mtalab 空间直线和球形的交点以及图像绘制

前言

本文包括利用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

☀ 记录自己学习的同时,也希望能对大家有所帮助,欢迎留言交流!


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值