题目如上

解决方案 »

  1.   

    已知齿轮模数m、齿轮齿数z、分度圆压力角α、齿顶高系数ha*、顶隙系数C*、齿轮变位系数x,且为等变位齿轮传动。
    1)如图1(a)所示,在直角坐标系下,以原点为圆心分别作出齿顶圆da、分度圆d、基圆db、齿根圆df。各圆直径分别为:
    da=mz+2(ha+x)m
    d=mz
    db=mzcosa
    df=mz-2(ha+c-x)m
    2)渐开线方程为:
    x=(1/2)mzcosα(sint-tcost)
    y=(1/2)mzcosα(cost+tsint)
    上式中t为渐开线在任意一点K的滚动角,它等于K点的展角θK与K点压力角αK之和。即t=θK+αK。公式中α、t均为弧度。为了能够完整的画出一个齿轮渐开线齿廓,t的范围应适当取大一些,可取0<t<1。渐开线从基圆上A点起始且与齿顶圆交与B点,然后将齿顶圆以外的渐开线裁减掉。
      

  2.   

    http://www.ikepu.com.cn/machinery/sundry_machine/gear.htm大家看看,这是有关齿轮的介绍
      

  3.   

    http://www.ikepu.com.cn/machinery/sundry_machine/gear.htm
    这是有关齿轮的介绍
    我觉得对大家解决我这个问题有点帮助吧
      

  4.   

    http://www.cnnbzj.com/bz_last.asp?p=2&classid=J17bluebohe(薄荷):没难度,那你不想要这100 分了吗
    能解决就送你100分
    说到做到
      

  5.   

    老大,我的毕业设计就有关于画齿轮的,不过在我北京同学机子里,不在这里
    好象关于inva的问题要解方程,实在没办法,我是近似代替的,其他的问题都解决了
      

  6.   

    楼主,给点已知条件啊,不然大家怎么解题。to  回复人: singlehero(傲剑狂刀) 
    中心距圆整的话呢?不等位变换么?
    另:请解决一下inva的问题好么,困扰我好长时间了,
        能的话,另开贴,给100分;谢谢。
    -------------------------哎,像刚进校们时候制图老师说的,
    -------------------------四年之后,全还给老师了;
    -------------------------都忘了,没学会,
    -------------------------除非手头还有书
      

  7.   

    偶对高数没有研究 sorry :)
      

  8.   

    我在网吧,机器没有VC,在View类的OnDraw()中添加代码
    #include "math.h"
    #define PI 3.141592653589793262648
    OnDraw()
    {
    double t;
    double alf=20*PI/180;//设置压力角20度double m=20;
    double z=5;
    t=0
    x=(1/2)*m*z*cos(alf)*(sin(t)-t*cos(t))+200;
    y=(1/2)*m*z*cos(alf)*(cos(t)+t*sin(t))+200;
    pDC->MoveTo(x,y);
    for(i=0;i<360;i++)
    {
    t=i*PI/180;
    x=(1/2)*m*z*cos(alf)*(sin(t)-t*cos(t))+200;
    y=(1/2)*m*z*cos(alf)*(cos(t)+t*sin(t))+200;
    pDC->LineTo(x,y);
    }
    }
    基本就是这样子吧,因为我这里没有C环境,所以无法调试,我也不知道结果如何
      

  9.   

    渐开线的极坐标方程:
    设基圆半径为Rb,则极坐标方程为:
    row = Rb / cos(a)
    theta = tg(a) - a
    row为极径,theta为极角,a为参量,其意义是齿轮齿廓在该点的压力角。
      

  10.   

    我帮你调试
    double x;//未定义
    double y;
    t==0;//分号
    for(int i....) //丢了int 你没c环境,已经好厉害了结果...
      

  11.   

    结果怎么样?谢谢!赫赫
    这两天为了赚点分数还要大过节的来CSDN加班
      

  12.   

    我的vc6可能有问题
    能运行,可是x==y==200;
    调式的时候,说找不到cos(),可是又不出错误
      

  13.   

    原因可能是这样,每次x y增加的太少,而LineTo(int,int)
    可能每次把xy float->int
    增加的全部舍掉了,所以一直是200,200
      

  14.   

    直径是100,没问题的啊,我去找一个tc看看,我的qq25068791
    谢谢!
      

  15.   

    bluebohe师兄厉害,我白忙了半天,有机会再讨教^_^
      

  16.   

    bluebohe(薄荷)和crybird(寒号鸟):我谢谢你们了
    可是你们讨论了那么,好像还是不对
    pDC->MoveTo(x,y);在这一句中,x与y都要是整型的
    编译通不过的cupidvenus(小鱼儿):你能不能给个详细的解答呢singlehero(傲剑狂刀):你那些资料是你刚查的,还是原来就在你的肚子里呢
    要是是你肚子里的就好了
    那我们有讨论的地步了
      

  17.   

    #include "math.h"
    #define PI 3.141592653589793262648
    OnDraw()
    {
    double t;
    double alf=20*PI/180;//设置压力角20度
    int i=0;
    double x=0,y=0;
    double m=20;
    double z=5;
    t=0;
    x=(1.0/2.0)*m*z*cos(alf)*(sin(t)-t*cos(t))+200;
    y=(1.0/2.0)*m*z*cos(alf)*(cos(t)+t*sin(t))+200;
    pDC->MoveTo(x,y);
    for(i=0;i<360;i++)
    {
    t=i*PI/180;
    x=(1.0/2.0)*m*z*cos(alf)*(sin(t)-t*cos(t))+200;
    y=(1.0/2.0)*m*z*cos(alf)*(cos(t)+t*sin(t))+200;
    pDC->LineTo((int)x,(int)y);
    }
    }
      

  18.   

    bluebohe(薄荷)和crybird(寒号鸟):你说得那里面的x和y可能是相对于屏幕的坐标,我们要把小数转成相对于屏幕的像素,你们看看我说得对吗朵不然好像没有办法弄哦
      

  19.   

    bluebohe(薄荷) ( ) 信誉:100  2003-09-13 08:25:00  得分:0 
     
     
      #include "math.h"
    #define PI 3.141592653589793262648
    OnDraw()
    {
    double t;
    double alf=20*PI/180;//设置压力角20度
    int i=0;
    double x=0,y=0;
    double m=20;
    double z=5;
    t=0;
    x=(1.0/2.0)*m*z*cos(alf)*(sin(t)-t*cos(t))+200;
    y=(1.0/2.0)*m*z*cos(alf)*(cos(t)+t*sin(t))+200;
    pDC->MoveTo(x,y);
    for(i=0;i<360;i++)
    {
    t=i*PI/180;
    x=(1.0/2.0)*m*z*cos(alf)*(sin(t)-t*cos(t))+200;
    y=(1.0/2.0)*m*z*cos(alf)*(cos(t)+t*sin(t))+200;
    pDC->LineTo((int)x,(int)y);
    }
    }  
     按照你这个,我那个线是画出来了
    可是有一部分在外面,我想要控制线的位置和大小,也就是我可以输入控制参数来决[定大小和位置,我该怎么办到呢
      

  20.   

    那你就弹出一个对话框,设定一下中心位置,和模数\齿数然后在OnDraw里面调用对话框里面的数据就行啦,赫赫,你都三个角了,用VC搞对话框应该没问题把
      

  21.   

    你到底是要画渐开线还是画齿轮?如果要画渐开线就用我的极坐标公式,画齿轮就用singlehero(傲剑狂刀)的公式。
      

  22.   

    cupidvenus(小鱼儿) ( ) 信誉:100  2003-09-13 08:36:00  得分:0 
     
     
      你到底是要画渐开线还是画齿轮?如果要画渐开线就用我的极坐标公式,画齿轮就用singlehero(傲剑狂刀)的公式。
      
     请问你有QQ  吗
    我最终是想要得到任意大小和位置的齿轮,也就是所有参数都可以自已定的齿轮,
    请你了
      

  23.   

    bluebohe(薄荷):你这个贴子好像是十四号发的
    你说得到底是今天(14号)还是明天(15号)
    我想可能是今天吧
      

  24.   

    作了一个函数,主要代码如下,一会发给你测试程序
    //函数说明
    /*
    pDC 设备指针
    dAlf 压力角
    dM 模数
    dScale 比例
    dZ 齿数
    lX 中心点X坐标
    lY 中心点Y坐标
    */
    void DrawGear(CDC *pDC, double dAlf, double dM, double dScale, double dZ, long lX, long lY)
    {
    double t;
    double alf=dAlf*PI/180;//设置压力角20度
    double dA=2*PI/dZ;//每个齿的角度
    double x,y,x1,y1;
    int i=0,j=0;
    t=0;
    CPen *pOldPen,NewPen;
    NewPen.CreatePen(0,1,RGB(255,0,0));
    pOldPen=pDC->SelectObject(&NewPen);
    pDC->MoveTo(0,lY);
    pDC->LineTo(1024,lY);
    pDC->MoveTo(lX,0);
    pDC->LineTo(lX,1000);
    NewPen.DeleteObject();
    NewPen.CreatePen(4,1,RGB(0,0,255));
    pOldPen=pDC->SelectObject(&NewPen);

    //画分度圆
    CRect rect((int)(lX-(1.0/2.0)*dM*dZ*dScale),(int)(lY-(1.0/2.0)*dM*dZ*dScale),
    (int)(lX+(1.0/2.0)*dM*dZ*dScale),(int)(lY+(1.0/2.0)*dM*dZ*dScale));
    pDC->Arc(&rect,CPoint(rect.left,rect.top),CPoint(rect.left,rect.top));
    //画基圆
    rect=CRect::CRect((int)(lX-(1.0/2.0)*dM*dZ*cos(alf)*dScale),(int)(lY-(1.0/2.0)*dM*dZ*cos(alf)*dScale),
    (int)(lX+(1.0/2.0)*dM*dZ*cos(alf)*dScale),(int)(lY+(1.0/2.0)*dM*dZ*cos(alf)*dScale));
    pDC->Arc(&rect,CPoint(rect.left,rect.top),CPoint(rect.left,rect.top));
    //画齿顶圆
    rect=CRect::CRect((int)(lX-(1.0/2.0)*(dM+1)*(dZ)*dScale),(int)(lY-(1.0/2.0)*(dM+1)*(dZ)*dScale),
    (int)(lX+(1.0/2.0)*(dM+1)*(dZ)*dScale),(int)(lY+(1.0/2.0)*(dM+1)*(dZ)*dScale));
    pDC->Arc(&rect,CPoint(rect.left,rect.top),CPoint(rect.left,rect.top));
    //画齿根圆
    rect=CRect::CRect((int)(lX-(1.0/2.0)*(dM-1.25)*dZ*dScale),(int)(lY-(1.0/2.0)*(dM-1.25)*dZ*dScale),
    (int)(lX+(1.0/2.0)*(dM-1.25)*dZ*dScale),(int)(lY+(1.0/2.0)*(dM-1.25)*dZ*dScale));
    pDC->Arc(&rect,CPoint(rect.left,rect.top),CPoint(rect.left,rect.top));
    NewPen.DeleteObject();
    NewPen.CreatePen(0,3,RGB(0,0,0));
    pOldPen=pDC->SelectObject(&NewPen); double dOldX1,dOldY1,dOldX2,dOldY2;
    for(j=0;j<dZ;j++)
    {
    BOOL bDrawArc=TRUE;
    for(i=0;i<720;i++)
    {
    t=i*PI/360;
    x=(1.0/2.0)*dM*dZ*cos(alf)*(sin(t)-t*cos(t))+lX;
    y=(1.0/2.0)*dM*dZ*cos(alf)*(cos(t)+t*sin(t))+lY;
    x1=lX+((x-lX)*cos(dA*j)-(y-lY)*sin(dA*j))*dScale;
    y1=lY-((y-lY)*cos(dA*j)+(x-lX)*sin(dA*j))*dScale;
    //没超过齿顶半径
    if(sqrt((x1-lX)*(x1-lX)+(y1-lY)*(y1-lY))<=(dM+1)*(dZ)*dScale/2)
    {
    if(sqrt((x1-lX)*(x1-lX)+(y1-lY)*(y1-lY))>=(dM-1.25)*dZ*dScale/2)
    {
    if(i!=0)
      

  25.   

    {
    pDC->MoveTo((int)dOldX1,(int)dOldY1);
    pDC->LineTo((int)x1,(int)y1);
    }
    }
    }
    dOldX1=x1;
    dOldY1=y1;
    x1=lX-((x-lX)*cos(dA*j-2*(tan(alf)-alf+dA/4))+(y-lY)*sin(dA*j-2*(tan(alf)-alf+dA/4)))*dScale;
    y1=lY+((x-lX)*sin(dA*j-2*(tan(alf)-alf+dA/4))-(y-lY)*cos(dA*j-2*(tan(alf)-alf+dA/4)))*dScale;
    //超过齿顶半径
    if(sqrt((x1-lX)*(x1-lX)+(y1-lY)*(y1-lY))>(dM+1)*dZ*dScale/2)
    {
    //画齿顶圆
    rect=CRect::CRect((int)(lX-(1.0/2.0)*(dM+1)*(dZ)*dScale),(int)(lY-(1.0/2.0)*(dM+1)*(dZ)*dScale),
    (int)(lX+(1.0/2.0)*(dM+1)*(dZ)*dScale),(int)(lY+(1.0/2.0)*(dM+1)*(dZ)*dScale));
    pDC->Arc(&rect,CPoint((int)x1,(int)y1),CPoint((int)dOldX1,(int)dOldY1));
    break;
    }
    if(sqrt((x1-lX)*(x1-lX)+(y1-lY)*(y1-lY))>=(dM-1.25)*dZ/2*dScale)
    {
    if(i!=0)
    {
    if(bDrawArc==TRUE)
    {
    //画齿根圆
    rect=CRect::CRect((int)(lX-(1.0/2.0)*(dM-1.25)*dZ*dScale),(int)(lY-(1.0/2.0)*(dM-1.25)*dZ*dScale),
    (int)(lX+(1.0/2.0)*(dM-1.25)*dZ*dScale),(int)(lY+(1.0/2.0)*(dM-1.25)*dZ*dScale));
    double dAng=dA-2*(tan(alf)-alf+dA/4);
    double dX3=lX+(x1-lX)*cos(dAng)-(y1-lY)*sin(dAng);
    double dY3=lY+((y1-lY)*cos(dAng)+(x1-lX)*sin(dAng));

    pDC->Arc(&rect,CPoint((int)dX3,(int)dY3),CPoint((int)x1,(int)y1));
    bDrawArc=FALSE;
    }
    {
    pDC->MoveTo((int)dOldX2,(int)dOldY2);
    pDC->LineTo((int)x1,(int)y1);
    }
    }
    }
    dOldX2=x1;
    dOldY2=y1;

    }

    }

    pDC->SelectObject(pOldPen);}
      

  26.   

    NND接分,俺连续干了两天,主要是以前学的东西差不多忘光了,又找资料有写代码的,苦啊,哈哈
      

  27.   

    我已经重新给你发了邮件,我再程序里把齿顶和齿根的计算搞混了在上面的函数中把(dM+1)*(dZ)替换成(dM)*(dZ+1),(dM-1.25)*dZ替换成(dM)*(dZ-1.25),(dM+1)*dZ替换成(dM)*(dZ+1)就成了
      

  28.   

    up,hehe,高手真是多,我是来学习的。