142.抛物样条曲线

举报
C语言与CPP编程 发表于 2022/05/12 22:49:15 2022/05/12
【摘要】 /* draw Parspl */#include <graphics.h>#include <math.h>#include <stdio.h> void parspl(p,n,k,e)int p[][2],n,k,e;{ int x,y,i,j,m; float t1,t2,t3,t,a,b,c,...

  
  1. /* draw Parspl */
  2. #include <graphics.h>
  3. #include <math.h>
  4. #include <stdio.h>
  5. void parspl(p,n,k,e)
  6. int p[][2],n,k,e;
  7. {
  8. int x,y,i,j,m;
  9. float t1,t2,t3,t,a,b,c,d;
  10. if(e==1)
  11. {
  12. m=n;
  13. p[0][0]=p[1][0];
  14. p[0][1]=p[1][1];
  15. p[n+1][0]=p[n][0];
  16. p[n+1][1]=p[n][1];
  17. }
  18. else
  19. {
  20. m=n+1;
  21. p[0][0]=p[n][0];
  22. p[0][1]=p[n][1];
  23. p[m][0]=p[1][0];
  24. p[m][1]=p[1][1];
  25. p[m+1][0]=p[2][0];
  26. p[m+1][1]=p[2][1];
  27. }
  28. t=0.5/k;
  29. moveto(p[1][0],p[1][1]);
  30. for(i=0;i<m-1;i++)
  31. {
  32. for(j=1;j<k;j++)
  33. {
  34. t1=j*t;
  35. t2=t1*t1;
  36. t3=t2*t1;
  37. a=4.0*t2-t1-4.0*t3;
  38. b=1.0-10.0*t2+12.0*t3;
  39. c=t1+8.0*t2-12.0*t3;
  40. d=4.0*t3-2.0*t2;
  41. x=a*p[i][0]+b*p[i+1][0]+c*p[i+2][0]+d*p[i+3][0];
  42. y=a*p[i][1]+b*p[i+1][1]+c*p[i+2][1]+d*p[i+3][1];
  43. lineto(x,y);
  44. }
  45. lineto(p[i+2][0],p[i+2][1]);
  46. }
  47. }
  48. void marking(a,n)
  49. int a[][2],n;
  50. {
  51. int i;
  52. setfillstyle(1,WHITE);
  53. for(i=1;i<=n;i++)
  54. {
  55. circle(a[i][0],a[i][1],2);
  56. floodfill(a[i][0],a[i][1],RED);
  57. }
  58. }
  59. void main()
  60. {
  61. int i,n,c,p[50][2],px,py;
  62. char fname[10],ch;
  63. FILE *fp;
  64. int gdriver=DETECT,gmode;
  65. clrscr();
  66. printf("Please input point numer: ");
  67. scanf("%d",&n);
  68. printf("Please input name of the file with the point data:\n >> ");
  69. scanf("%s",fname);
  70. if((fp=fopen(fname,"r"))==NULL)
  71. {
  72. printf("File %s does not exist! Do you want to create it? Y/N ",fname);
  73. ch=getch();
  74. if(ch=='Y'||ch=='y')
  75. {
  76. if((fp=fopen(fname,"w+"))==NULL)
  77. {
  78. printf("\nError! Can't create file %s!",fname);
  79. exit(1);
  80. }
  81. printf("\nPlease input %d pair coordinates (x,y) of the points:\n",n);
  82. for(i=0;i<n;i++)
  83. {
  84. scanf("%d%d",&px,&py);
  85. fprintf(fp,"%d %d ",px,py);
  86. }
  87. rewind(fp);
  88. }
  89. else
  90. exit(1);
  91. }
  92. rewind(fp);
  93. for(i=1;i<=n;i++)
  94. fscanf(fp,"%d%d",&p[i][0],&p[i][1]);
  95. fclose(fp);
  96. printf("Please input the figure type: FREE--1, Close--2: ");
  97. scanf("%d",&c);
  98. initgraph(&gdriver,&gmode,"c:\\tc");
  99. cleardevice();
  100. setbkcolor(9);
  101. setcolor(4);
  102. marking(p,n);
  103. outtextxy(80,460,"Press any key to continue...");
  104. getch();
  105. parspl(p,n,10,c);
  106. outtextxy(80,460,"Press any key to quit... ");
  107. getch();
  108. closegraph();
  109. }

文章来源: blog.csdn.net,作者:程序员编程指南,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_41055260/article/details/124665575

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。