📄 newsimu.c
字号:
#include <stdio.h>
#include <graphics.h>
#include <math.h>
#include "key.h"
char buf[100];
char filename[200];
int down_flag= 0;
long x_c,y_c;
int cur_x,cur_y;
int old_x,old_y;
int step;
int cur_status;
int o_x1,o_y1,o_x2,o_y2;
int first_flag;
FILE *fpe;
int gdriver = DETECT, gmode=18, errorcode;
int ret,i,x1,y1,x2,y2;
long minx,miny,maxx,maxy;
long curx,cury,x,y,oldx,oldy;
int ch;
int sx,sy;
main()
{
int si;
x_c = y_c = 0;
strcpy(filename,"c:\\jgs\\test.23");
fpe = fopen(filename,"rb");
ret = get_a_line(fpe);
minx = miny = maxx = maxy = curx = cury = 0;
sx = sy = 0;
si = 0;
while (ret != -1){
if ((buf[0] == 'P')||(buf[0] == 'B')){
x = atoi(&(buf[1]));
i = 1;
while (buf[i++] != ' ');
y = atoi(&(buf[i]));
curx += x;
cury += y;
if (minx > curx)
minx = curx;
if (maxx < curx)
maxx = curx;
if (miny > cury)
miny = cury;
if (maxy < cury)
maxy = cury;
if (buf[0] == 'P'){
if (abs(x-sx)+abs(y-sy) > 16){
i = 0;
}
sx = x;
sy = y;
}
}
si ++;
ret = get_a_line(fpe);
}
fclose(fpe);
show_graph();
printf("%ld %ld\n",x_c,y_c);
ch = getch();
step = 10;
old_x = -100;
cur_x = 320;
cur_y = 240;
cur_status = 0;
first_flag = 0;
show_x();
while (ch != ESC){
if (ch == 0){
ch = getch();
switch (ch){
case LEFT:
cur_x -= step;
break;
case RIGHT:
cur_x += step;
break;
case UP:
cur_y -= step;
break;
case DOWN:
cur_y += step;
break;
case PGUP:
step *= 2;
if (step > 40)
step = 40;
break;
case PGDN:
step /= 2;
if (step == 0)
step = 1;
break;
}
}
else{
if (ch == 13){
if (cur_status == 0){
o_x1 = cur_x;
o_y1 = cur_y;
cur_status = 1;
}
else if (cur_status == 1){
cur_status = 2;
show_x();
cur_status = 0;
show_graph1();
getch();
show_graph();
}
}
}
show_x();
ch = getch();
}
closegraph();
}
get_a_line(FILE *fpe)
{
int i,ch;
ch = fgetc(fpe);
if (ch == EOF)
return -1;
i = 0;
while ((ch != 13)&&(ch != 10)&&(ch != EOF)){
buf[i++] = ch;
ch = fgetc(fpe);
}
buf[i] = 0;
if (ch == EOF)
return -1;
fgetc(fpe);
return 0;
}
show_x()
{
setwritemode(XOR_PUT);
o_x2 = cur_x;
o_y2 = cur_y;
if (cur_status != 0){
if (first_flag == 1){
line(o_x1,o_y1,old_x,o_y1);
line(o_x1,old_y,old_x,old_y);
line(o_x1,o_y1,o_x1,old_y);
line(old_x,o_y1,old_x,old_y);
}
else
first_flag = 1;
}
if (cur_status == 1){
if (cur_y >= o_y1)
cur_y = o_y2 = o_y1+abs(cur_x - o_x1)*480./640.;
else
cur_y = o_y2 = o_y1-abs(cur_x - o_x1)*480./640.;
line(o_x1,o_y1,o_x2,o_y1);
line(o_x1,o_y2,o_x2,o_y2);
line(o_x1,o_y1,o_x1,o_y2);
line(o_x2,o_y1,o_x2,o_y2);
}
if (old_x != -100){
line(old_x-10,old_y,old_x+10,old_y);
line(old_x,old_y-10,old_x,old_y+10);
}
line(cur_x-10,cur_y,cur_x+10,cur_y);
line(cur_x,cur_y-10,cur_x,cur_y+10);
old_x = cur_x;
old_y = cur_y;
}
show_graph()
{
fpe = fopen(filename,"rb");
ret = get_a_line(fpe);
oldx = oldy = 0;
initgraph(&gdriver, &gmode, "c:\\jgs");
setcolor(WHITE);
while (ret != -1){
if ((buf[0] == 'P')||(buf[0] == 'B')){
x = atoi(&(buf[1]));
i = 1;
while (buf[i++] != ' ');
y = atoi(&(buf[i]));
curx = oldx + x;
cury = oldy + y;
x_c += x;
y_c += y;
if (fabs(maxx-minx) > fabs(maxy-miny)){
x1 = 480.0*(oldx-(maxx+minx)/2.0)/(maxx-minx) + 240;
y1 = 240 - 480.0*(oldy-(maxy+miny)/2.0)/(maxx-minx);
x2 = 480.0*(curx-(maxx+minx)/2.0)/(maxx-minx) + 240;
y2 = 240 - 480.0*(cury-(maxy+miny)/2.0)/(maxx-minx);
}
else{
x1 = 480.0*(oldx-(maxx+minx)/2.0)/(maxy-miny) + 240;
y1 = 240 - 480.0*(oldy-(maxy+miny)/2.0)/(maxy-miny);
x2 = 480.0*(curx-(maxx+minx)/2.0)/(maxy-miny) + 240;
y2 = 240 - 480.0*(cury-(maxy+miny)/2.0)/(maxy-miny);
}
if (down_flag == 0)
setcolor(GREEN);
else
setcolor(WHITE);
line(x1,y1,x2,y2);
oldx = curx;
oldy = cury;
}
if (strcmp(buf,"O 32 63") == 0){
down_flag = 1;
}
if (strcmp(buf,"O 0 63") == 0){
down_flag = 0;
}
ret = get_a_line(fpe);
}
fclose(fpe);
}
show_graph1()
{
int tt;
int m_x,m_y;
if (o_x1 > o_x2){
tt = o_x1;
o_x1 = o_x2;
o_x2 = tt;
}
if (o_y1 > o_y2){
tt = o_y1;
o_y1 = o_y2;
o_y2 = tt;
}
m_x = o_x1 + (o_x2-o_x1)/2;
m_y = o_y1 + (o_y2-o_y1)/2;
fpe = fopen(filename,"rb");
ret = get_a_line(fpe);
oldx = oldy = 0;
initgraph(&gdriver, &gmode, "c:\\jgs");
setcolor(WHITE);
while (ret != -1){
if ((buf[0] == 'P')||(buf[0] == 'B')){
x = atoi(&(buf[1]));
i = 1;
while (buf[i++] != ' ');
y = atoi(&(buf[i]));
curx = oldx + x;
cury = oldy + y;
x_c += x;
y_c += y;
if (fabs(maxx-minx) > fabs(maxy-miny)){
x1 = 480.0*(oldx-(maxx+minx)/2.0)/(maxx-minx) + 240;
y1 = 240 - 480.0*(oldy-(maxy+miny)/2.0)/(maxx-minx);
x2 = 480.0*(curx-(maxx+minx)/2.0)/(maxx-minx) + 240;
y2 = 240 - 480.0*(cury-(maxy+miny)/2.0)/(maxx-minx);
}
else{
x1 = 480.0*(oldx-(maxx+minx)/2.0)/(maxy-miny) + 240;
y1 = 240 - 480.0*(oldy-(maxy+miny)/2.0)/(maxy-miny);
x2 = 480.0*(curx-(maxx+minx)/2.0)/(maxy-miny) + 240;
y2 = 240 - 480.0*(cury-(maxy+miny)/2.0)/(maxy-miny);
}
x1 = 320.0*(x1-m_x)/(o_x2-m_x) + 320;
y1 = 240.0*(y1-m_y)/(o_y2-m_y) + 320;
x2 = 320.0*(x2-m_x)/(o_x2-m_x) + 320;
y2 = 240.0*(y2-m_y)/(o_y2-m_y) + 320;
if (down_flag == 0)
setcolor(GREEN);
else
setcolor(WHITE);
line(x1,y1,x2,y2);
oldx = curx;
oldy = cury;
}
if (strcmp(buf,"O 32 63") == 0){
down_flag = 1;
}
if (strcmp(buf,"O 0 63") == 0){
down_flag = 0;
}
ret = get_a_line(fpe);
}
fclose(fpe);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -