142.抛物样条曲线

简介: 142.抛物样条曲线
/* 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,d;
  if(e==1)
  {
    m=n;
    p[0][0]=p[1][0];
    p[0][1]=p[1][1];
    p[n+1][0]=p[n][0];
    p[n+1][1]=p[n][1];
  }
  else
  {
    m=n+1;
    p[0][0]=p[n][0];
    p[0][1]=p[n][1];
    p[m][0]=p[1][0];
    p[m][1]=p[1][1];
    p[m+1][0]=p[2][0];
    p[m+1][1]=p[2][1];
  }
  t=0.5/k;
  moveto(p[1][0],p[1][1]);
  for(i=0;i<m-1;i++)
  {
    for(j=1;j<k;j++)
    {
      t1=j*t;
      t2=t1*t1;
      t3=t2*t1;
      a=4.0*t2-t1-4.0*t3;
      b=1.0-10.0*t2+12.0*t3;
      c=t1+8.0*t2-12.0*t3;
      d=4.0*t3-2.0*t2;
      x=a*p[i][0]+b*p[i+1][0]+c*p[i+2][0]+d*p[i+3][0];
      y=a*p[i][1]+b*p[i+1][1]+c*p[i+2][1]+d*p[i+3][1];
      lineto(x,y);
    }
    lineto(p[i+2][0],p[i+2][1]);
  }
}
void marking(a,n)
int a[][2],n;
{
  int i;
  setfillstyle(1,WHITE);
  for(i=1;i<=n;i++)
  {
    circle(a[i][0],a[i][1],2);
    floodfill(a[i][0],a[i][1],RED);
  }
}
void main()
{
  int i,n,c,p[50][2],px,py;
  char fname[10],ch;
  FILE *fp;
  int gdriver=DETECT,gmode;
  clrscr();
  printf("Please input point numer: ");
  scanf("%d",&n);
  printf("Please input name of the file with the point data:\n >> ");
  scanf("%s",fname);
  if((fp=fopen(fname,"r"))==NULL)
  {
    printf("File %s does not exist! Do you want to create it? Y/N ",fname);
    ch=getch();
    if(ch=='Y'||ch=='y')
    {
      if((fp=fopen(fname,"w+"))==NULL)
      {
        printf("\nError! Can't create file %s!",fname);
        exit(1);
      }
      printf("\nPlease input %d pair coordinates (x,y) of the points:\n",n);
      for(i=0;i<n;i++)
      {
        scanf("%d%d",&px,&py);
        fprintf(fp,"%d %d ",px,py);
      }
            rewind(fp);
    }
    else
      exit(1);
  }
  rewind(fp);
  for(i=1;i<=n;i++)
    fscanf(fp,"%d%d",&p[i][0],&p[i][1]);
  fclose(fp);
  printf("Please input the figure type: FREE--1, Close--2: ");
  scanf("%d",&c);
  initgraph(&gdriver,&gmode,"c:\\tc");
  cleardevice();
  setbkcolor(9);
  setcolor(4);
  marking(p,n);
  outtextxy(80,460,"Press any key to continue...");
  getch();
  parspl(p,n,10,c);
  outtextxy(80,460,"Press any key to quit...    ");
  getch();
  closegraph();
}
相关文章
|
Java 网络协议
解决Java中的ProtocolException异常的技术实践
解决Java中的ProtocolException异常的技术实践
|
存储 Prometheus 监控
|
网络虚拟化
VLANIF配置
VLANIF配置
226 0
|
消息中间件 RocketMQ
消息队列 MQ操作报错合集之无法自动创建topic,该怎么办
在使用消息队列MQ时,可能会遇到各种报错情况。以下是一些常见的错误场景、可能的原因以及解决建议的汇总:1.连接错误、2.消息发送失败、3.消息消费报错、4.消息重试与死信处理、5.资源与权限问题、6.配置错误、7.系统资源限制、8.版本兼容性问题。
530 0
|
索引 Python
什么是Python中的魔法方法(Magic Methods)?给出一些例子。
什么是Python中的魔法方法(Magic Methods)?给出一些例子。
169 0
|
JavaScript API 开发者
Web Components详解-Shadow DOM插槽
Web Components详解-Shadow DOM插槽
161 1
|
传感器 安全 物联网
新技术革命:探索区块链、物联网与虚拟现实的未来应用与发展
随着科技的飞速发展,新兴技术如区块链、物联网和虚拟现实正深刻影响着我们的生活和工作方式。本文将探讨这些技术的最新发展趋势和广泛应用场景,揭示它们如何重塑未来社会与经济结构。
65 2
|
机器学习/深度学习
函数求导
本文概述了高等数学中函数求导的基本规则,包括常数、幂函数、求和、乘积、商、复合函数、指数函数及三角函数的导数。这些规则是微积分的基础,用于求解各种函数的导数。例如,常数的导数是0,$(x^n)&#39; = n \cdot x^{n-1}$,$(e^x)&#39; = e^x$,$\frac{d}{dx}\sin(x) = \cos(x)$。更复杂的函数可能需要使用隐函数或参数方程求导等高级技术。
665 1
|
存储 Java Redis
redis-学习笔记(Jedis set 简单命令)
redis-学习笔记(Jedis set 简单命令)
133 1
|
Linux 应用服务中间件 nginx
21. 【Linux教程】Linux 查看进程
21. 【Linux教程】Linux 查看进程
78 0