标题:求助用C语言运行的凸轮曲线程序有问题,请大侠解决,有重谢!
只看楼主
adong2000
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2022-9-18
结帖率:50%
已结贴  问题点数:20 回复次数:2 
求助用C语言运行的凸轮曲线程序有问题,请大侠解决,有重谢!
各位大侠,本人是一名机械工程师,是一个编程小白,但需要求解一个凸轮零件的曲线,我在网上找到了相关的技术资料,在电脑里下载了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;重谢
搜索更多相关主题的帖子: double 运行 最小 设定 线程 
2022-09-18 10:04
apull
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:三体星系
等 级:版主
威 望:185
帖 子:1404
专家分:8479
注 册:2010-3-16
得分:20 
论坛的编译器就能运行。
有几处符号没写上。下面是补全的,要输出文件,把注释的几句去掉注释。
程序代码:
#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);
}


2022-09-18 19:09
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
公式错不错 我不知道,我只是把语法改正确。
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);
}
2022-09-19 08:34



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-510079-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.202717 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved