⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spline.lst

📁 51单片机在lcd上实现zlg gui,希望好的请多加点分数
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   SPLINE                                                                09/06/2007 10:13:45 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE SPLINE
OBJECT MODULE PLACED IN .\OBJ\spline.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE spline.c LARGE BROWSE DEBUG OBJECTEXTEND PRINT(.\LST\spline.lst) OBJECT(.\O
                    -BJ\spline.obj)

line level    source

   1          /****************************************************************************************
   2          * 文件名:SPLINE.C
   3          * 功能:二次参数样条曲线生成程序。
   4          * 作者:黄绍斌
   5          * 日期:2003.09.09
   6          ****************************************************************************************/
   7          #include  "config.h"
   8          #include  "math.h"
   9          
  10          
  11          /****************************************************************************
  12          * 名称:max()
  13          * 功能:求两个整数中最大的整数值。
  14          * 入口参数:a                   整数1
  15          *          b            整数2
  16          * 出口参数:返回最大的整数值
  17          ****************************************************************************/
  18          int  max(int a, int b)
  19          {  
  20   1              if(a>b) 
  21   1                      return(a);
  22   1          else
  23   1                      return(b);
  24   1      }
  25          
  26          /****************************************************************************
  27          * 名称:abs()
  28          * 功能:求一个整数的绝对值。
  29          * 入口参数:a                   取绝对值的数据
  30          * 出口参数:返回a的绝对值
  31          ****************************************************************************/
  32          int  abs(int a)
  33          {  if(a>0) return(a);
  34   1           else  return(-a);
  35   1      }
  36          
  37          
  38          
  39          /* 曲线类变量及相关函数 */
  40          typedef  struct
  41          {  
  42                  float   Ax, Ay;                 // 定义A、B、C点坐标变量
  43                  float   Bx, By;
  44                  float   Cx, Cy;
  45             
  46                  int     Ndiv;                   // 定义曲线平滑参数变量     
  47          }CURVE;  
  48          
  49          #define  DIV_FACTOR             8.0                             /* 平滑控制参数 */
  50          /****************************************************************************
  51          * 名称:CURVE_SetCurve()
  52          * 功能:设置三点曲线参数。
  53          * 入口参数:    cl              要操作的曲线对象,CURVE结构
  54          *           ax          a点x坐标值
C51 COMPILER V7.50   SPLINE                                                                09/06/2007 10:13:45 PAGE 2   

  55          *           ay          a点y坐标值
  56          *                       bx              b点x坐标值
  57          *           by          b点y坐标值
  58          *                       cx              c点x坐标值
  59          *           cy          c点y坐标值
  60          * 出口参数:无
  61          * 说明:
  62          ****************************************************************************/
  63          void  CURVE_SetCurve(CURVE *cl,
  64                               float ax, float ay, 
  65                                   float bx, float by,
  66                                   float cx, float cy) 
  67          {  cl->Ax = ax;
  68   1         cl->Ay = ay;
  69   1         cl->Bx = bx; 
  70   1         cl->By = by;
  71   1         cl->Cx = cx; 
  72   1         cl->Cy = cy;
  73   1         
  74   1         cl->Ndiv = (int)(max( abs((int)ax), abs((int)ay) ) / DIV_FACTOR);
  75   1      }
  76          
  77          
  78          /****************************************************************************
  79          * 名称:CURVE_GetCount()
  80          * 功能:取出平滑参数Ndiv+1的值。
  81          * 入口参数:cl          要操作的曲线对象,CURVE结构
  82          * 出口参数:返回Ndiv+1的值
  83          * 说明:若Ndiv为0,则先设置其为1。
  84          ****************************************************************************/
  85          int  CURVE_GetCount(CURVE *cl)
  86          {  if(0 == cl->Ndiv) cl->Ndiv=1;
  87   1      
  88   1         return(cl->Ndiv+1);
  89   1      }
  90          
  91          
  92          /****************************************************************************
  93          * 名称:CURVE_GetCurve()
  94          * 功能:增加曲线点到points。
  95          * 入口参数:cl                  要操作的曲线对象,CURVE结构
  96          *          x                    新增点的x坐标值
  97          *                  y                    新增点的y坐标值
  98          *                  points               曲线点缓冲区
  99          *          PointCount   缓冲区的当前指针
 100          * 出口参数:无
 101          * 说明:
 102          ****************************************************************************/
 103          void  CURVE_GetCurve(CURVE *cl, float x, float y, PointXY points[], int *PointCount)
 104          {  int    X, Y;
 105   1         float  t, f, g, h;
 106   1         int    i;
 107   1      
 108   1         if(cl->Ndiv==0)  cl->Ndiv = 1;
 109   1      
 110   1          /* 新增一个点到结构 */
 111   1              X = (int)x; 
 112   1              Y = (int)y;
 113   1              points[*PointCount].x = X;
 114   1              points[*PointCount].y = Y;
 115   1              (*PointCount)++;
 116   1      
C51 COMPILER V7.50   SPLINE                                                                09/06/2007 10:13:45 PAGE 3   

 117   1          /* 变换出ndiv个点 */
 118   1              for(i=1; i<=cl->Ndiv; i++)
 119   1              {  t = 1.0f / (float)cl->Ndiv * (float)i;
 120   2                 f = t * t * (3.0f - 2.0f * t);
 121   2                 g = t * (t - 1.0f) * (t-1.0f);
 122   2                 h = t * t * (t-1.0f);
 123   2                      
 124   2                 X = (int)(x + cl->Ax*f + cl->Bx*g + cl->Cx*h);
 125   2                 Y = (int)(y + cl->Ay*f + cl->By*g + cl->Cy*h);
 126   2                      
 127   2                 points[*PointCount].x = X;
 128   2                 points[*PointCount].y = Y;
 129   2                 (*PointCount)++;
 130   2              }
 131   1      }
 132          
 133          
 134          
 135          /***************************************************************************/
 136          
 137          
 138          /****************************************************************************
 139          * 名称:SPLINE_Spline()
 140          * 功能:样条曲线初始化函数,将特征点输入到样条曲线对象中。
 141          * 入口参数:sl                  要操作的样条曲线对象,SPLINE结构
 142          *                  pt                   特征点数据              
 143          *          np                   特征点个数
 144          * 出口参数:无
 145          * 说明:
 146          ****************************************************************************/
 147          void  SPLINE_SetSpline(SPLINE *sl, PointXY pt[], int np)
 148          {  int  i;
 149   1      
 150   1         sl->Np = np;
 151   1      
 152   1         /* 将点数据复制到sl对象 */
 153   1         for(i=0; i<sl->Np; i++) 
 154   1         {  sl->Px[i] = (float)pt[i].x;  
 155   2                sl->Py[i] = (float)pt[i].y;
 156   2         }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -