classdef ball_wan<handle
properties
r;
s;
v;
x;
y;
z;
x0;
y0;
z0;
vx;
vy;
vz;
g=-9.8;
dt=0.1;
frame;
end
methods
function obj=ball_wan(X,Y,Z,R)
obj.x=X;
obj.y=Y;
obj.z=Z;
obj.r=R;
obj.vx=zeros(size(X));
obj.vy=zeros(size(X));
obj.vz=zeros(size(X));
end
function motion(obj,a,b)
obj.vz=obj.vz+obj.dt*obj.g;
obj.x=obj.x+obj.vx*obj.dt;
obj.y=obj.y+obj.vy*obj.dt;
obj.z=obj.z+obj.vz*obj.dt;
obj.x0=obj.x+obj.vx*obj.dt;
obj.y0=obj.y+obj.vy*obj.dt;
obj.z0=obj.z+obj.vz*obj.dt;
filter=(obj.z-obj.r<=(a-b)/2|obj.z0-obj.r<=(a-b)/2)&obj.vz<0;
obj.vz(filter)=-obj.vz(filter);
obj.z(filter)=(a-b)/2+obj.r(filter);
filter=(obj.z+obj.r>=(a-b)|obj.z0+obj.r>=(a-b))&obj.vz>0;
obj.vz(filter)=-obj.vz(filter);
obj.z(filter)=(a-b)-obj.r(filter);
[y1,z1]=fs.rotateIJ(obj.y,obj.z,30);
[y01,z01]=fs.rotateIJ(obj.y0,obj.z0,30);
x1=obj.x;
x01=obj.x0;
[vy1,vz1]=fs.rotateIJ(obj.vy,obj.vz,30);
filter=(z1-obj.r<=0 | z01-obj.r<=0)&vz1<0;
if z1(filter)<=obj.r(filter)
vz1(filter)=-vz1(filter);
z1(filter)=obj.r(filter);
[obj.vy(filter),obj.vz(filter)]=fs.rotateIJ(vy1(filter),vz1(filter),-30);
[obj.y0(filter),obj.z0(filter)]=fs.rotateIJ(y01(filter),z01(filter),-30);
[obj.y(filter),obj.z(filter)]=fs.rotateIJ(y1(filter),z1(filter),-30);
end
[y1,z1]=fs.rotateIJ(obj.y,obj.z,-30);
[y01,z01]=fs.rotateIJ(obj.y0,obj.z0,-30);
x1=obj.x;
x01=obj.x0;
[vy1,vz1]=fs.rotateIJ(obj.vy,obj.vz,30);
filter=(z1-obj.r<=0 | z01-obj.r<=0)&vz1<0;
if z1(filter)<=obj.r(filter)
vz1(filter)=-vz1(filter);
z1(filter)=obj.r(filter);
[obj.vy(filter),obj.vz(filter)]=fs.rotateIJ(vy1(filter),vz1(filter),30);
[obj.y0(filter),obj.z0(filter)]=fs.rotateIJ(y01(filter),z01(filter),-30);
[obj.y(filter),obj.z(filter)]=fs.rotateIJ(y1(filter),z1(filter),30);
end
[x1,y1]=fs.rotateIJ(obj.x,obj.y,-60);
[x01,y01]=fs.rotateIJ(obj.x0,obj.y0,-60);
z1=obj.z;
z01=obj.z0;
[y2,z2]=fs.rotateIJ(y1,z1,-30);
[y02,z02]=fs.rotateIJ(y01,z01,-30);
x2=x1;
x02=x01;
[vx1,vy1]=fs.rotateIJ(obj.vx,obj.vy,-60);
vz1=obj.vz;
[vy2,vz2]=fs.rotateIJ(vy1,vz1,-30);
vx2=vx1;
filter=(z2-obj.r<=0 | z02-obj.r<=0)&vz2<=0;
if z2(filter)<=obj.r(filter)
vz2(filter)=-vz2(filter);
z2(filter)=obj.r(filter);
[vy1(filter),vz1(filter)]=fs.rotateIJ(vy2(filter),vz2(filter),30);
[obj.vx(filter),obj.vy(filter)]=fs.rotateIJ(vx1(filter),vy1(filter),60);
obj.vz(filter)=vz1(filter);
[y01(filter),z01(filter)]=fs.rotateIJ(y02(filter),z02(filter),30);
[obj.x0(filter),obj.y0(filter)]=fs.rotateIJ(x01(filter),y01(filter),60);
obj.z0(filter)=z01(filter);
[y1(filter),z1(filter)]=fs.rotateIJ(y2(filter),z2(filter),30);
[obj.x(filter),obj.y(filter)]=fs.rotateIJ(x1(filter),y1(filter),60);
obj.z(filter)=z1(filter);
end
[x1,y1]=fs.rotateIJ(obj.x,obj.y,-60);
[x01,y01]=fs.rotateIJ(obj.x0,obj.y0,-60);
z1=obj.z;
z01=obj.z0;
[y2,z2]=fs.rotateIJ(y1,z1,30);
[y02,z02]=fs.rotateIJ(y01,z01,30);
x2=x1;
x02=x01;
[vx1,vy1]=fs.rotateIJ(obj.vx,obj.vy,-60);
vz1=obj.vz;
[vy2,vz2]=fs.rotateIJ(vy1,vz1,30);
vx2=vx1;
filter=(z2-obj.r<=0 | z02-obj.r<=0)&vz2<=0;
if z2(filter)<=obj.r(filter)
vz2(filter)=-vz2(filter);
z2(filter)=obj.r(filter);
[vy1(filter),vz1(filter)]=fs.rotateIJ(vy2(filter),vz2(filter),-30);
[obj.vx(filter),obj.vy(filter)]=fs.rotateIJ(vx1(filter),vy1(filter),60);
obj.vz(filter)=vz1(filter);
[y01(filter),z01(filter)]=fs.rotateIJ(y02(filter),z02(filter),-30);
[obj.x0(filter),obj.y0(filter)]=fs.rotateIJ(x01(filter),y01(filter),60);
obj.z0(filter)=z01(filter);
[y1(filter),z1(filter)]=fs.rotateIJ(y2(filter),z2(filter),-30);
[obj.x(filter),obj.y(filter)]=fs.rotateIJ(x1(filter),y1(filter),60);
obj.z(filter)=z1(filter);
end
[x1,y1]=fs.rotateIJ(obj.x,obj.y,60);
[x01,y01]=fs.rotateIJ(obj.x0,obj.y0,60);
z1=obj.z;
z01=obj.z0;
[y2,z2]=fs.rotateIJ(y1,z1,-30);
[y02,z02]=fs.rotateIJ(y01,z01,-30);
x2=x1;
x02=x01;
[vx1,vy1]=fs.rotateIJ(obj.vx,obj.vy,60);
vz1=obj.vz;
[vy2,vz2]=fs.rotateIJ(vy1,vz1,-30);
vx2=vx1;
filter=(z2-obj.r<=0 | z02-obj.r<=0)&vz2<=0;
if z2(filter)<=obj.r(filter)
vz2(filter)=-vz2(filter);
z2(filter)=obj.r(filter);
[vy1(filter),vz1(filter)]=fs.rotateIJ(vy2(filter),vz2(filter),30);
[obj.vx(filter),obj.vy(filter)]=fs.rotateIJ(vx1(filter),vy1(filter),-60);
obj.vz(filter)=vz1(filter);
[y01(filter),z01(filter)]=fs.rotateIJ(y02(filter),z02(filter),30);
[obj.x0(filter),obj.y0(filter)]=fs.rotateIJ(x01(filter),y01(filter),-60);
obj.z0(filter)=z01(filter);
[y1(filter),z1(filter)]=fs.rotateIJ(y2(filter),z2(filter),30);
[obj.x(filter),obj.y(filter)]=fs.rotateIJ(x1(filter),y1(filter),-60);
obj.z(filter)=z1(filter);
end
[x1,y1]=fs.rotateIJ(obj.x,obj.y,60);
[x01,y01]=fs.rotateIJ(obj.x0,obj.y0,60);
z1=obj.z;
z01=obj.z0;
[y2,z2]=fs.rotateIJ(y1,z1,30);
[y02,z02]=fs.rotateIJ(y01,z01,30);
x2=x1;
x02=x01;
[vx1,vy1]=fs.rotateIJ(obj.vx,obj.vy,60);
vz1=obj.vz;
[vy2,vz2]=fs.rotateIJ(vy1,vz1,30);
vx2=vx1;
filter=(z2-obj.r<=0 | z02-obj.r<=0)&vz2<=0;
if z2(filter)<=obj.r(filter)
vz2(filter)=-vz2(filter);
z2(filter)=obj.r(filter);
[vy1(filter),vz1(filter)]=fs.rotateIJ(vy2(filter),vz2(filter),-30);
[obj.vx(filter),obj.vy(filter)]=fs.rotateIJ(vx1(filter),vy1(filter),-60);
obj.vz(filter)=vz1(filter);
[y01(filter),z01(filter)]=fs.rotateIJ(y02(filter),z02(filter),-30);
[obj.x0(filter),obj.y0(filter)]=fs.rotateIJ(x01(filter),y01(filter),-60);
obj.z0(filter)=z01(filter);
[y1(filter),z1(filter)]=fs.rotateIJ(y2(filter),z2(filter),-30);
[obj.x(filter),obj.y(filter)]=fs.rotateIJ(x1(filter),y1(filter),-60);
obj.z(filter)=z1(filter);
end
end
function obj=move(obj,x,y,z)%移动球心
obj.x=obj.x+x;
obj.y=obj.y+y;
obj.z=obj.z+z;
end
function dlspVolume(obj,uS,udS)%展示球
fs.surfaceValue(obj.x,obj.y,obj.z,obj.r,obj.r);
fs.gener
matlab 简易制作小球在封闭多面体中的运动模型(实现多个小球的同时运动以及增加用户自定义小球的一些参数的补充)
需积分: 0 65 浏览量
2023-11-22
18:21:41
上传
评论
收藏 8.6MB ZIP 举报
万宏鹏r=a(1-sinθ)xiu
- 粉丝: 0
- 资源: 1
最新资源
- html+css+'青春献礼二十大 红色旅游助乡村'为主题的网页设计 2022年参与学校网页设计比赛时完成的
- Unity 模型布尔运算插件
- eCANtools工具,CAN资料包
- 129335283047061xiazaigongjuxiang(去重软件).apk
- Android环境检测工具,检测ksu,lsp,magisk等
- WordPress后台美化插件QuarterAdmin分享
- PCB_Project单片机绘制 (2024-5-11 22-22-13).zip
- nccl-local-repo-ubuntu2204-2.21.5-cuda12.4-1.0-1-amd64
- STM32移植LVGL源码工程 stm32移植GUI-Guider源码 LVGL移植源码
- Screenshot_20240522_084328_com.tencent.mm.jpg
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈