c语言画渐开线

Python022

c语言画渐开线,第1张

看不出没执行,但是你这line的参数应该是直线的两个端点吧,你传2组一样的数进去,形成不了直线吧。

另外,xy感觉没必要用float数组,直接float x1,x2,y1,y2即可。反正你每次2个端点都是算出来的,用了一次就不用了,存不存的没必要。

1、程序流程图分析与改写

因为参考程序流程图中存在两个if分支交叉的情况,这种程序流程无法直接用循环结构实现,所以需要对程序流程图进行改写。

在改写之前需要对整个流程图进行分析。

参考流程图可以分成两部分,如上图所示,第一部分是红色框部分,对应理论计算中的从动件运动规律部分;第二部分是黄色框部分,对应各种直角坐标计算以及刀具中心轨迹的计算。

根据流程图可知,通过让运动角φ在[0,2pi]区间内变化,可以根据理论计算出相应的凸轮轮廓曲线坐标以及运动轨迹,所以可以用φ作为循环条件,每循环一次让φ值加1即可。

但由于存在许用压力角,当实际演算出来的压力角大于许用压力角的时候,需要增大基圆半径r0,并对φ值清零重新演算。所以要在循环结构当中增加相应的条件判断分支,以便实现此功能。

调整之后的程序流程图如下所示:

2、计算过程的实现

2.1 从动件运动规律

        if (phi<=Phi)

        {

            // 计算推程s

            s = h * ( phi/Phi - 1/(2*PI) * sin(2*PI/Phi)*phi)

            ds= h/Phi*(1-cos(2*PI/Phi)*phi)

        }

        else

        {

            if (phi<=(Phi+PhiS))

            {

                s=h

                ds=0

            }

            else

            {

                if (phi<=(Phi+PhiS+dPhi))

                {

                    // 计算回程s

                    s = h * ( 1 - (phi-Phi-PhiS)/dPhi + 1/(2*PI)*sin(2*PI/dPhi)*(phi-Phi-PhiS) )

                    ds= h * ( 1- 1/dPhi + 1/(dPhi) * cos(2*PI/dPhi) * (phi - Phi -dPhiS))

                }

                else

                {

                    s=0

                    ds=0

                }

            }

        }

2.2 理论轮廓直角坐标

        // 计算理论轮廓直角坐标x,y

        s0=sqrt(pow(r0,2)+pow(e,2))

        x=(s0+s)*cos(phi) - e*sin(phi)

        y=(s0+s)*sin(phi) - e*cos(phi)

2.3 实际轮廓直角坐标

        dx = -(s0+s)*sin(phi)-e*cos(phi)

        dy = (s0+s)*cos(phi) - e*sin(phi)

        // 计算实际轮廓直角坐标X,Y

        X = x - rT * dy/(sqrt(pow(dx,2)+pow(dy,2)))

        Y = y + rT * dx/(sqrt(pow(dx,2)+pow(dy,2)))

2.4 刀具中心轨迹

2.5 压力角

        // 计算压力角a,找出最大值amax

        a = atan(abs(ds-e)/(s+s0)) 3、总程序 4、输出样例

部分输出样例如下所示:

moose@debian:~/p_project/2015xxxx_百度知道/c_cam$ ./a.out 

r0=45.000000, phi=0.000000, s=0.000000, ds=0.375000, a=0.151973, amax=0.151973, x=45.705578, y=-8.000000, X=36.347839, Y=-9.637916, xc=0.000000, yc=0.000000

r0=45.000000, phi=1.000000, s=0.000171, ds=0.000514, a=0.151973, amax=0.151973, x=17.963154, y=34.137642, X=14.285400, Y=25.378410, xc=0.000000, yc=0.000000

...

r0=45.000000, phi=119.000000, s=0.020388, ds=-44.188843, a=0.849510, amax=0.849510, x=45.426483, y=-24.410582, X=36.129913, Y=-22.455133, xc=0.000000, yc=0.000000

r0=45.000000, phi=120.000000, s=0.020559, ds=-44.563328, a=0.849509, amax=0.849510, x=32.584461, y=20.035658, X=25.916046, Y=13.269401, xc=0.000000, yc=0.000000

r0=45.000000, phi=121.000000, s=45.000000, ds=0.000000, a=0.087970, amax=0.849510, x=-12.404583, y=90.987427, X=-11.110419, Y=81.575989, xc=0.000000, yc=0.000000

...

r0=45.000000, phi=180.000000, s=45.000000, ds=0.000000, a=0.087970, amax=0.849510, x=-47.874447, y=-67.881332, X=-42.879730, Y=-59.800316, xc=0.000000, yc=0.000000

r0=45.000000, phi=181.000000, s=44.999592, ds=30.035320, a=0.237949, amax=0.849510, x=39.310745, y=-87.747360, X=35.209457, Y=-79.178261, xc=0.000000, yc=0.000000

r0=45.000000, phi=182.000000, s=44.999187, ds=30.534101, a=0.237950, amax=0.849510, x=90.353180, y=-26.939114, X=80.926598, Y=-25.760328, xc=0.000000, yc=0.000000

...

r0=45.000000, phi=360.000000, s=0.000000, ds=0.000000, a=0.173278, amax=0.849510, x=-20.637590, y=46.097324, X=-16.412260, Y=37.588707, xc=0.000000, yc=0.000000