正方形和球体,利用蒙特卡洛计算pi值

本文介绍使用MATLAB绘制三维空间中球体及其内随机点分布的方法,并演示了如何通过编程来判断这些随机点是否位于球体内。此外,还展示了如何通过可视化手段观察点分布情况。
clc;
clear all;
close all;


R = 3;
time = 10000;
origin = [0,0,0];
%%======绘制球体======
t=linspace(0,pi,25);
p=linspace(0,2*pi,25);
[theta,phi]=meshgrid(t,p);
x=R * sin(theta).*sin(phi) + origin(1);
y=R *sin(theta).*cos(phi) + origin(2);
z=R *cos(theta) + origin(3);
surf(x,y,z);
alpha(0.9)
hold on
xlabel('x')
ylabel('y')
zlabel('z')
axis equal;
%%============绘制正方体================
x=([0 1 1 0 0 0;1 1 0 0 1 1;1 1 0 0 1 1;0 1 1 0 0 0]-0.5)*2 * R+origin(1);
y=([0 0 1 1 0 0;0 1 1 0 0 0;0 1 1 0 1 1;0 0 1 1 1 1]-0.5)*2 * R+origin(2);
z=([0 0 0 0 0 1;0 0 0 0 0 1;1 1 1 1 0 1;1 1 1 1 0 1]-0.5)*2 * R+origin(3);
surf(x,y,z);
alpha(0.1)
%%============================
XYZ = unifrnd(-R, R, 3, time);%随机生成正方体内的随机数;
D = pdist([origin;XYZ'],'euclidean');
D = D(1:size(XYZ,2));
Ctime =length(D(D<R));
for ii = 1: time
    if D(ii) < R
         plot3(XYZ(1,ii),XYZ(2,ii),XYZ(3,ii),'r*')
    else
        plot3(XYZ(1,ii),XYZ(2,ii),XYZ(3,ii),'b*')
    end
    hold on
%     pause(0.1)
end
% plot3(XYZ(1,Aindex),XYZ(2,Aindex),XYZ(3,Aindex),'b*')
text(2,2,4.2,'pi')
disp(length(D(D<R))/time * 6)

 

转载于:https://www.cnblogs.com/Kermit-Li/p/6024589.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值