注册 登录
编程论坛 C语言论坛

求助用C语言运行的凸轮曲线程序有问题,请大侠解决,有重谢!

adong2000 发布于 2022-09-18 10:04, 961 次点击
各位大侠,本人是一名机械工程师,是一个编程小白,但需要求解一个凸轮零件的曲线,我在网上找到了相关的技术资料,在电脑里下载了DEV-C++的编程软件,运行了这个文件,但不行;
源程序如下

 #include "stdio.h"
#include "math.h"
void main ()
{
 FILE*fp;
 double pi=3.1415926
 double L2,L1,L3,L4,L5;
 double L0;
 double xb,yb;
 double r1=20.0;//凸轮直径(可设定)
 double r2=23.5;//支持工件滚子直径(可设定)
 double Rmin=9.50,Rmax=69.0;//支持工件半径差值(可设定)
 double xita=165.0*pi/180.0;//两臂之间的夹角(可设定)
 double airfmin=0.0, airfmax=0.0, airf=0.0;
 double beita=0.0 omg=0.0;
 double t=0.0//加持工件半径差值
       xb=0.0;
    yb=0.0;
    L1=116.726, L2=116.726;//支撑臂长度(可设定)
    L3=80.0, L4=85.0;//工件回转中心与侧臂回转中心的距离(可设定)
    L5=104.0;//夹持最小工件时滚子到凸轮最小端面的距离(可设定)
    L0=sqrt(L3*L3+L4*L4);
    omg=atan(L3/L4);
    airfmin=acos((L1*L1+L0*L0-(Rmin+r2)*(Rmin+r2))/(2*L1*L0));//最小弧度
    airfmax=acos((L1*L1+L0*L0-(Rmax+r2)*(Rmax+r2))/(2*L1*L0));//最大弧度
       fp=fopen("c:\tulunquxian.dat","wb");
 for(t=0.0; t<=Rmax-Rmin; t=t+0.1)      
{
                 airf=acos((L1*L1+L0*L0-(Rmin+r2+t)*(Rmin+r2+1))/(2*L1*L0));
    if(airf<airfmin) break;
    if(airf>airfmax) break;
                beita=pi-xita-omg+airf;
    xb=L4+L2*cos(beita)-(L5+(Rmin+r2)/2+t);
    yb=L3-L2*sin(betia);
    fprintf(fp,"%1f%1f%1f\r\n",xb,yb,0.0);
    printf("xb=%1f,yb=%1f,\n",xb,yb);
}
     fclose(fp);
}

  请教各位大侠,我在电脑了安装什么软件来运行这个程序才能得到曲线的点的文件;我的电脑系统是WIN10;; 我的电话13589930219; QQ号3301141889;重谢
2 回复
#2
apull2022-09-18 19:09
论坛的编译器就能运行。
有几处符号没写上。下面是补全的,要输出文件,把注释的几句去掉注释。
程序代码:

#include "stdio.h"
#include "math.h"
void main ()
{

 //FILE*fp;
double pi=3.1415926;

 double L2,L1,L3,L4,L5;

 double L0;

 double xb,yb;

 double r1=20.0;//凸轮直径(可设定)
double r2=23.5;//支持工件滚子直径(可设定)
double Rmin=9.50,Rmax=69.0;//支持工件半径差值(可设定)
double xita=165.0*pi/180.0;//两臂之间的夹角(可设定)
double airfmin=0.0, airfmax=0.0, airf=0.0;

 double beita=0.0,omg=0.0;

 double t=0.0;//加持工件半径差值
    xb=0.0;
    yb=0.0;
    L1=116.726, L2=116.726;//支撑臂长度(可设定)
    L3=80.0, L4=85.0;//工件回转中心与侧臂回转中心的距离(可设定)
    L5=104.0;//夹持最小工件时滚子到凸轮最小端面的距离(可设定)
    L0=sqrt(L3*L3+L4*L4);
    omg=atan(L3/L4);
    airfmin=acos((L1*L1+L0*L0-(Rmin+r2)*(Rmin+r2))/(2*L1*L0));//最小弧度
    airfmax=acos((L1*L1+L0*L0-(Rmax+r2)*(Rmax+r2))/(2*L1*L0));//最大弧度
      
//fp=fopen("c:\tulunquxian.dat","wb");
for(t=0.0; t<=Rmax-Rmin; t=t+0.1)      
{
                 airf=acos((L1*L1+L0*L0-(Rmin+r2+t)*(Rmin+r2+1))/(2*L1*L0));
    if(airf<airfmin) break;
    if(airf>airfmax) break;
    beita=pi-xita-omg+airf;
    xb=L4+L2*cos(beita)-(L5+(Rmin+r2)/2+t);
    yb=L3-L2*sin(beita);//
   
//fprintf(fp,"%1f%1f%1f\r\n",xb,yb,0.0);
    printf("xb=%1f,yb=%1f,\n",xb,yb);
}
     //fclose(fp);
}


只有本站会员才能查看附件,请 登录
#3
rjsp2022-09-19 08:34
公式错不错 我不知道,我只是把语法改正确。
fopen("c:\tulunquxian.dat","wb"); 除了'\t'这个错误之外,你的程序有权限存取C:根目录的文件吗?我不知道;
fprintf(fp,"%1f%1f%1f 中的 %1f 看不懂,我怀疑你想写的是 %.1f,但没法肯定。

程序代码:
#define _USE_MATH_DEFINES
#include <stdio.h>
#include <math.h>

int main( void )
{
    double r1 = 20.0; //凸轮直径(可设定)
    double r2 = 23.5; //支持工件滚子直径(可设定)
    double Rmin=9.50, Rmax=69.0; //支持工件半径差值(可设定)
    double xita = 165.0*M_PI/180.0; //两臂之间的夹角(可设定)

    double L1=116.726, L2=116.726;//支撑臂长度(可设定)
    double L3=80.0, L4=85.0;//工件回转中心与侧臂回转中心的距离(可设定)
    double L5=104.0;//夹持最小工件时滚子到凸轮最小端面的距离(可设定)

    double L0 = hypot(L3,L4);
    double omg = atan(L3/L4);
    double airfmin=acos((L1*L1+L0*L0-(Rmin+r2)*(Rmin+r2))/(2*L1*L0));//最小弧度
    double airfmax=acos((L1*L1+L0*L0-(Rmax+r2)*(Rmax+r2))/(2*L1*L0));//最大弧度
        
    FILE* fp = fopen("d:/tulunquxian.dat","wb");
    if( !fp )
        puts( "创建文件失败." );
    for( double t=0.0; t<=Rmax-Rmin; t=t+0.1 )//加持工件半径差值
    {
        double airf = acos((L1*L1+L0*L0-(Rmin+r2+t)*(Rmin+r2+1))/(2*L1*L0));
        if(airf<airfmin) break;
        if(airf>airfmax) break;
        double beita = M_PI-xita-omg+airf;
        double xb = L4+L2*cos(beita)-(L5+(Rmin+r2)/2+t);
        double yb = L3-L2*sin(beita);
        if(fp) fprintf( fp, "%1f%1f%1f\r\n",xb,yb,0.0);
        printf("xb=%1f,yb=%1f,\n",xb,yb);
    }
    if(fp) fclose(fp);
}
1