求大神帮助检查错误,小白解决不了了,,,

ERbbit ERbbit 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我按照书上的程序敲了一个图轮廓线的设计的程序,但是书上给的是一段升程的,我设计的是三段,如下图滚子位移曲线所示。我对书上程序有一些改动,为了能够运行也改了很多地方。我使用的是VS2017,一些所需库什么的百度也都安了,但是程序运行后却不能得到正常图像,我对C语言的了解几乎为零,求各位帮助,谢谢啦下面是效果图,类似
  /*REM Design of disk cam profile */
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<graphics.h>
#include <conio.h>
#define PI 3.1415926
void sds();
void sdjdj();
void scos();
void ssin();
void zbz(int);
void hds();
void hdjdj();
void hcos();
void hsin();
void dral();
void htl();
float s[360], v[360], a[360], x[360], z[360], x1[360], z1[360];
float r0, e, rr, h, d, d0, ds, d02, ds2, d03, ds3, d01, ds1, pi, p, s0, d1, d2, sn, hn, i, d3, d4, d5;
float maxs, maxv, maxa, yy, ip, d0p, sd, cd, dss, dx, dy, q, ss;
void ingraph();
void ingraph()
{
int gd = 0, gm, ErrorCode;
initgraph(&gd, &gm, "");
ErrorCode = 0;
if (ErrorCode != 0)
{
printf("Crahpics System Error:%s\n", "ErrorCode");
exit(1);
}
setbkcolor(0);
}
int SNG(float va)
{
if (va > 0)return 1;
if (va == 0)return 0;
if (va < 0)return -1;
}
main()
{
maxs = 0;maxv = 0;maxa = 0;
p = PI / 180;
printf("Design of disk cam profile\n");
printf("---------------------\n");
printf("input r0=");scanf("%f", &r0);
printf("input rr=");scanf("%f", &rr);
printf("input e= ");scanf("%f", &e);
printf("input h= ");scanf("%f", &h);
printf("rise motion law sn=");scanf("%f", &sn);
printf("input d0=");scanf("%f", &d0);
printf("input ds=");scanf("%f", &ds);
printf("input d01=");scanf("%f", &d01);
printf("input ds1=");scanf("%f", &ds1);
printf("input d02=");scanf("%f", &d02);
printf("input ds2=");scanf("%f", &ds2);
printf("return motion law hn=");scanf("%f", &hn);
printf("input d03=");scanf("%f", &d03);
printf("input ds3=");scanf("%f", &ds3);
s0 = sqrt(r0*r0 - e*e);
for (i = 0;i <= d0;i++)
{
int sn = 0;
switch (sn)
{
case 1:
sds();break;
case 2:
sdjdj();break;
case 3:
scos();break;
default:
ssin();break;
}
zbz(i);
}
d1 = d0 + ds;
for (i = d0 + 1;i <= d1;i++)
{
int i=0;
s[i] = h;v[i] = 0;a[i] = 0;
zbz(i);
}
d2 = d1 + d01 + ds1;
for (i = d1 + 1;i <= d2;i++)
{
int i=0;
s[i] = h+2;v[i]= 0;a[i] = 0;
zbz(i);
}
d3 = d2 + d02 + ds2;
for (i = d2 + 1;i <= d3;i++)
{
int i=0;
s[i] = h+4;v[i] = 0;a[i] = 0;
zbz(i);
}
d4 = d3 + d03;
for (i = d3 + 1;i <= d4;i++)
{
int hn=0;
switch (hn)
{
case 1:
hds();break;
case 2:
hdjdj();break;
case 3:
hcos();break;
case 4:
hsin();break;
}
zbz(i);
}
d5 = d4 + ds3;
for (i = d4 + 1;i <= d5;i++)
{
int i=0;
s[i] = 0;v[i] = 0;a[i] = 0;
zbz(i);
}
printf("Coodinate of disk cam profile and motion law\n");
printf("-------------------------------------\n");
printf(" i\t x\t z\t\t x1\t z1\t s\t v\t a\n");
for(i=0;i<=360;i=i+30)
{
int i=0;
printf("%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f\n",
i, x[i], z[i], x1[i], z1[i], s[i], v[i], a[i]);
if (fabs(s[i]) > maxs) maxs = fabs(s[i]);
if (fabs(v[i]) > maxv) maxv = fabs(v[i]);
if (fabs(a[i]) > maxa) maxa = fabs(a[i]);
}
_getch();
ingraph();
dral();
_getch();
closegraph();
ingraph();
htl();
_getch();
closegraph();
}
void dral()
{
int i;
printf(" s");
printf("\t\tmaxs(mm) =%f\n", maxs);
printf(" v");
printf("\t\tmaxv(m) =%f\n,maxv/1000");
printf(" a");
printf("\t\tmaxa(m) =%f\n,maxa/1000");
printf("\n\n\n\n\n\n\n\n\n\n\n\t\t\t\t\tdlt\n\n");
printf(" 0 90 180 ");
printf(" 270 360\n");
line(0, 240, 380, 240);
line(380, 240, 373, 235);
line(380, 240, 373, 245);
line(10, 480, 10, 0);
line(10, 0, 5, 7);line(10, 0, 15, 7);
putpixel(10, 240 - s[1], 3);
moveto(10, 240 - s[1]);
setcolor(YELLOW);
line(35, 10, 15, 10);
for (i = 0;i <= 360;i++)
lineto(i + 10, 240 - s[i] * maxs*0.4);
putpixel(10, 240 - v[1], 4);
moveto(10, 240 - v[1]);
setcolor(RED);
line(35, 25, 45, 25);
for (i = 0;i <= 360;i++)
lineto(i + 10, 240 - v[i] * maxv*0.4);
putpixel(10, 240 - a[1], 14);
moveto(10, 240 - a[1]);
setcolor(BLUE);
line(35, 40, 45, 40);
for (i = 0;i <= 360;i++)
lineto(i + 10, 240 - a[i] * maxa*0.2);
}
void hcos()
{
int i=0;
s[i] = 0.5*(h+4)*(1 + cos(PI*(i - d3) / d03));
v[i] = -0.5*(h+4)*PI*sin(PI*(i - d3) / d03) / (d03*p);
a[i] = -0.5*(h+4)*PI*PI*cos(PI*(i - d3) / d03) / ((d03*p)*(d03*p));
}
void hdjdj()
{
int i = 0;
if (i <= (d3 + d03 / 2))
{
s[i] = (h + 4)*(1 - 2 * ((i - d3) / d03)*((i - d3) / d03));
v[i] = -4 * (h + 4)*(i - d3)*p / ((d03*p)*(d03*p));
a[i] = -4 * (h + 4) / ((d03*p)*(d03*p));
}
else
{
s[i] = 2 * (h + 4)*(d03 + d3 - i)*(d03 + d3 - i) / (d03*d03);
v[i] = -4 * (h + 4)*(d03 + d3 - i)*p / ((d03*p)*(d03*p));
a[i] = 4 * (h + 4) / ((d03*p)*(d03*p));
}
}
void hds()
{
int i=0;
s[i] = (h + 4)*(1 - (i - d3) / d03);
v[i] = -(h + 4) / (d03*p);
a[i] = 0;
}
void hsin()
{
int i=0;
s[i] = (h + 4)*(1 - (i - d3) / d03 + sin(2 * PI*(i - d3) / d03) / (2 * PI));
v[i] = -(h + 4)*(1 - cos(2 * PI*(i - d3) / d03)) / (d03*p);
a[i] = -2 * PI*(h + 4)*sin(2 * PI*(i - d3) / d03) / ((d03*p)*(d03*p));
}
void htl()
{
line(0, 240, 640, 240);
line(640, 240, 633, 245);
line(640, 240, 633, 235);
line(320, 20, 320, 460);
line(320, 20, 325, 27);
line(320, 20, 315, 27);
circle(320, 240, r0);
circle(320, 240, 5);
line(305, 255, 316, 244);
line(335, 255, 324, 244);
line(303, 255, 337, 255);
line(305, 255, 298, 263);
line(315, 255, 308, 263);
line(325, 255, 318, 263);
line(335, 255, 328, 263);
circle(320, 240, e);
putpixel(320 + e, 240, 3);
int yy = 0;
moveto(320 + e, 240);
while (yy<240)
{
line(320 + e, -yy + 240, 320 + e, -yy + 225);
moveto(320 + e, -yy + 225);
yy = yy + 20;
if (yy>r0) lineto(320 + e, -yy + 240);
}
line(e + 315, 40, e + 315, 90);
line(e + 325, 40, e + 325, 90);
line(e + 315, 50, e + 307, 60);
line(e + 315, 60, e + 307, 70);
line(e + 315, 70, e + 307, 80);
line(e + 315, 80, e + 307, 90);
line(e + 333, 40, e + 325, 50);
line(e + 333, 50, e + 325, 60);
line(e + 333, 60, e + 325, 70);
line(e + 333, 70, e + 325, 80);
putpixel(320 + x[1], 240 - z[1], 3);
moveto(x[1] + 320, -z[1] + 240);
for (i = 0;i<360;i++)
{
int i=0;
lineto(x[i] + 320, -z[i] + 240);
circle(x[i] + 320, -z[i] + 240, rr);
moveto(x[i] + 320, 240 - z[i]);
}int i;
putpixel(x1[1] + 320, -z1[1] + 240, 3);
moveto(x1[1] + 320, -z1[1] + 240);
for (i = 0;i <= 360; i++)
lineto(x1[i] + 320, -z1[i] + 240);
}
void scos()
{
int i=0;
s[i] = 0.5*h*(1 - cos(PI*i / d0));
v[i] = 0.5*h*PI*sin(PI*i / d0) / (d0*p);
a[i] = 0.5*h*PI*PI*cos(PI*i / d0) / ((d0*p)*(d0*p));
}
void sdjdj()
{
int ip, d0p;
ip = i*p;d0p = d0*p;
if (i <= d0 / 2)
{
int i=0;
s[i] = 2 * h*(i / d0)*(i / d0);
v[i] = 4 * h*ip / (d0p*d0p);
a[i] = 4 * h / (d0p*d0p);
}
else
{
int i=0;
s[i] = h - 2 * h*((d0 - i) / d0)*((d0 - i) / d0);
v[i] = 4 * h*(d0 - i)*p / (d0p*d0p);
a[i] = -4 * h / (d0p*d0p);
}
}
void sds()
{
int i=0;
s[i] = h*i / d0;
v[i] = h / (d0*p);
a[i] = 0;
}
void ssin()
{
int i=0;
s[i] = h*(i / d0 - sin(2 * PI*i / d0) / (2 * PI));
v[i] = h*(1 - cos(2 * PI*i / d0)) / (d0*p);
a[i] = 2 * PI*h*sin(2 * PI*i / d0) / ((d0*p)*(d0*p));
}
void zbz(int j)
{
ss = s0 + s[j];d = j*p;
sd = sin(d);cd = cos(d);
x[j] = ss*sd + e*cd;
z[j] = ss*cd - e*sd;
dss = v[j] - e;
dx = dss*sd + ss*cd;
dy = dss*cd - ss*sd;
if (fabs(dy)>1E-10)
{
q = atan(dx / (-dy));
q = q - (SNG(-dy) - 1)*PI / 2;
}
else
{
q = PI / 2;
q = q - (SNG(-dy) - 1)*PI / 2;
}
x1[j] = x[j] - rr*cos(q);
z1[j] = z[j] - rr*sin(q);
}
...全文

相关推荐

评论 11
收藏 已收藏
分享
返回顶部
ERbbit
图形处理/算法 19,463 成员 50,678 内容