1701011030
所以当ω足够大时,会看到白球在碰撞后会不停反而加速,而且如果碰前的角速度越大,加速持续的时间也就越长。而且最后白球将以的速度向前运动。
1701011031
1701011032
②低杆碰撞
1701011033
1701011034
1701011035
低杆球碰撞如图9-34所示,在低杆球中,碰撞前白球具有逆时针绕质心的角速度ω,设碰撞前瞬间白球的质心速度为,由于假设小球均为光滑均质球体,因此球之间的摩擦忽略不计,所以白球的转动不影响碰撞的结果。
1701011036
1701011037
1701011038
1701011039
1701011040
图9-34 两台球低杆碰撞分析
1701011041
1701011042
1701011043
1701011044
由动量守恒和机械能守恒可知,被碰撞的球碰后速度,白球碰后瞬间质心速度为0,但有一个逆时针的角速度ω,由于摩擦力Ff产生的阻抗力矩的作用,最终白球会做纯滚运动。设碰撞后t时间,白球开始纯滚动,且纯滚动时的角速度和质心速度分别为。
1701011045
1701011046
1701011047
则由纯滚动条件有:;
1701011048
1701011049
1701011050
又由动量矩定理:;
1701011051
1701011052
1701011053
动量定理:。
1701011054
1701011055
最后解得:
1701011056
1701011057
1701011058
1701011059
1701011060
1701011061
所以可以看出,打出低杆后,最后白球将以的速度反向运动,而且随着碰撞前的转动角速度而改变,因此只有使得碰撞前的角速度达到一定值,才可能打出理想的效果。
1701011062
1701011063
采用MATLAB程序进行桌球游戏模拟,程序设计如下:
1701011064
1701011065
%台球模拟程序 clc,clear,close all %清屏和清除变量 warning off %消除警告 figure(‘color’,[1,1,1]) axis([-1.6,12.6,-1.6,10.7]) %确定坐标轴参数范围 hold on %保持当前图形及轴系的所有特性 fill([-2,13,13,-2],[-2,-2,11,11],[0,1,0]); %填充底座背景 fill([-1,12,12,-1],[-1,-1,10,10],[0,0.5,0]); %填充底座背景 ball1=line(0,5,‘color’,‘r’,‘marker’,’.’,‘erasemode’,‘xor’,‘markersize’,60); %设置小球颜色、大小和线条的擦拭方式 ball2=line(8,9,‘color’,‘g’,‘marker’,’.’,‘erasemode’,‘xor’,‘markersize’,60); %设置小球颜色、大小和线条的擦拭方式 ball3=line(-1,-1,‘color’,‘g’,‘marker’,’.’,‘erasemode’,‘xor’,‘markersize’,80); %设置左下角圆的颜色、大小和线条擦拭方式 ball4=line(12,-1,‘color’,‘g’,‘marker’,’.’,‘erasemode’,‘xor’,‘markersize’,80); %设置右下角圆的颜色、大小和线条擦拭方式 ball3=line(-1,10,‘color’,‘g’,‘marker’,’.’,‘erasemode’,‘xor’,‘markersize’,80); %设置左上角圆的颜色、大小和线条擦拭方式 ball4=line(12,10,‘color’,‘g’,‘marker’,’.’,‘erasemode’,‘xor’,‘markersize’,80); %设置右上角圆颜色、大小和线条擦拭方式 title(‘台球模拟运动比赛’, ‘color’,‘r’,‘fontsize’,15);%图形标题 pause(1) %设定暂停时间的长度 t=0;dt=0.005; %设置初始数值 while t<7.2 %设定横轴范围 t=t+dt; %设置横轴计算公式 y=1/2*t+5; %设置纵轴计算公式 set(ball1,‘xdata’,t,‘ydata’,y) %设置球的运动 drawnow; %刷新屏幕 end %结束 while t<8.8 %设定横轴范围 t=t+dt; %设置横轴计算公式 y=1/2*t+5; %设置纵轴计算公式 set(ball2,‘xdata’,t,‘ydata’,y) %设置球的运动 drawnow; %刷新屏幕 end %结束 while t<11.5 %设定横轴范围 t=t+dt; %设置横轴计算公式 y=-1/2*t+14.3; %设置纵轴计算公式 set(ball2,‘xdata’,t,‘ydata’,y) %设置球的运动 drawnow; %刷新屏幕 end %结束 while t>-0.5 %设置横轴范围 t=t-dt; %设置横轴计算公式 y=1/2*t+2.90; %设置纵轴计算公式 set(ball2,‘xdata’,t,‘ydata’,y) %设置球的运动 drawnow; %刷新屏幕 end %结束 while t<6 %设置横轴范围 t=t+dt; %设置横轴计算公式 y=-1/2*t+2.40; %设置纵轴计算公式 set(ball2,‘xdata’,t,‘ydata’,y) %设置球的运动 drawnow; %刷新屏幕 end %结束 while t<11.5 %设置横轴范围 t=t+dt; %设置横轴计算公式 y=1/2*t-3.0; %设置纵轴计算公式 set(ball2,‘xdata’,t,‘ydata’,y) %设置球的运动 drawnow; %刷新屏幕 end %结束 while t>-2 %设置横轴范围 t=t-dt; %设置横轴计算公式 y=-t*7.65/12.9+9.57; %设置纵轴计算公式 set(ball2,‘xdata’,t,‘ydata’,y) %设置球的运动 drawnow; %刷新屏幕 end %结束 text(2,5,‘恭喜!进球了啊!’,‘fontsize’,16,‘color’,‘r’); %显示字幕的颜色和大小
1701011066
1701011067
运行程序输出图形如图9-35~图9-38所示。
1701011068
1701011069
1701011070
1701011071
1701011072
1701011073
图9-35 台球运动初始化 图9-36 两球碰撞瞬间 图9-37 台球受击在桌面运动 图9-38 台球进球瞬间 如图9-35~图9-38所示,桌球在受力的方向上移动,通过正碰,两桌球交换速度,粉红色小球不断地在台球桌上运动,直到最后进入孔洞为止。
1701011074
1701011075
这就是程序设计之美,完美的程序设计,让虚拟现实变得更加现实,人们均可以乐在其中。
1701011076
1701011077
1701011078
1701011079
[
上一页 ]
[ :1.70101103e+09 ]
[
下一页 ]