鱼C论坛

 找回密码
 立即注册
查看: 5283|回复: 26

[已解决]easyx库怎么读文件

[复制链接]
发表于 2023-4-12 14:27:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请问easyx库怎么读取文件中的数据然后运用于画图,就是我写一个文件,里面包含了a=10,b=10这两个数据,然后我想在接下来画矩形rectangle(a,b,a+10,b+10)的时候可以直接通过读文件的方式获得a,b的值来进行绘图
最佳答案
2023-4-12 14:33:27
在EasyX库中,可以通过C++标准库提供的文件读取函数来读取文件中的数据,并将其运用于画图。

以下是一个简单的示例程序,展示如何读取一个包含a=10,b=10的文件,然后画出一个矩形:

  1. #include <graphics.h>
  2. #include <fstream>

  3. int main()
  4. {
  5.     // 创建图形窗口
  6.     initgraph(640, 480);

  7.     // 打开文件
  8.     std::ifstream file("data.txt");

  9.     // 读取文件中的数据
  10.     int a, b;
  11.     char eq;
  12.     file >> a >> eq >> b;

  13.     // 画矩形
  14.     rectangle(a, b, a + 10, b + 10);

  15.     // 关闭文件
  16.     file.close();

  17.     // 关闭图形窗口
  18.     closegraph();

  19.     return 0;
  20. }
复制代码


在上面的示例程序中,我们使用了C++标准库提供的文件读取函数std::ifstream来打开文件,然后使用>>运算符将文件中的数据读取到变量a和b中。

接下来,我们使用读取到的a和b的值来画出一个矩形,然后再关闭文件和图形窗口。


需要注意的是,在使用>>运算符读取文件中的数据时,需要使用与文件中数据格式相匹配的格式字符串。

例如,在上面的示例程序中,文件中的数据格式为a=10,b=10,因此我们使用>>运算符读取时,需要使用>>运算符和=符号一起,即>> a >> eq >> b,其中eq是用来接收=符号的变量。

当然,如果你希望读取的数据格式更加灵活,可以考虑使用正则表达式等更高级的技术来处理文件中的数据。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-4-12 14:33:27 | 显示全部楼层    本楼为最佳答案   
在EasyX库中,可以通过C++标准库提供的文件读取函数来读取文件中的数据,并将其运用于画图。

以下是一个简单的示例程序,展示如何读取一个包含a=10,b=10的文件,然后画出一个矩形:

  1. #include <graphics.h>
  2. #include <fstream>

  3. int main()
  4. {
  5.     // 创建图形窗口
  6.     initgraph(640, 480);

  7.     // 打开文件
  8.     std::ifstream file("data.txt");

  9.     // 读取文件中的数据
  10.     int a, b;
  11.     char eq;
  12.     file >> a >> eq >> b;

  13.     // 画矩形
  14.     rectangle(a, b, a + 10, b + 10);

  15.     // 关闭文件
  16.     file.close();

  17.     // 关闭图形窗口
  18.     closegraph();

  19.     return 0;
  20. }
复制代码


在上面的示例程序中,我们使用了C++标准库提供的文件读取函数std::ifstream来打开文件,然后使用>>运算符将文件中的数据读取到变量a和b中。

接下来,我们使用读取到的a和b的值来画出一个矩形,然后再关闭文件和图形窗口。


需要注意的是,在使用>>运算符读取文件中的数据时,需要使用与文件中数据格式相匹配的格式字符串。

例如,在上面的示例程序中,文件中的数据格式为a=10,b=10,因此我们使用>>运算符读取时,需要使用>>运算符和=符号一起,即>> a >> eq >> b,其中eq是用来接收=符号的变量。

当然,如果你希望读取的数据格式更加灵活,可以考虑使用正则表达式等更高级的技术来处理文件中的数据。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2023-4-12 15:14:57 | 显示全部楼层
isdkz 发表于 2023-4-12 14:33
在EasyX库中,可以通过C++标准库提供的文件读取函数来读取文件中的数据,并将其运用于画图。

以下是一个 ...

如果文件中的数据是H1=10.5,H2=36.9这种char无法定义的符号应该怎么读出来
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-12 15:16:22 | 显示全部楼层
大苏打dd 发表于 2023-4-12 15:14
如果文件中的数据是H1=10.5,H2=36.9这种char无法定义的符号应该怎么读出来

如果文件中的数据是H1=10.5,H2=36.9这种字符串格式,其中符号不是char类型的话,你可以使用C++标准库中的字符串处理函数来将其解析成数值类型。

以下是一个示例程序,展示了如何使用std::stringstream来解析包含浮点数的字符串:

  1. #include <graphics.h>
  2. #include <fstream>
  3. #include <sstream>
  4. #include <string>

  5. int main()
  6. {
  7.     // 创建图形窗口
  8.     initgraph(640, 480);

  9.     // 打开文件
  10.     std::ifstream file("data.txt");

  11.     // 读取文件中的数据
  12.     double h1, h2;
  13.     char eq1, eq2, comma;
  14.     std::string line;
  15.     std::getline(file, line);
  16.     std::stringstream ss(line);
  17.     ss >> eq1 >> eq2 >> h1 >> comma >> eq1 >> eq2 >> h2;

  18.     // 画矩形
  19.     rectangle(10, 10, 10 + h1, 10 + h2);

  20.     // 关闭文件
  21.     file.close();

  22.     // 关闭图形窗口
  23.     closegraph();

  24.     return 0;
  25. }
复制代码

在上面的示例程序中,我们首先使用std::getline函数读取整行数据,然后使用std::stringstream来解析字符串。

具体地,我们首先使用>>运算符读取等号=,然后使用>>运算符和std::string类型的变量接收变量名(在这个例子中是eq1和eq2),这一步是为了忽略变量名,只读取数值部分。接下来,我们使用>>运算符和浮点数类型的变量(在这个例子中是h1和h2)来读取数值部分,使用,符号来读取逗号。最后,我们再次使用>>运算符和字符串类型的变量接收等号,这一步也是为了忽略变量名。

需要注意的是,在使用std::stringstream解析字符串时,需要确保字符串格式正确,否则会导致解析错误。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-12 15:18:17 | 显示全部楼层
isdkz 发表于 2023-4-12 15:16
如果文件中的数据是H1=10.5,H2=36.9这种字符串格式,其中符号不是char类型的话,你可以使用C++标准库中的 ...

非常感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-12 15:29:20 | 显示全部楼层
isdkz 发表于 2023-4-12 15:16
如果文件中的数据是H1=10.5,H2=36.9这种字符串格式,其中符号不是char类型的话,你可以使用C++标准库中的 ...

我照猫画虎的写了一段这样的代码,但是运行之后却无法显示出创建的界面,直接就自动退出了,这是怎么回事
  1. #include <graphics.h>
  2. #include <fstream>
  3. #include <sstream>
  4. #include <string>

  5. int main()
  6. {
  7.     // 创建图形窗口
  8.     initgraph(640, 480);

  9.     // 打开文件
  10.     std::ifstream file("D://cwenjian//lizhu.txt");

  11.     // 读取文件中的数据
  12.     double B1, H5;
  13.     char eq1, eq2, comma;
  14.     std::string line;
  15.     std::getline(file, line);
  16.     std::stringstream ss(line);
  17.     ss >> eq1 >> eq2 >> B1 >> comma >> eq1 >> eq2 >> H5;

  18.     // 画矩形
  19.     rectangle(10, 10, 10 + B1, 10 + H5);

  20.     // 关闭文件
  21.     file.close();

  22.     // 关闭图形窗口
  23.     closegraph();

  24.     return 0;
  25. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-12 15:38:32 | 显示全部楼层
大苏打dd 发表于 2023-4-12 15:29
我照猫画虎的写了一段这样的代码,但是运行之后却无法显示出创建的界面,直接就自动退出了,这是怎么回事

这个代码的基本结构是正确的,但存在一些小问题。这个程序从"D://cwenjian//lizhu.txt"文件中读取矩形的宽度(B1)和高度(H5),

然后使用这些数据在图形窗口中绘制一个矩形。以下是一些建议和修改:

1、请确保已经正确安装了 EasyX 图形库。如果没有,请访问 https://www.easyx.cn/ 安装此库。

2、添加必要的头文件。在代码开头包含以下头文件:

  1. #include <iostream>
  2. #include <conio.h>
复制代码


3、更改 initgraph 的调用以使其与 EasyX 兼容。将其更改为:

  1. initgraph(640, 480, SHOWCONSOLE);
复制代码


4、在 rectangle() 函数中,将 B1 和 H5 的类型转换为 int。因为它们默认是 double 类型,而 rectangle 函数需要整数参数。将相关代码更改为:

  1. rectangle(10, 10, 10 + static_cast<int>(B1), 10 + static_cast<int>(H5));
复制代码


5、在程序的最后,添加一个 _getch() 函数调用来等待用户按键。这可以防止图形窗口在绘制矩形后立即关闭。

  1. _getch();
复制代码


考虑到这些修改,以下是修正后的代码:

  1. #include <graphics.h>
  2. #include <fstream>
  3. #include <sstream>
  4. #include <string>
  5. #include <iostream>
  6. #include <conio.h>

  7. int main()
  8. {
  9.     // 初始化图形模式
  10.     initgraph(640, 480, SHOWCONSOLE);

  11.     // 打开文件
  12.     std::ifstream file("D://cwenjian//lizhu.txt");

  13.     // 读取文件中的数据
  14.     double B1, H5;
  15.     char eq1, eq2, comma;
  16.     std::string line;
  17.     std::getline(file, line);
  18.     std::stringstream ss(line);
  19.     ss >> eq1 >> eq2 >> B1 >> comma >> eq1 >> eq2 >> H5;

  20.     // 画矩形
  21.     rectangle(10, 10, 10 + static_cast<int>(B1), 10 + static_cast<int>(H5));

  22.     // 关闭文件
  23.     file.close();

  24.     // 等待用户按键
  25.     _getch();

  26.     // 关闭图形模式
  27.     closegraph();

  28.     return 0;
  29. }
复制代码


现在,这个程序应该能正确地从文件中读取矩形的宽度和高度,并在图形窗口中绘制矩形。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-12 17:22:12 | 显示全部楼层
本帖最后由 大苏打dd 于 2023-4-12 17:23 编辑
isdkz 发表于 2023-4-12 15:38
这个代码的基本结构是正确的,但存在一些小问题。这个程序从"D://cwenjian//lizhu.txt"文件中读取矩形的 ...


我试了一下,现在确实可以出现那个界面了,但是却不能正确的出现图形,用的是rectangle画矩形,结果界面中只出现了一条线段
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-12 17:26:40 | 显示全部楼层
大苏打dd 发表于 2023-4-12 17:22
我试了一下,现在确实可以出现那个界面了,但是却不能正确的出现图形,用的是rectangle画矩形,结果界 ...

出现这个问题的原因可能是矩形的宽度(B1)和高度(H5)值过小,导致绘制的矩形看起来像一条线段。要解决这个问题,您可以尝试以下几种方法:

1、检查 "D://cwenjian//lizhu.txt" 文件中的数据,确保 B1 和 H5 的值足够大以便在图形窗口中清晰可见。例如,如果宽度和高度分别为 100 和 50,文件内容应该类似于:
  1. B=100,H=50
复制代码


2、修改程序以检查从文件中读取的 B1 和 H5 值。在绘制矩形之前,将这些值输出到控制台,以便查看它们是否正确读取。您可以在读取文件数据后添加以下代码:
  1. std::cout << "B1: " << B1 << ", H5: " << H5 << std::endl;
复制代码

这将在控制台窗口中显示 B1 和 H5 的值。

3、如果您确认 B1 和 H5 的值足够大且正确读取,但问题仍然存在,请检查 EasyX 图形库是否已正确安装和配置。您可以尝试创建一个简单的程序,使用固定的宽度和高度值绘制矩形,以确保图形库正常工作:
  1. #include <graphics.h>
  2. #include <conio.h>

  3. int main()
  4. {
  5.     initgraph(640, 480, SHOWCONSOLE);
  6.     rectangle(10, 10, 110, 60); // 绘制一个宽度为 100,高度为 50 的矩形
  7.     _getch();
  8.     closegraph();
  9.     return 0;
  10. }
复制代码


如果使用这个简化的程序仍然不能正确绘制矩形,请检查 EasyX 的安装和配置。如果这个简化的程序可以正确绘制矩形,那么问题可能在于从文件中读取数据的过程。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-12 17:26:49 | 显示全部楼层
大苏打dd 发表于 2023-4-12 17:22
我试了一下,现在确实可以出现那个界面了,但是却不能正确的出现图形,用的是rectangle画矩形,结果界 ...

我把rectangle(100,100,100+B1,100+H5)改成rectangle(B1,H5,B1+100,H5+100)成功出现图形了 问题解决了 谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-12 18:07:41 | 显示全部楼层
isdkz 发表于 2023-4-12 17:26
出现这个问题的原因可能是矩形的宽度(B1)和高度(H5)值过小,导致绘制的矩形看起来像一条线段。要解决 ...

我发现我用这个方法绘制图形时使用line函数会出现 error C2064: term does not evaluate to a function这个错误
  1. std::ifstream file("D://cwenjian//donglixiang2.txt");

  2.     // 读取文件中的数据
  3.     int a,b,L1,L2,L3,B1,H1,hh;
  4.     char eq1, eq2, Enter;
  5.     std::string line;
  6.     std::getline(file, line);
  7.     std::stringstream ss(line);
  8.     ss >> eq1 >> eq2 >> a >> Enter >> eq1 >> eq2 >> b >> Enter >> eq1 >> eq2 >>L1>> Enter >> eq1 >> eq2 >>L2>> Enter >> eq1 >> eq2 >>L3>> Enter >> eq1 >> eq2 >>B1>> Enter >> eq1 >> eq2 >>H1>> Enter >> eq1 >> eq2 >>hh;

  9.     // 画矩形
  10.         init_figure();//初始化图像网格
  11.         line(a,b,a,b+L1);
  12.         line(a,b+L1,a+H1,b+L1);
  13.         line(a+H1,b+L1,a+H1,b+L1-L2);
  14.         rectangle(a+H1,b+L1-L2+2,a+H1+hh,b+L1-2);
  15.         line(a+H1+hh/2,b+L1-L2+2,a+H1+hh/2,b+L1-2);
  16.         line(a+H1,b+L1-L2,a+H1,b+L1-L2-L3/5);
  17.         line(a+H1,b+L1-L2-L3/5,a+H1/3,b);
  18.         line(a,b,a+H1/3,b);
  19.         line(a+H1/4,b,a+H1/4,b-L1/6);
  20.         line(a+H1/4,b-L1/6,a+H1-H1/10,b-L1/6);
  21.         line(a+H1-H1/10,b-L1/6,a+H1-H1/10,b-L1/6+4*L3/5-5*GA);

  22.     // 关闭文件
  23.     file.close();
复制代码

这是这部分代码,我把line函数全部去掉的话代码可以运行,但是rectangle指令画的矩形却不会显示,我想是不是我读取也有问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-12 20:19:17 | 显示全部楼层
本帖最后由 大苏打dd 于 2023-4-12 20:21 编辑
isdkz 发表于 2023-4-12 17:26
出现这个问题的原因可能是矩形的宽度(B1)和高度(H5)值过小,导致绘制的矩形看起来像一条线段。要解决 ...


能帮我再看看吗老哥,我把string后边的line改成了别的字母,line函数不会报错了,但是不会出现图形
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-12 20:22:45 | 显示全部楼层
大苏打dd 发表于 2023-4-12 20:19
能帮我再看看吗老哥,我把string后边的line改成了别的字母,line函数不会报错了,但是不会出现图形

不好意思,我给忘了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-12 20:23:24 | 显示全部楼层
大苏打dd 发表于 2023-4-12 18:07
我发现我用这个方法绘制图形时使用line函数会出现 error C2064: term does not evaluate to a function这 ...

根据您提供的代码,我注意到您使用的 line() 函数名可能与 EasyX 图形库中的 line() 函数发生了冲突。为了解决这个问题,请使用 EasyX 库中的 line() 函数的完整限定名 ::line()。这将避免 C2064 错误。将您的所有 line() 函数调用替换为 ::line()。

关于矩形不显示的问题,这可能是因为您的程序在绘制矩形之后立即关闭了图形窗口。请在关闭文件和关闭图形模式之间添加 _getch() 函数调用,以便在用户按下键盘按键之前保持图形窗口打开:

  1. // 关闭文件
  2. file.close();

  3. // 等待用户按键
  4. _getch();

  5. // 关闭图形模式
  6. closegraph();
复制代码


另外,我注意到您在代码中使用了 init_figure() 函数,但没有提供该函数的定义。如果您使用了自定义函数来初始化图形窗口,请确保在使用这些函数之前正确地定义它们。如果 init_figure() 函数只是初始化图形窗口,您可以直接使用 initgraph(640, 480, SHOWCONSOLE) 替换它。

请尝试这些修改,并查看是否解决了您遇到的问题。如果问题仍然存在,请告诉我,我将继续提供帮助。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-12 20:41:10 | 显示全部楼层
本帖最后由 大苏打dd 于 2023-4-12 20:42 编辑
isdkz 发表于 2023-4-12 20:23
根据您提供的代码,我注意到您使用的 line() 函数名可能与 EasyX 图形库中的 line() 函数发生了冲突。为 ...


我把line换成::line之后代码可以运行,但是界面中不会出现图形,我试着加入了_getch(); 但是仍然没有出现图形,甚至还会出现界面卡住的情况
  1. #include <graphics.h>              // 引用图形库头文件
  2. #include <conio.h>
  3. #include <stdio.h>
  4. #include <windows.h>                                //用到了定时函数sleep()
  5. #include <math.h>
  6. #include <string.h>
  7. #include <fstream>
  8. #include <sstream>
  9. #define PI 3.1416

  10. int r[9][4]={{0,20,130,60},{130,20,260,60},{260,20,390,60},{390,20,520,60},{520,20,650,60},{650,20,780,60},{780,20,870,60},{870,20,960,60},{960,20,1050,60}};//三个按钮的二维数组

  11. float d1,n1,n2,P1,Pz,vf,Bd,H,q,GA=1,f=0.36,vc,kif=0.97,T=6.21,kv=0.75,dz,hs,p1=3.14;
  12. //根据插值法知道轴向力为2000N f为进给量,kif为修正系数,hs为加工孔长度
  13. //v为切削速度17m/min,扭矩定义为T,钻头直径取6.5mm
  14. //kv为切削系数 dz为钻头直径

  15. //a=496,b=172,L1=40,L2=15,L3=32,B1=40,H1=32,hh=2.6,//动力箱
  16. //j=400,k=100,H5=32.5,H6=200,N3=97,N4=66,B2=60,B3=11,H7=56,H8=21,H9=16,N5=71,N6=90,N=19,//立柱侧底座
  17. //m=466,n=160,B=32,L=40,H2=107,H3=63,H4=15.5,N1=28,N2=22;//滑台 有些与动力箱的表达一样但是值不一样(H1)
  18. //按钮判断函数
  19. int button_judge(int x,int y)
  20. {
  21.         if(x>r[0][0] && x<r[0][2] && y>r[0][1] && y<r[0][3])return 1;
  22.         if(x>r[1][0] && x<r[1][2] && y>r[1][1] && y<r[1][3])return 2;
  23.         if(x>r[2][0] && x<r[2][2] && y>r[2][1] && y<r[2][3])return 3;
  24.         if(x>r[3][0] && x<r[3][2] && y>r[3][1] && y<r[3][3])return 4;
  25.         if(x>r[4][0] && x<r[4][2] && y>r[4][1] && y<r[4][3])return 5;
  26.         if(x>r[5][0] && x<r[5][2] && y>r[5][1] && y<r[5][3])return 6;
  27.         if(x>r[6][0] && x<r[6][2] && y>r[6][1] && y<r[6][3])return 7;
  28.         if(x>r[7][0] && x<r[7][2] && y>r[7][1] && y<r[7][3])return 8;
  29.         if(x>r[8][0] && x<r[8][2] && y>r[8][1] && y<r[8][3])return 9;
  30.         return 0;
  31. }
  32. //初始化图像
  33. void init_figure()
  34. {
  35.         int i;
  36.         setrop2(R2_COPYPEN);//当前颜色
  37.         setlinecolor(BLACK);
  38.         setlinestyle(PS_SOLID);//实线
  39.         //外框线
  40.         //点线
  41.         //水平辅助线
  42.        
  43. }

  44. void writehuatai()
  45. {
  46.         float m=466,n=160,B=32,L=40,H2=107,H3=63,H4=15.5,N1=28,N2=22;
  47.         char chy[4]={ 'H' ,'a' ,'h','w' } ;
  48.         int data[4]={ 1 , 2 , 6 ,9        };
  49.         int i ;
  50.         FILE *fp = NULL ;
  51.         fp = fopen("D:\\cwenjian\\huatai.txt","w") ;
  52.         for (i=0 ; i<4 ;i++)
  53.                 fprintf(fp,"%c=%d\n",chy[i],data[i] ) ;
  54.         fprintf(fp,"m=%f\n n=%f\n B=%f\n L=%f\n H2=%f\n H3=%f\n H4=%f\n N1=%f\n N2=%f\n",m,n,B,L,H2,H3,H4,N1,N2);
  55.         fclose(fp);
  56. }
  57. /*void writedonglixiang()
  58. {
  59.         float a,b,L1,L2,L3,B1,H1,hh;
  60.         d1=hs/dz,vc=17,dz=6.5,hs=32;
  61.         vf=kv*vc;
  62.         n1=1000*vf/(p1*dz);
  63.         n2=n1/9550;
  64.         P1=T*n2;
  65.         Pz=4*P1;
  66.        
  67.         if(Pz>=1 && Pz<=1.5)
  68.         {a=196,b=100,L1=32,L2=15,L3=32,B1=32,H1=25,hh=2.6;}//25
  69.         if(Pz>=1.5&&Pz<=3)
  70.         {a=496,b=172,L1=40,L2=15,L3=32,B1=40,H1=32,hh=2.6;}//32

  71.        
  72.         FILE *fp = NULL ;
  73.         fp = fopen("D:\\cwenjian\\donglixiang.txt","w") ;
  74.         fprintf(fp,"a=%f\n b=%f\n L1=%f\n L2=%f\n L3=%f\n B1=%f\n H1=%f\n hh=%f\n",a,b,L1,L2,L3,B1,H1,hh);
  75.         fclose(fp);
  76. }*/
  77. void writelizhu()
  78. {
  79.         float j,k,B1,H5,H6,N3,N4,B2,B3,H7,H8,H9,H1,N5,N6,N;
  80.         j=400,k=100,B1=40,H5=32.5,H6=200,N3=97,N4=66,B2=60,B3=11,H7=56,H8=21,H9=16,H1=6.5,N5=71,N6=90,N=19;

  81.         FILE *fp = NULL ;
  82.         fp = fopen("D:\\cwenjian\\lizhu.txt","w") ;
  83.         fprintf(fp,"j=%f\n k=%f\n B1=%f\n H5=%f\n H6=%f\n N3=%f\n N4=%f\n B2=%f\n B3=%f\n H7=%f\n H8=%f\n H9=%f\n H1=%f\n N5=%f\n N6=%f\n N=%f\n",j,k,B1,H5,H6,N3,N4,B2,B3,H7,H8,H9,H1,N5,N6,N);
  84.         fclose(fp);
  85. }
  86. void writeduozhouxiang()
  87. {
  88.         float w,e,B,H,A0,A,h0,h,L0,L,B1,H1,GA;
  89.         w=850,e=400,B=50,H=50,A0=7.5,A=35,h0=15,h=20,L0=8,L=8,B1=40,H1=32,GA=0.1;

  90.         FILE *fp = NULL ;
  91.         fp = fopen("D:\\cwenjian\\duozhouxiang.txt","w") ;
  92.         fprintf(fp,"w=%f\n e=%f\n B=%f\n H=%f\n A0=%f\n A=%f\n h0=%f\n  h=%f\n L0=%f\n L=%f\n B1=%f\n H1=%f\n GA=%f\n",w,e,B,H,A0,A,h0,h,L0,L,B1,H1,GA);
  93.         fclose(fp);
  94. }

  95. //仿真运行
  96. int simulation()//动力箱
  97. {

  98.        
  99.         d1=hs/dz;//vc=17,dz=6.5,hs=32
  100.         vf=kv*vc;
  101.         n1=1000*vf/(p1*dz);
  102.         n2=n1/9550;
  103.         P1=T*n2;
  104.         Pz=4*P1;

  105.            // 打开文件
  106.     std::ifstream file("D://cwenjian//donglixiang2.txt");

  107.     // 读取文件中的数据
  108.     int a,b,L1,L2,L3,B1,H1,hh,GA;
  109.     char eq1, eq2, comma;
  110.     std::string line;
  111.     std::getline(file, line);
  112.     std::stringstream ss(line);
  113.     ss >> eq1 >> eq2 >> a >> comma >> eq1 >> eq2 >> b >>comma >> eq1 >> eq2 >>L1>> comma >> eq1 >> eq2 >>L2>>comma >> eq1 >> eq2 >>L3>> comma >> eq1 >> eq2 >>B1>> comma>> eq1 >> eq2 >>H1>> comma >> eq1 >> eq2 >>hh;

  114.     // 画矩形
  115.         init_figure();//初始化图像网格
  116.         ::line(a,b,a,b+L1);
  117.         ::line(a,b+L1,a+H1,b+L1);
  118.         ::line(a+H1,b+L1,a+H1,b+L1-L2);
  119.         rectangle(a+H1,b+L1-L2+2,a+H1+hh,b+L1-2);
  120.         ::line(a+H1+hh/2,b+L1-L2+2,a+H1+hh/2,b+L1-2);
  121.         ::line(a+H1,b+L1-L2,a+H1,b+L1-L2-L3/5);
  122.         ::line(a+H1,b+L1-L2-L3/5,a+H1/3,b);
  123.         ::line(a,b,a+H1/3,b);
  124.         ::line(a+H1/4,b,a+H1/4,b-L1/6);
  125.         ::line(a+H1/4,b-L1/6,a+H1-H1/10,b-L1/6);
  126.         ::line(a+H1-H1/10,b-L1/6,a+H1-H1/10,b-L1/6+4*L3/5-5*GA);

  127.     // 关闭文件
  128.     file.close();
  129.        

  130. /*        if(Pz>=1 && Pz<=1.5)
  131.         {a=196,b=100,L1=32,L2=15,L3=32,B1=32,H1=25,hh=2.6;}//25
  132.         if(Pz>=1.5&&Pz<=3)
  133.         {a=496,b=172,L1=40,L2=15,L3=32,B1=40,H1=32,hh=2.6;}//32
  134.         if(Pz<1)
  135.         {a=96,b=100,L1=32,L2=15,L3=32,B1=32,H1=25,hh=2.6;}
  136.         if(Pz>3)
  137.         {a=96,b=500,L1=32,L2=15,L3=32,B1=32,H1=25,hh=2.6;}*/


  138. /*        init_figure();//初始化图像网格
  139.         line(a,b,a,b+L1);
  140.         line(a,b+L1,a+H1,b+L1);
  141.         line(a+H1,b+L1,a+H1,b+L1-L2);
  142.         rectangle(a+H1,b+L1-L2+2,a+H1+hh,b+L1-2);
  143.         line(a+H1+hh/2,b+L1-L2+2,a+H1+hh/2,b+L1-2);
  144.         line(a+H1,b+L1-L2,a+H1,b+L1-L2-L3/5);
  145.         line(a+H1,b+L1-L2-L3/5,a+H1/3,b);
  146.         line(a,b,a+H1/3,b);
  147.         line(a+H1/4,b,a+H1/4,b-L1/6);
  148.         line(a+H1/4,b-L1/6,a+H1-H1/10,b-L1/6);
  149.         line(a+H1-H1/10,b-L1/6,a+H1-H1/10,b-L1/6+4*L3/5-5*GA);*/


  150.         setrop2(R2_COPYPEN);//当前颜色
  151.         setfillcolor(WHITE);
  152.         setlinecolor(WHITE);
  153.         ;//覆盖原进度条区域
  154.        
  155.         setlinestyle(PS_NULL);//无线条
  156.         //设置文字填充背景为透明
  157.         //计算步骤
  158.        
  159.         EndBatchDraw();//结束缓存区

  160.         return 0;
  161. }
  162. int hello()
  163. {
  164.     float TD,a,b,L1,L2,L3,B1,H1,hh;
  165.         d1=hs/dz;//vc=17,dz=6.5,hs=32;
  166.         vf=kv*vc;
  167.         n1=1000*vf/(p1*dz);
  168.         n2=n1/9550;
  169.         P1=T*n2;
  170.         Pz=4*P1;
  171.        
  172.         if(Pz>=1 && Pz<=1.5)
  173.         {TD=25,a=196,b=100,L1=32,L2=15,L3=32,B1=32,H1=25,hh=2.6;}//25
  174.         if(Pz>=1.5&&Pz<=3)
  175.         {TD=32,a=496,b=172,L1=40,L2=15,L3=32,B1=40,H1=32,hh=2.6;}//32

  176.        
  177.         FILE *fp = NULL ;
  178.         fp = fopen("D:\\cwenjian\\donglixiang2.txt","w") ;
  179. //        fprintf(fp,"TD=%f\n a=%f\n b=%f\n L1=%f\n L2=%f\n L3=%f\n B1=%f\n H1=%f\n hh=%f\n",TD,a,b,L1,L2,L3,B1,H1,hh);
  180.         fprintf(fp,"TD=%f, a=%f, b=%f, L1=%f, L2=%f, L3=%f, B1=%f, H1=%f, hh=%f",TD,a,b,L1,L2,L3,B1,H1,hh);
  181.         fclose(fp);
  182.                
  183.         setrop2(R2_COPYPEN);//当前颜色
  184.         setfillcolor(WHITE);
  185.         setlinecolor(WHITE);
  186.         //覆盖原进度条区域
  187.        
  188.         setlinestyle(PS_NULL);//无线条
  189.         //设置文字填充背景为透明
  190.         //计算步骤
  191.        
  192.         EndBatchDraw();//结束缓存区
  193.        
  194.         return 0;
  195. }
  196. float snake()//立柱以及侧底座
  197. {
  198.         float j,k,B1,H5,H6,N3,N4,B2,B3,H7,H8,H9,N5,N6,N;
  199.         j=400,k=100,B1=40,H5=32.5,H6=200,N3=97,N4=66,B2=60,B3=11,H7=56,H8=21,H9=16,N5=71,N6=90,N=19;//H1=6.5
  200.        
  201.         init_figure();//初始化图像网格
  202.         rectangle(j,k,j+N3,k+H5);
  203.         line(j,k+H5,j-(N5-N4),k+H5+40);
  204.         line(j-(N5-N4),k+H5+40,j-(N5-N4),k+H5+H6);
  205.         line(j-(N5-N4),k+H5+H6,j-(N5-N4)+N5,k+H5+H6);
  206.     line(j-(N5-N4)+N5,k+H5+H6,j-(N5-N4)+N5,k+H5);
  207.         rectangle(j,k+H5+H6-15,j+18,k+H5+H6-5);
  208.         rectangle(j+30,k+H5+H6-15,j+48,k+H5+H6-5);//立柱

  209.         rectangle(j-(N5-N4)-N,k+H5+H6,j-(N5-N4)-N+N6,k+H5+H6+H7);
  210.         line(j-(N5-N4)-N,k+H5+H6+H7-4,j-(N5-N4)-N+(2*N6)/3,k+H5+H6+H7-4);
  211.         line(j-(N5-N4)-N+(2*N6)/3,k+H5+H6+H7-4,j-(N5-N4)-N+(2*N6)/3+2,k+H5+H6+H7-6);
  212.         line(j-(N5-N4)-N+(2*N6)/3+2,k+H5+H6+H7-6,j-(N5-N4)-N+(2*N6)/3+10,k+H5+H6+H7-6);
  213.         line(j-(N5-N4)-N+(2*N6)/3+10,k+H5+H6+H7-6,j-(N5-N4)-N+(2*N6)/3+12,k+H5+H6+H7-4);
  214.         line(j-(N5-N4)-N+(2*N6)/3+12,k+H5+H6+H7-4,j-(N5-N4)-N+N6-4,k+H5+H6+H7-4);
  215.         line(j-(N5-N4)-N+N6-4,k+H5+H6+H7-4,j-(N5-N4)-N+N6-4,k+H5+H6+H7-4-H7/4);
  216.         rectangle(j-(N5-N4)-N+N6-8,k+H5+H6+H7-4-H7/2,j-(N5-N4)-N+N6,k+H5+H6+H7-4-H7/4);
  217.         rectangle(j-(N5-N4)-N+N6-4,k+H5+H6+3,j-(N5-N4)-N+N6,k+H5+H6+H7-4-H7/2);
  218.         circle(j-(N5-N4),k+H5+H6+H7/2,4);
  219.         circle(j+N4/3,k+H5+H6/6,4);
  220.         circle(j+(4*N4)/5,k+H5+H6/6,4);
  221.         circle(j+N4/4,k+H5+(5*H6)/6,4);
  222.         circle(j+3*N4/4,k+H5+(5*H6)/6,4);
  223.         rectangle(j-(N5-N4)-N+(2*N6)/3+4,k+H5+H6+H7-3,j-(N5-N4)-N+(2*N6)/3+8,k+H5+H6+H7);



  224.                
  225.         setrop2(R2_COPYPEN);//当前颜色
  226.         setfillcolor(WHITE);
  227.         setlinecolor(WHITE);
  228.         //覆盖原进度条区域
  229.        
  230.         setlinestyle(PS_NULL);//无线条
  231.         //设置文字填充背景为透明
  232.         //计算步骤
  233.        
  234.         EndBatchDraw();//结束缓存区
  235.        
  236.         return 0;

  237. }
  238. float gally()//滑台
  239. {
  240.         float m,n,B=32,L=40,H2=107,H3=63,H4=15.5,N1=28,N2=22; //T25
  241.         m=466,n=160;

  242.        
  243.         init_figure();//初始化图像网格
  244.         rectangle(m,n,m+1.5,n+H3+L+L);
  245.         rectangle(m+1.5,n+10,m+2,n+H3+L+L);
  246.         rectangle(m+2,n+10,m+4,n+H3+L+14);
  247.         rectangle(m+4,n+10,m+2*N2/3+2,n+H3+L+14);
  248.         rectangle(m+6,n+10+(H3+L+4)/2-3,m+2*N2/3,n+(H3+L+4)/2+3);
  249.         line(m+2,n+10,m+2+N2/5,n+10-H4);
  250.         line(m+2+N2/5,n+10-H4,m+2+N2,n+10-H4);
  251.         line(m+2+N2,n+10-H4,m+2+N2,n+10);
  252.         rectangle(m+2+N2,n+10,m+4+N2,n+12);
  253.         rectangle(m+N2-2,n+10,m+N2,n+14+H3+L);
  254.         rectangle(m+N2,n+12,m+2+N1,n+12+H3);//滑台运动部件
  255.         rectangle(m+N1,n-27.5,m+N1+2,n-11.9);
  256.         rectangle(m+N1-1,n-11.9,m+N1+2,n+10);
  257.         rectangle(m+N1-1,n+10,m+N1,n+12);
  258.         rectangle(m+2+N2-2,n+10+2+H3,m+2+N2,n+14+H3+L);
  259.         rectangle(m+2+N2,n+12+H3+L,m+2+N1,n+14+H3+L);
  260.         line(m+2*N2/3+2,n+14+H3+L,m+2+N2,n+14+H3+L);
  261.         line(m+N1+2,n+10,m+N1+2,n+12);//m+N1+2是滑台右侧横坐标496,n+12是滑台右侧坐标172





  262.                
  263.         setrop2(R2_COPYPEN);//当前颜色
  264.         setfillcolor(WHITE);
  265.         setlinecolor(WHITE);
  266.         //覆盖原进度条区域
  267.        
  268.         setlinestyle(PS_NULL);//无线条
  269.         //设置文字填充背景为透明
  270.         //计算步骤
  271.        
  272.         EndBatchDraw();//结束缓存区

  273.         return 0;
  274. }
  275. float dog()//多轴箱
  276. {
  277.         float w,e,B,H,A0,A,h0,h,L0,L,B1,H1,GA=0.1;
  278.         w=521,e=237,B=50,H=50,A0=7.5,A=35,h0=15,h=20,L0=8,L=8,B1=40,H1=32;       
  279.         init_figure();//初始化图像网格
  280.         rectangle(w-B/2,e-H/2,w+B/2,e+H/2);
  281.         /*line(w-A/2-A0/2-5*GA,e-H/2,w-A/2-A0/2,e-H/2-9*GA);
  282.         line(w-A/2-A0/2,e-H/2-9*GA,w-A/2-A0/2+20*GA,e-H/2-9*GA);
  283.         line(w-A/2-A0/2+20*GA,e-H/2-9*GA,w-A/2-A0/2+25*GA,e-H/2);
  284.         line(w+A/2+A0/2+5*GA,e-H/2,w+A/2+A0/2,e-H/2-9*GA);
  285.         line(w+A/2+A0/2,e-H/2-9*GA,w+A/2+A0/2-20*GA,e-H/2-9*GA);
  286.         line(w+A/2+A0/2-20*GA,e-H/2-9*GA,w+A/2+A0/2-25*GA,e-H/2);
  287.         line(w-A/2,e-H/2,w-A/2,e-H/2-25*GA);
  288.         line(w-A/2,e-H/2-25*GA,w+A/2-5*GA,e-H/2-25*GA);
  289.         line(w+A/2-5*GA,e-H/2-25*GA,w+A/2+5*GA,e-H/2);
  290.         line(w+A/2,e-H/2-10*GA,w-A/2,e-H/2-10*GA);*/
  291.         line(w-B/2+L0-5*GA,e+H/2,w-B/2+L0,e+H/2+10*GA);
  292.         line(w-B/2+L0,e+H/2+10*GA,w-B/2+L0+L,e+H/2+10*GA);
  293.         line(w-B/2+L0+L,e+H/2+10*GA,w-B/2+L0+L+5*GA,e+H/2);
  294.         line(w+B/2-L0+5*GA,e+H/2,w+B/2-L0,e+H/2+10*GA);
  295.         line(w+B/2-L0,e+H/2+10*GA,w+B/2-L0-L,e+H/2+10*GA);
  296.         line(w+B/2-L0-L,e+H/2+10*GA,w+B/2-L0-L-5*GA,e+H/2);
  297.         /*rectangle(w-B/2-25*GA,e+H/2-h0-h,w-B/2-10*GA,e+H/2-h0);
  298.         line(w-B/2-10*GA,e+H/2-h0-h,w-B/2,e+H/2-h0-h-5*GA);
  299.         line(w-B/2-10*GA,e+H/2-h0,w-B/2,e+H/2-h0+5*GA);*/
  300.         rectangle(w+B/2+25*GA,e+H/2-h0-h,w+B/2+10*GA,e+H/2-h0);
  301.         line(w+B/2+10*GA,e+H/2-h0-h,w+B/2,e+H/2-h0-h-5*GA);
  302.         line(w+B/2+10*GA,e+H/2-h0,w+B/2,e+H/2-h0+5*GA);
  303.         setlinestyle(PS_DOT);//点线 可以让画的图变成点线
  304.         rectangle(w+B1/2,e+H/2-H1,w-B1/2,e+H/2);
  305.         rectangle(w+B1/3,e+H/2-(4*H1)/5,w-B1/3,e+H/2-H1/5);


  306.        
  307.         setrop2(R2_COPYPEN);//当前颜色
  308.         setfillcolor(WHITE);
  309.         setlinecolor(WHITE);
  310.         //覆盖原进度条区域
  311.        
  312.         setlinestyle(PS_NULL);//无线条
  313.         //设置文字填充背景为透明
  314.         //计算步骤
  315.        
  316.         EndBatchDraw();//结束缓存区
  317.        
  318.         return 0;
  319. }
  320. float zt()//总体
  321. {
  322.         float m,n,B=32,L=40,H2=107,H3=63,H4=15.5,N1=28,N2=22; //T25
  323.         m=466,n=160;

  324.        
  325.         init_figure();//初始化图像网格
  326.         rectangle(m,n,m+1.5,n+H3+L+L);
  327.         rectangle(m+1.5,n+10,m+2,n+H3+L+L);
  328.         rectangle(m+2,n+10,m+4,n+H3+L+14);
  329.         rectangle(m+4,n+10,m+2*N2/3+2,n+H3+L+14);
  330.         rectangle(m+6,n+10+(H3+L+4)/2-3,m+2*N2/3,n+(H3+L+4)/2+3);
  331.         line(m+2,n+10,m+2+N2/5,n+10-H4);
  332.         line(m+2+N2/5,n+10-H4,m+2+N2,n+10-H4);
  333.         line(m+2+N2,n+10-H4,m+2+N2,n+10);
  334.         rectangle(m+2+N2,n+10,m+4+N2,n+12);
  335.         rectangle(m+N2-2,n+10,m+N2,n+14+H3+L);
  336.         rectangle(m+N2,n+12,m+2+N1,n+12+H3);//滑台运动部件
  337.         rectangle(m+N1,n-27.5,m+N1+2,n-11.9);
  338.         rectangle(m+N1-1,n-11.9,m+N1+2,n+10);
  339.         rectangle(m+N1-1,n+10,m+N1,n+12);
  340.         rectangle(m+2+N2-2,n+10+2+H3,m+2+N2,n+14+H3+L);
  341.         rectangle(m+2+N2,n+12+H3+L,m+2+N1,n+14+H3+L);
  342.         line(m+2*N2/3+2,n+14+H3+L,m+2+N2,n+14+H3+L);
  343.         line(m+N1+2,n+10,m+N1+2,n+12);
  344.        
  345.         float j,k,B1,H5,H6,N3,N4,B2,B3,H7,H8,H9,N5,N6,N;
  346.         j=400,k=100,B1=40,H5=32.5,H6=200,N3=97,N4=66,B2=60,B3=11,H7=56,H8=21,H9=16,N5=71,N6=90,N=19;
  347.        
  348.         init_figure();//初始化图像网格
  349.         rectangle(j,k,j+N3,k+H5);
  350.         line(j,k+H5,j-(N5-N4),k+H5+40);
  351.         line(j-(N5-N4),k+H5+40,j-(N5-N4),k+H5+H6);
  352.         line(j-(N5-N4),k+H5+H6,j-(N5-N4)+N5,k+H5+H6);
  353.     line(j-(N5-N4)+N5,k+H5+H6,j-(N5-N4)+N5,k+H5);
  354.         rectangle(j,k+H5+H6-15,j+18,k+H5+H6-5);
  355.         rectangle(j+30,k+H5+H6-15,j+48,k+H5+H6-5);//立柱

  356.         rectangle(j-(N5-N4)-N,k+H5+H6,j-(N5-N4)-N+N6,k+H5+H6+H7);
  357.         line(j-(N5-N4)-N,k+H5+H6+H7-4,j-(N5-N4)-N+(2*N6)/3,k+H5+H6+H7-4);
  358.         line(j-(N5-N4)-N+(2*N6)/3,k+H5+H6+H7-4,j-(N5-N4)-N+(2*N6)/3+2,k+H5+H6+H7-6);
  359.         line(j-(N5-N4)-N+(2*N6)/3+2,k+H5+H6+H7-6,j-(N5-N4)-N+(2*N6)/3+10,k+H5+H6+H7-6);
  360.         line(j-(N5-N4)-N+(2*N6)/3+10,k+H5+H6+H7-6,j-(N5-N4)-N+(2*N6)/3+12,k+H5+H6+H7-4);
  361.         line(j-(N5-N4)-N+(2*N6)/3+12,k+H5+H6+H7-4,j-(N5-N4)-N+N6-4,k+H5+H6+H7-4);
  362.         line(j-(N5-N4)-N+N6-4,k+H5+H6+H7-4,j-(N5-N4)-N+N6-4,k+H5+H6+H7-4-H7/4);
  363.         rectangle(j-(N5-N4)-N+N6-8,k+H5+H6+H7-4-H7/2,j-(N5-N4)-N+N6,k+H5+H6+H7-4-H7/4);
  364.         rectangle(j-(N5-N4)-N+N6-4,k+H5+H6+3,j-(N5-N4)-N+N6,k+H5+H6+H7-4-H7/2);
  365.         circle(j-(N5-N4),k+H5+H6+H7/2,4);
  366.         circle(j+N4/3,k+H5+H6/6,4);
  367.         circle(j+(4*N4)/5,k+H5+H6/6,4);
  368.         circle(j+N4/4,k+H5+(5*H6)/6,4);
  369.         circle(j+3*N4/4,k+H5+(5*H6)/6,4);
  370.         rectangle(j-(N5-N4)-N+(2*N6)/3+4,k+H5+H6+H7-3,j-(N5-N4)-N+(2*N6)/3+8,k+H5+H6+H7);
  371.         float a,b,L1,L2,L3,H1,hh,TD;
  372.         d1=hs/dz;
  373.         vf=kv*vc;
  374.         n1=1000*vf/(p1*dz);
  375.         n2=n1/9550;
  376.         P1=T*n2;
  377.         Pz=4*P1;
  378.         if(Pz>=1 && Pz<=1.5)
  379.         {TD=25,a=196,b=100,L1=32,L2=15,L3=32,B1=32,H1=25,hh=2.6;}//25
  380.         if(Pz>=1.5&&Pz<=3)
  381.         {TD=32,a=496,b=172,L1=40,L2=15,L3=32,B1=40,H1=32,hh=2.6;}//32




  382.         init_figure();//初始化图像网格
  383.         line(a,b,a,b+L1);
  384.         line(a,b+L1,a+H1,b+L1);
  385.         line(a+H1,b+L1,a+H1,b+L1-L2);
  386.         rectangle(a+H1,b+L1-L2+2,a+H1+hh,b+L1-2);
  387.         line(a+H1+hh/2,b+L1-L2+2,a+H1+hh/2,b+L1-2);
  388.         line(a+H1,b+L1-L2,a+H1,b+L1-L2-L3/5);
  389.         line(a+H1,b+L1-L2-L3/5,a+H1/3,b);
  390.         line(a,b,a+H1/3,b);
  391.         line(a+H1/4,b,a+H1/4,b-L1/6);
  392.         line(a+H1/4,b-L1/6,a+H1-H1/10,b-L1/6);
  393.         line(a+H1-H1/10,b-L1/6,a+H1-H1/10,b-L1/6+4*L3/5-5*GA);

  394.         setrop2(R2_COPYPEN);//当前颜色
  395.         setfillcolor(WHITE);
  396.         setlinecolor(WHITE);
  397.         //覆盖原进度条区域
  398.        
  399.         setlinestyle(PS_NULL);//无线条
  400.         //设置文字填充背景为透明
  401.         //计算步骤
  402.        
  403.         EndBatchDraw();//结束缓存区
  404.        
  405.         return 0;

  406. }
  407. void pg(float x,float y,float N2D,float N1D,float H3D,float a,float b,float L1,float L2,float L3,float B1,float H1,float hh);
  408. float hhh()//运动
  409. {
  410.         float H3D=63,N1D=28,N2D=22,x=466,y=160,a,b,L1,L2,L3,B1,H1,hh;
  411.   //初始坐标
  412.                 d1=hs/dz;//vc=17,dz=6.5,hs=32
  413.             vf=kv*vc;
  414.             n1=1000*vf/(p1*dz);
  415.                 n2=n1/9550;
  416.             P1=T*n2;
  417.             Pz=4*P1;
  418.        
  419.                
  420.        

  421.         if(Pz>=1 && Pz<=1.5)
  422.         {a=196,b=100,L1=32,L2=15,L3=32,B1=32,H1=25,hh=2.6;}//25
  423.         if(Pz>=1.5&&Pz<=3)
  424.         {a=496,b=172,L1=40,L2=15,L3=32,B1=40,H1=32,hh=2.6;}//32
  425.         if(Pz<1)
  426.         {a=96,b=100,L1=32,L2=15,L3=32,B1=32,H1=25,hh=2.6;}
  427.         if(Pz>3)
  428.         {a=96,b=500,L1=32,L2=15,L3=32,B1=32,H1=25,hh=2.6;}
  429.        
  430.         float xSize = 1, ySize = 1,aSize=1,bSize=1;  //每次移动的方向和距离
  431.        
  432.         while (1)
  433.         {
  434.                 BeginBatchDraw();
  435.                 cleardevice();
  436.                 if ( y>196)
  437.                 {
  438.                         ySize = 0;
  439.                         Sleep(3000);
  440.                         ySize=-1;
  441.                 }
  442.                 if(y<160)
  443.                 {
  444.                         ySize=0;
  445.                 }
  446.                 y += ySize;  //y移动
  447.                         if ( b>208)
  448.                 {
  449.                         bSize = 0;
  450.                         Sleep(3000);
  451.                         bSize=-1;
  452.                 }
  453.                 if(b<172)
  454.                 {
  455.                         bSize=0;
  456.                 }
  457.                 b += bSize;

  458.                 pg(x, y, N2D,N1D,H3D,a,b,L1,L2,L3,B1,H1,hh);
  459.                 FlushBatchDraw();
  460.         }

  461.        
  462.        
  463.        
  464.         EndBatchDraw();//结束缓存区
  465.         _getch();
  466.         closegraph();
  467.         return 0;
  468. }
  469. void pg(float x,float y,float N2D,float N1D,float H3D,float a,float b,float L1,float L2,float L3,float B1,float H1,float hh)//a,b,L1,L2,L3,B1,H1,hh;
  470. {
  471.        
  472.     cleardevice(); //清屏
  473.         setcolor(BLUE);  
  474.         rectangle(x+N2D,y+12,x+2+N1D,y+12+H3D);//绘制
  475.         line(a,b,a,b+L1);
  476.         line(a,b+L1,a+H1,b+L1);
  477.         line(a+H1,b+L1,a+H1,b+L1-L2);
  478.         rectangle(a+H1,b+L1-L2+2,a+H1+hh,b+L1-2);
  479.         line(a+H1+hh/2,b+L1-L2+2,a+H1+hh/2,b+L1-2);
  480.         line(a+H1,b+L1-L2,a+H1,b+L1-L2-L3/5);
  481.         line(a+H1,b+L1-L2-L3/5,a+H1/3,b);
  482.         line(a,b,a+H1/3,b);
  483.         line(a+H1/4,b,a+H1/4,b-L1/6);
  484.         line(a+H1/4,b-L1/6,a+H1-H1/10,b-L1/6);
  485.         line(a+H1-H1/10,b-L1/6,a+H1-H1/10,b-L1/6+4*L3/5-5*GA);

  486.         init_figure();
  487.         float m,n,B=32,L=40,H2=107,H3=63,H4=15.5,N1=28,N2=22; //T25
  488.         m=466,n=160;

  489.         //滑台
  490.         init_figure();//初始化图像网格
  491.         rectangle(m,n,m+1.5,n+H3+L+L);
  492.         rectangle(m+1.5,n+10,m+2,n+H3+L+L);
  493.         rectangle(m+2,n+10,m+4,n+H3+L+14);
  494.         rectangle(m+4,n+10,m+2*N2/3+2,n+H3+L+14);
  495.         rectangle(m+6,n+10+(H3+L+4)/2-3,m+2*N2/3,n+(H3+L+4)/2+3);
  496.         line(m+2,n+10,m+2+N2/5,n+10-H4);
  497.         line(m+2+N2/5,n+10-H4,m+2+N2,n+10-H4);
  498.         line(m+2+N2,n+10-H4,m+2+N2,n+10);
  499.         rectangle(m+2+N2,n+10,m+4+N2,n+12);
  500.         rectangle(m+N2-2,n+10,m+N2,n+14+H3+L);
  501.         rectangle(m+N1,n-27.5,m+N1+2,n-11.9);
  502.         rectangle(m+N1-1,n-11.9,m+N1+2,n+10);
  503.         rectangle(m+N1-1,n+10,m+N1,n+12);
  504.         rectangle(m+2+N2-2,n+10+2+H3,m+2+N2,n+14+H3+L);
  505.         rectangle(m+2+N2,n+12+H3+L,m+2+N1,n+14+H3+L);
  506.         line(m+2*N2/3+2,n+14+H3+L,m+2+N2,n+14+H3+L);
  507.         line(m+N1+2,n+10,m+N1+2,n+12);




  508.         init_figure();


  509.        
  510.         Sleep(10);
  511. }



  512. int main()
  513. {
  514.         int i,event=0;
  515.         char s[30];//输入字符串变量
  516.         short win_width,win_height;//定义窗口的宽度和高度
  517.         win_width = 1640;win_height = 760;
  518.         initgraph(win_width,win_height);//初始化窗口(黑屏)
  519.         for(i=0;i<256;i+=5)
  520.         {
  521.                 setbkcolor(RGB(i,i,i));//设置背景色,原来默认黑色
  522.                 cleardevice();//清屏(取决于背景色)
  523.                 Sleep(30);//延时30ms
  524.         }
  525.         RECT R1={r[0][0],r[0][1],r[0][2],r[0][3]};
  526.         RECT R2={r[1][0],r[1][1],r[1][2],r[1][3]};
  527.         RECT R3={r[2][0],r[2][1],r[2][2],r[2][3]};
  528.         RECT R4={r[3][0],r[3][1],r[3][2],r[3][3]};
  529.         RECT R5={r[4][0],r[4][1],r[4][2],r[4][3]};
  530.         RECT R6={r[5][0],r[5][1],r[5][2],r[5][3]};
  531.         RECT R7={r[6][0],r[6][1],r[6][2],r[6][3]};
  532.         RECT R8={r[7][0],r[7][1],r[7][2],r[7][3]};
  533.         RECT R9={r[8][0],r[8][1],r[8][2],r[8][3]};
  534.         LOGFONT f;//字体样式指针
  535.         gettextstyle(&f);                                        //获取字体样式
  536.         _tcscpy(f.lfFaceName,_T("宋体"));        //设置字体为宋体
  537.         f.lfQuality = ANTIALIASED_QUALITY;    // 设置输出效果为抗锯齿  
  538.         settextstyle(&f);                     // 设置字体样式
  539.         settextcolor(BLACK);                                //BLACK在graphic.h头文件里面被定义为黑色的颜色常量
  540.         drawtext("输入参数",&R1,DT_CENTER | DT_VCENTER | DT_SINGLELINE);//在矩形区域R1内输入文字,水平居中,垂直居中,单行显示
  541.         drawtext("多轴箱",&R2,DT_CENTER | DT_VCENTER | DT_SINGLELINE);//在矩形区域R2内输入文字,水平居中,垂直居中,单行显示
  542.         drawtext("动力箱",&R3,DT_CENTER | DT_VCENTER | DT_SINGLELINE);//在矩形区域R3内输入文字,水平居中,垂直居中,单行显示
  543.         drawtext("滑台",&R4,DT_CENTER | DT_VCENTER | DT_SINGLELINE);
  544.         drawtext("立柱",&R5,DT_CENTER | DT_VCENTER | DT_SINGLELINE);
  545.         drawtext("总体",&R6,DT_CENTER | DT_VCENTER | DT_SINGLELINE);
  546.         drawtext("运动",&R7,DT_CENTER | DT_VCENTER | DT_SINGLELINE);
  547.         drawtext("动力箱数据",&R8,DT_CENTER | DT_VCENTER | DT_SINGLELINE);
  548.         drawtext("退出",&R9,DT_CENTER | DT_VCENTER | DT_SINGLELINE);
  549.         setlinecolor(BLUE);
  550.         rectangle(r[0][0],r[0][1],r[0][2],r[0][3]);
  551.         rectangle(r[1][0],r[1][1],r[1][2],r[1][3]);
  552.         rectangle(r[2][0],r[2][1],r[2][2],r[2][3]);
  553.         rectangle(r[3][0],r[3][1],r[3][2],r[3][3]);
  554.         rectangle(r[4][0],r[4][1],r[4][2],r[4][3]);
  555.         rectangle(r[5][0],r[5][1],r[5][2],r[5][3]);
  556.         rectangle(r[6][0],r[6][1],r[6][2],r[6][3]);
  557.         rectangle(r[7][0],r[7][1],r[7][2],r[7][3]);
  558.         rectangle(r[8][0],r[8][1],r[8][2],r[8][3]);
  559.         MOUSEMSG m;//鼠标指针
  560.     writehuatai();
  561.         //writedonglixiang();
  562.         writelizhu();
  563.         writeduozhouxiang();


  564.        
  565.         while(true)
  566.         {
  567.                 m = GetMouseMsg();//获取一条鼠标消息

  568.                 switch(m.uMsg)
  569.                 {
  570.                         case WM_MOUSEMOVE:
  571.                                 setrop2(R2_XORPEN);
  572.                                 setlinecolor(LIGHTCYAN);//线条颜色为亮青色
  573.                                 setlinestyle(PS_SOLID, 3);//设置画线样式为实现,10磅
  574.                                 setfillcolor(RED);//填充颜色为白色
  575.                                 if(button_judge(m.x,m.y)!=0)
  576.                                 {
  577.                                         if(event != button_judge(m.x,m.y))
  578.                                         {
  579.                                                 event = button_judge(m.x,m.y);//记录这一次触发的按钮
  580.                                                 fillrectangle(r[event-1][0],r[event-1][1],r[event-1][2],r[event-1][3]);//有框填充矩形(X1,Y1,X2,Y2)
  581.                                         }
  582.                                 }
  583.                                 else
  584.                                 {
  585.                                         if(event!=0)//上次触发的按钮未被修正为原来的颜色
  586.                                         {
  587.                                                 fillrectangle(r[event-1][0],r[event-1][1],r[event-1][2],r[event-1][3]);//两次同或为原来颜色
  588.                                                 event = 0;
  589.                                         }
  590.                                 }
  591.                                 break;
  592.                         case WM_LBUTTONDOWN:
  593.                                 setrop2(R2_NOTXORPEN);//二元光栅——NOT(屏幕颜色 XOR 当前颜色)
  594.                                 for(i=0;i<=10;i++)
  595.                                 {
  596.                                         setlinecolor(RGB(25*i,25*i,25*i));//设置圆颜色
  597.                                         circle(m.x,m.y,2*i);
  598.                                         Sleep(20);//停顿30ms
  599.                                         circle(m.x,m.y,2*i);//抹去刚刚画的圆
  600.                                 }
  601.                                 //按照按钮判断左键单击后的操作
  602.                                 switch(button_judge(m.x,m.y))
  603.                                 {
  604.                                         //复原按钮原型
  605.                                 case 1:
  606.                                         InputBox(s,30,"请输入加工孔长度,钻头直径,切削速度");
  607.                                         sscanf(s,"%f%f%f",&hs,&dz,&vc);//将输入字符串依次扫描到全局变量里面
  608.                     break;
  609.                                 case 2:
  610.                                         dog();//仿真运行
  611.                                         FlushMouseMsgBuffer();//单击事件后清空鼠标消息
  612.                                         break;
  613.                                 case 3:
  614.                                         simulation();//仿真运行
  615.                                         FlushMouseMsgBuffer();//单击事件后清空鼠标消息
  616.                                         break;
  617.                                 case 4:
  618.                                         gally();//仿真运行
  619.                                         FlushMouseMsgBuffer();//单击事件后清空鼠标消息
  620.                                         break;
  621.                                 case 5:
  622.                                         snake();//仿真运行
  623.                                         FlushMouseMsgBuffer();//单击事件后清空鼠标消息
  624.                                         break;
  625.                                 case 6:
  626.                         zt();//仿真运行
  627.                                         FlushMouseMsgBuffer();//单击事件后清空鼠标消息
  628.                                         break;
  629.                                 case 7:
  630.                                         hhh();//仿真运行
  631.                                         FlushMouseMsgBuffer();//单击事件后清空鼠标消息
  632.                                         break;
  633.                     case 8:
  634.                                         hello();//仿真运行
  635.                                         FlushMouseMsgBuffer();//单击事件后清空鼠标消息
  636.                                         break;
  637.                             case 9:
  638.                                         closegraph();//关闭绘图环境
  639.                                         exit(0);//正常退出
  640.                                 default:
  641.                                         FlushMouseMsgBuffer();//单击事件后清空鼠标消息
  642.                                         //printf("\r\n(%d,%d)",m.x,m.y);//打印鼠标坐标,方便调试时确定区域
  643.                                         break;
  644.                                 }
  645.                                 break;
  646.                 }
  647.         }
  648.         return 0;
  649. }

复制代码

这是完整的代码,问题主要出在动力箱部分,理论上动力箱点一下应该出现图形的,结果却没有反应(问题再104行到141行之间)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-12 20:47:53 | 显示全部楼层
大苏打dd 发表于 2023-4-12 20:41
我把line换成::line之后代码可以运行,但是界面中不会出现图形,我试着加入了_getch(); 但是仍然没有出 ...

问题似乎出现在动力箱部分的图形渲染上。在动力箱代码中,我注意到你没有使用BeginBatchDraw()和FlushBatchDraw(),这可能是导致图形无法正常显示的原因。

BeginBatchDraw()和FlushBatchDraw()分别用于开始和刷新缓冲区绘制,以实现双缓冲绘图。

请尝试在动力箱代码的init_figure()之后加入BeginBatchDraw(),并在EndBatchDraw()之前加入FlushBatchDraw()。

这样修改后的部分代码如下:

  1.     // 画矩形
  2.     init_figure();//初始化图像网格
  3.     BeginBatchDraw(); // 开始缓冲区绘制
  4.     ::line(a,b,a,b+L1);
  5.     // ... 省略其他绘制代码 ...
  6.     ::line(a+H1-H1/10,b-L1/6,a+H1-H1/10,b-L1/6+4*L3/5-5*GA);

  7.     // 关闭文件
  8.     file.close();
  9.    
  10.     FlushBatchDraw(); // 刷新缓冲区绘制
  11.     EndBatchDraw();//结束缓存区
复制代码

这样修改后,当你单击动力箱按钮时,图形应该能正常显示。如果问题仍然存在,请检查init_figure()函数是否正确设置了绘图环境,以及是否在动力箱部分的其他地方有无遗漏的问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-12 20:57:43 | 显示全部楼层
isdkz 发表于 2023-4-12 20:47
问题似乎出现在动力箱部分的图形渲染上。在动力箱代码中,我注意到你没有使用BeginBatchDraw()和FlushBat ...

我加入了缓冲还是不行,会不会是读取数据有问题
  1. void init_figure()
  2. {
  3.         int i;
  4.         setrop2(R2_COPYPEN);//当前颜色
  5.         setlinecolor(BLACK);
  6.         setlinestyle(PS_SOLID);//实线
  7.         //外框线
  8.         //点线
  9.         //水平辅助线
  10.        
  11. }
复制代码
这是init_figure函数的定义
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-12 21:03:36 | 显示全部楼层
isdkz 发表于 2023-4-12 20:47
问题似乎出现在动力箱部分的图形渲染上。在动力箱代码中,我注意到你没有使用BeginBatchDraw()和FlushBat ...

我要读取的文件也是在这段代码中写的,我看了下是在181到215行,文件中部分数据需要我后续输入,输入部分在664行到667行,输入数据之后才能正确的写入文件的数据
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-12 23:02:54 | 显示全部楼层
isdkz 发表于 2023-4-12 20:47
问题似乎出现在动力箱部分的图形渲染上。在动力箱代码中,我注意到你没有使用BeginBatchDraw()和FlushBat ...

我发现就是直接画矩形,不进行读取数据的话图形是可以正常出现的,但是加了这个读取过程之后就不能出现图形了,我觉得可能是我读取文件出问题了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-13 13:39:28 | 显示全部楼层
isdkz 发表于 2023-4-12 20:47
问题似乎出现在动力箱部分的图形渲染上。在动力箱代码中,我注意到你没有使用BeginBatchDraw()和FlushBat ...

有空再看看吗老哥,我又试了好多次,正常直接输入参数可以出现图形,但是一读文件就不显示图形了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-9 20:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表