两个有意思的函数图像
1产生类似烟效果的函数:
最近主要在看粒子系统,比如烟,雾等自然状态的描拟便是非常吸引人的一个领域,而这里有一种基于一个并不复杂函数的烟的轨迹的生成,看上去效果还不错.:)
函数的表达式如下:
x=a0*theta^a1+a2*sin(a3*theta)+a4*sin(a5*theta);
y=a0*theta+a1*sin(a2*theta)+a3*sin(a4*theta);
所以,自变量仅有一个角度值theta,相当的简单,不过,将这种函数调配出来可是要有艺术和数学的双重感觉的啊。下面是效果图:
看上去还真有那么一回事,这里取的系数值ai分别为:
a0=0.5;a1=1.5;a2=0.2;a3=0.5;a4=1.0;a5=1;
Matlab Code:
a0=0.5;
a1=1.5;
a2=0.2;
a3=0.5;
a4=1.0;
a5=1;
theta=-10*pi:pi/12:10*pi;
x=zeros(1,length(theta));
y=zeros(1,length(theta));
for i=1:1:length(theta)
x(i)=a0*theta(i)^a1+a2*sin(a3*theta(i))+a4*sin(a5*theta(i));
y(i)=a0*theta(i)+a1*sin(a2*theta(i))+a3*sin(a4*theta(i));
end
plot(x,y);
2行星轮的轨迹绘制:
行星轮的运动可以通过下面的图片来说明,两个圆盘被固定在一根杆子的两端,每个圆盘分别以各自的圆心作角速度为w1和w2的圆周运动,而整个横杆则以角速度wGan以自身中点为圆心作匀速圆周运动。
图2:行星轮系统
最近在一次创新思维讲座中,就看到有同学设计了基于行星轮的剃须刀,之所以这样做,是有原因的,那是因为当w2,w1均较大于wGan时,这个行星轮的运动轨迹几乎可以扫过整个行星轮系统的外半径,可见效率之高,也足可见那位同学之创意中既有着想象,又有着理性的思考,令人佩服。
图3:运行轨迹效果图
Matlab Code:
%--data set for round--%
o1x=-50;o1y=0;w1=pi/12;r1=25;theta1=0;
o2x=50;o2y=0;w2=pi/12;r2=25;theta2=0;
o1x=-r1;o2x=r2;
%--data set for gan--%
rGan=26;wGan=pi/240;
thetaGan=0;
%--points data--%
p1xArr=zeros(1,60);p1yArr=zeros(1,60);
p2xArr=zeros(1,60);p2yArr=zeros(1,60);
%--init point pos--%
theta1=pi;theta2=0;
i=1;
while thetaGan<2*pi
%--save datas--%
p1xArr(i)=o1x+r1*cos(theta1);p1yArr(i)=o1y+r1*sin(theta1);
p2xArr(i)=o2x+r2*cos(theta2);p2yArr(i)=o2y+r2*sin(theta2);
%--update motion,datas--%
o1x=rGan*cos(thetaGan+pi);o1y=rGan*sin(thetaGan+pi);
o2x=rGan*cos(thetaGan);o2y=rGan*sin(thetaGan);
theta1=theta1+w1;
theta2=theta2+w2;
thetaGan=thetaGan+wGan;
i=i+1;
end
hold on
scatter(p1xArr,p1yArr);
scatter(p2xArr,p2yArr);
hold off