声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3125|回复: 8

[共享资源] [原创]摆线的形成过程

[复制链接]
发表于 2008-5-5 13:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
        摆线被称为“几何学中的海伦”,在物理中称为“最速降线”。摆线是一类重要的曲线,齿轮的齿廓、偏心轮、凸轮以及许多机器零件的轮廓线都是摆线,摆线的实用价值与椭圆、抛物线、渐开线等曲线相比毫不逊色。
        早在公元前140年前后,希腊天文学家希帕克就知道此种曲线。
        德沙格在1639年,欧拉在1781年分别圆外旋轮线,德沙格首次用此种曲线来设计齿轮的齿形。

        最近在上“行星传动设计”的课中,有一章是专门介绍摆线针轮行星传动的。一部分内容是摆线的形成原理及方程。用MATLAB编了几个程序,演示摆线的形成过程。
function cycloid(r,n)
fig=figure;
set(fig,'Color',[1,1,1]);

% r=100;
% n=4;

theta=0:pi/100:2*pi;
x=r*(n*theta-sin(n*theta));% 摆线x坐标
y=r*(1-cos(n*theta)); % 摆线y坐标
x0=r*sin(theta-pi);% 圆x坐标
y0=r*cos(theta-pi); % 圆y坐标
xa=[-r,8*n*r];% 坐标轴x
ya=[-2.5*r,5*r];% 坐标轴y
m=length(theta);

mov=avifile('cycloid.avi');
for i=1:m
    plot(xa,[0,0],'k',[0,0],ya,'k');
    hold on
    AA=[cos(n*theta(i)) sin(n*theta(i));-sin(n*theta(i)) cos(n*theta(i))]*[x0;y0];
    xr=AA(1,:);
    yr=AA(2,:);
    xr=xr+r*n*theta(i);
    yr=yr+r;
    plot(xr,yr);
    plot(xr(1,[1,(m-1)/2]),yr(1,[1,(m-1)/2]),'k');
    plot(xr(1,[(m-1)/4,(m-1)*3/4]),yr(1,[(m-1)/4,(m-1)*3/4]),'k');
    plot(xr(1),yr(1),'og','linewidth',2,'markeredgecolor','k','markerfacecolor','g');
    plot(x(1:i),y(1:i),'r','linewidth',2);
    axis equal
    axis off
    F=getframe(gcf);
    mov=addframe(mov,F);
    hold off
end
mov = close(mov);


[ 本帖最后由 eight 于 2008-5-5 15:45 编辑 ]
a.gif

评分

2

查看全部评分

回复
分享到:

使用道具 举报

 楼主| 发表于 2008-5-5 13:40 | 显示全部楼层
定义:当半径为b的圆沿着半径为a的定圆的外侧无滑动地滚动时,动圆圆周上的一点p所描绘的点的轨迹。
        在以定圆中心为原点的直角坐标系中,其方程为
        x=(a+b)cosθ-bcos[(a+b)θ/b];
        y=(a+b)sinθ-bsin[(a+b)θ/b];

function epicycloid(ra,rb)
fig=figure;
set(fig,'Color',[1,1,1]);
theta=0:pi/50:2*pi;
xa=ra*cos(theta); % 定圆x坐标
ya=ra*sin(theta); % 定圆y坐标
xb=rb*cos(theta-pi); % 动圆x坐标
yb=rb*sin(theta-pi); % 动圆y坐标
xc=(ra+rb)*cos(theta)-rb*cos((ra+rb)*theta/rb); % 摆线x坐标
yc=(ra+rb)*sin(theta)-rb*sin((ra+rb)*theta/rb); % 摆线y坐标
xax=[-1.2*ra,1.2*ra];
yax=[-1.2*ra,1.2*ra];
m=length(theta);
mov=avifile('epicycloid.avi');
for i=1:m
    plot(xax,[0,0],'k',[0 0],yax,'k');
    hold on
    plot(xa,ya,'k','linewidth',2);
    plot(xc(1,[1:i]),yc(1,[1:i]),'r','linewidth',2);
    AA=[cos((ra+rb)*theta(i)/rb) -sin((ra+rb)*theta(i)/rb);sin((ra+rb)*theta(i)/rb) cos((ra+rb)*theta(i)/rb)]*[xb;yb];
    xbb=AA(1,:);
    ybb=AA(2,:);
    xbb=xbb+(ra+rb)*cos(theta(i));
    ybb=ybb+(ra+rb)*sin(theta(i));
    plot(xbb,ybb,'b','linewidth',2);
    plot(xbb(1),ybb(1),'o','linewidth',2,'markeredgecolor','k','markerfacecolor','g');
    plot([xbb(1) xbb((m-1)/2)],[ybb(1) ybb((m-1)/2)],'k',[xbb((m-1)/4) xbb(3*(m-1)/4)],[ybb((m-1)/4) ybb(3*(m-1)/4)],'k')
    axis([-1.2*(ra+rb),1.2*(ra+rb),-1.2*(ra+rb),1.2*(ra+rb)]);
    axis equal
    axis off
    F=getframe(gcf);
    mov=addframe(mov,F);
    hold off
end
mov = close(mov);

[ 本帖最后由 paradiseboy 于 2008-5-5 13:50 编辑 ]
b.gif
 楼主| 发表于 2008-5-5 13:43 | 显示全部楼层
定义:当半径为b的圆沿着半径为a(a>b)的圆的内侧无滑动滚动时,动圆圆周上一点p的轨迹。
        在以定圆中心为原点的直角坐标系中,其方程为:
        X=(a-b)cosθ+bcos[(a-b)θ/b];
        Y=(a-b)sinθ-bsin[(a-b)θ/b];

function hypocycloid(ra,rb)
fig=figure;
set(fig,'Color',[1,1,1]);
theta=0:pi/100:2*pi;
xa=ra*cos(theta); % 定圆x坐标
ya=ra*sin(theta); % 定圆y坐标
xb=rb*cos(theta); % 动圆x坐标
yb=rb*sin(theta); % 动圆y坐标
xc=(ra-rb)*cos(theta)+rb*cos((ra-rb)*theta/rb); % 摆线x坐标
yc=(ra-rb)*sin(theta)-rb*sin((ra-rb)*theta/rb); % 摆线y坐标
xax=[-1.2*ra,1.2*ra];
yax=[-1.2*ra,1.2*ra];
m=length(theta);
mov=avifile('hypocycloid.avi');
for i=1:m
    plot(xax,[0,0],'k',[0 0],yax,'k');
    hold on
    plot(xa,ya,'k','linewidth',2);
    plot(xc(1,[1:i]),yc(1,[1:i]),'r','linewidth',2);
    AA=[cos((ra-rb)*theta(i)/rb) sin((ra-rb)*theta(i)/rb);-sin((ra-rb)*theta(i)/rb) cos((ra-rb)*theta(i)/rb)]*[xb;yb];
    xbb=AA(1,:);
    ybb=AA(2,:);
    xbb=xbb+(ra-rb)*cos(theta(i));
    ybb=ybb+(ra-rb)*sin(theta(i));
    plot(xbb,ybb,'b','linewidth',2);
    plot(xbb(1),ybb(1),'o','linewidth',2,'markeredgecolor','k','markerfacecolor','g');
    plot([xbb(1) xbb((m-1)/2)],[ybb(1) ybb((m-1)/2)],'k',[xbb((m-1)/4) xbb(3*(m-1)/4)],[ybb((m-1)/4) ybb(3*(m-1)/4)],'k')
    axis equal
    axis off
    F=getframe(gcf);
    mov=addframe(mov,F);
    hold off
end
mov = close(mov);

[ 本帖最后由 paradiseboy 于 2008-5-5 13:48 编辑 ]
c.gif
发表于 2008-5-5 15:14 | 显示全部楼层
很好,请问是原创吗
 楼主| 发表于 2008-5-5 15:37 | 显示全部楼层
回管理员:
我不知道是否有其他人也编过这样的程序,上面的程序是我自己编写的。
程序中摆线是由摆线方程直接计算出来的,要理想一些,应该由动圆上一点的轨迹构成。我试了试,那样的话程序要稍麻烦一些,运行起来速度也稍慢。
程序写得不好,还请各位多多指教。

[ 本帖最后由 eight 于 2008-5-5 15:44 编辑 ]
发表于 2008-5-5 15:44 | 显示全部楼层
原帖由 paradiseboy 于 2008-5-5 15:37 发表
回管理员:
我不知道是否有其他人也编过这样的程序,上面的程序是我自己编写的。
程序中摆线是由摆线方程直接计算出来的,要理想一些,应该由动圆上一点的轨迹构成。我试了试,那样的话程序要稍麻烦一些,运行起来 ...
别紧张,我只是问问,既然是原创,就给你多加点威望
发表于 2008-5-5 20:26 | 显示全部楼层
我只能说见过与第一个相似的程序。建议版主设置为“精华”:victory:

[ 本帖最后由 huright 于 2008-5-5 21:19 编辑 ]
发表于 2008-5-6 16:14 | 显示全部楼层
很漂亮,真的好厉害哦,学习学习!
发表于 2008-5-6 16:33 | 显示全部楼层
原帖由 huright 于 2008-5-5 20:26 发表
建议版主设置为“精华”:victory:
已经设置
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-16 00:28 , Processed in 0.290837 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表