//三螺曲线
int DrawThreeSnailCurve(Graphics* grp,int *CtrlPoint)
{
 
 Pen pen(Color(255,0,255,0),1);
   
 Point p[] = {Point(200,150), //P
           Point(CtrlPoint[0],CtrlPoint[1]),Point(200,100),
              Point(100,100), //P

Point(CtrlPoint[2],CtrlPoint[3]),Point(200,100),
     Point(300,200), //P

Point(CtrlPoint[4],CtrlPoint[5]),Point(200,200),
     Point(200,150), //P
                
     Point(CtrlPoint[6],CtrlPoint[7]),Point(200,250),
     Point(300,250),//P

Point(CtrlPoint[8],CtrlPoint[9]),Point(200,150),
     Point(50,150),//P

Point(CtrlPoint[10],CtrlPoint[11]),Point(300,160),
     Point(700,500),//P

Point(CtrlPoint[12],CtrlPoint[13]),Point(700,200),
     Point(600,200),//P

Point(CtrlPoint[14],CtrlPoint[15]), Point(800,655),
     Point(800,600),//P

Point(CtrlPoint[16],CtrlPoint[17]),Point(300,240),
     Point(250,240),//P
 };
   
 float zstep = 0.0f;
 
  for(int i=0;i<10;i++){
 
     grp->TranslateTransform(0.0f,zstep);
  grp->DrawBeziers(&pen,p,28);
  zstep+=3.0f;
 }
   
    return 0;
}

int cp[56];
RECT DrawRect;
RECT SpecRect;

//WinAPI里没有的我又经常要用到的函数,模块就是值得封装的。因为总要调用
time_t     fstime = 0;
time_t     frtime = 0;
struct tm*    fpstime = 0;
struct tm*    fprtime = 0;
int        fistime = 0;  //起始时间
int        firtime = 0;  //实时时间

//得到首次时间
int GetInitTime()
{
 time(&fstime);
 fpstime = localtime(&fstime);
    fistime = fpstime->tm_sec;
    return 0;
}

//实时调用
int RunTime()
{
    time(&frtime);
    fprtime = localtime(&frtime);
    firtime = fprtime->tm_sec;
 return 0;
}
//初始化画笔画刷等
int InitGDI()
{
 hdc = GetDC(hWnd);

hPen = CreatePen(PS_DOT,2,RGB(255,0,0));
 SelectObject(hdc,hPen);

GetWindowRect(hWnd,&rect);
   
 for(int i=0;i<56;i++)
  cp[i] = 0;
    cp[0] = 200; cp[1] = 150;
 cp[2] = 200; cp[3] = 200;
 cp[4] = 300; cp[5] = 200;
 cp[6] = 200; cp[7] = 150;
 cp[8] = 200; cp[9] = 250;
 cp[10] = 50; cp[11] = 250;
    cp[12] = 700; cp[13] = 500;
 cp[14] = 500; cp[15] = 250;
 cp[16] = 400; cp[17] = 600;

DrawRect.left = -100;
 DrawRect.right = 2048;
 DrawRect.top = -100;
 DrawRect.bottom = 1024;

//右边特殊 控制点范围
 SpecRect.left = -1024;
 SpecRect.right = 1100;
 SpecRect.top = -500;
 SpecRect.bottom = 1024;

GetInitTime();
    return 0;
}

const int rStep = 10;
int rAspectx0 = rStep;
int rAspecty0 = rStep;
int rAspectx1 = -rStep;
int rAspecty1 = rStep;

int rAspectx2 = rStep;
int rAspecty2 = -rStep;
int rAspectx3 = -rStep;
int rAspecty3 = -rStep;

int rAspectx4 = rStep;
int rAspecty4 = rStep;
int rAspectx5 = rStep;
int rAspecty5 = rStep;

int rAspectx6 = rStep;
int rAspecty6 = rStep;
int rAspectx7 = rStep;
int rAspecty7 = rStep;

int rAspectx8 = rStep;
int rAspecty8 = rStep;

//随机控制点范围
int rCRangeX0 = 2048;
int rCRangeX1 = -100;
int cRnY0 = -100;
int cRnY1 = 1024;

int cRnX2 = 2048;
int cRnX3 = -100;
int cRnX4 = 2048;
int cRnX5 = -100;
int cRnX6 = 2048;
int cRnX7 = -100;
int cRnX8 = 2048;
int cRnX9 = -100;
int cRnX10 = 2048;
int cRnX11 = -100;
int cRnX12 = 2048;
int cRnX13 = -100;
int cRnX14 = 2048;
int cRnX15 = -100;
int cRnX16 = 2048;
int cRnX17 = -100;
int cRnY2 = -100;
int cRnY3 = 1024 ;
int cRnY4 = -100;
int cRnY5 = 1024;
int cRnY6 = -100;
int cRnY7 = 1024;
int cRnY8 = -100;
int cRnY9 = 1024;
int cRnY10 = -100;
int cRnY11 = 1024;
int cRnY12 = -100;
int cRnY13 = 1024;
int cRnY14 =-100;
int cRnY15 = 1024;
int cRnY16 = -100;
int cRnY17 = 1024;

char szMsg[MAX_PATH];
wchar_t szMulb[MAX_PATH];

int MakePoint()
{
    rCRangeX0 = rand()%2000;
 rCRangeX1 = rand()%2000;
 cRnY0 = rand()%1024;
 cRnY1 = rand()%1024;

cRnX2 = rand()%2000;
 cRnX3 = rand()%2000;

cRnY2 = rand()%1024;
 cRnY3 = rand()%1024;

cRnX4 = rand()%2000;
 cRnX5 = rand()%2000;
   
 cRnY4 = rand()%1024;
 cRnX5 = rand()%1024;

cRnX6 = rand()%2000;
 cRnX7 = rand()%2000;

cRnY6 = rand()%1024;
 cRnY7 = rand()%1024;
   
 cRnX8 = rand()%2000;
 cRnY9 = rand()%2000;

cRnY8 = rand()%1024;
 cRnY9 = rand()%1024;
   
 cRnX10 = rand()%2000;
 cRnX11 = rand()%2000;

cRnY10 = rand()%1024;
 cRnY11 = rand()%1024;
   
 cRnX12 = rand()%2000;
 cRnX13 = rand()%2000;
 
    cRnX14 = rand()%1024;
 cRnX15 = rand()%1024;

cRnX16 = rand()%2000;
 cRnX17 = rand()%2000;

cRnY12 = rand()%1024;
 cRnY13 = rand()%1024;

cRnY14 = rand()%2000;
 cRnY15 = rand()%2000;

cRnY16 = rand()%1024;
 cRnY17 = rand()%1024;

if(abs(rCRangeX0 - rCRangeX1) < 100){
  rCRangeX1 = DrawRect.left;
  return 0;
 }
 if(abs(cRnX2 - cRnX3) < 100){
  cRnX3 = DrawRect.left;
  return 0;
 }
 if(abs(cRnX4 - cRnX5) < 100){
        cRnX5 = DrawRect.left;
  return 0;
 }
   
 if(abs(cRnX6 - cRnX7) < 100){
  cRnY7 = DrawRect.left;
  return 0;
 }
 if(abs(cRnX8 - cRnX9) < 100){
  cRnX9 = DrawRect.left;
  return 0;
 }
 if(abs(cRnX10 - cRnX11) < 100){
  cRnX11 = DrawRect.left;
  return 0;
 }
    if(abs(cRnX12 - cRnX13) < 100){
  cRnX13 = DrawRect.left;
  return 0;
 }
    if(abs(cRnX14 - cRnX15) < 100){
  cRnX15 = DrawRect.left;
  return 0;
 }
    if(abs(cRnX16 - cRnX17) < 100){
  cRnX17 = DrawRect.left;
  return 0;
 }

if(abs(cRnY6 - cRnY7) < 100){
  cRnY7 = DrawRect.top;
  return 0;
 }
 if(abs(cRnY8 - cRnY9) < 100){
  cRnY9 = DrawRect.top;
  return 0;
 }
 if(abs(cRnY10 - cRnY11) < 100){
  cRnY11 = DrawRect.top;
  return 0;
 }
 if(abs(cRnY12 - cRnY13) < 100){
  cRnY13 = DrawRect.top;
  return 0;
 }
 if(abs(cRnY14 - cRnY15) < 100){
  cRnY15 = DrawRect.top;
  return 0;
 }
 if(abs(cRnY16 - cRnY17) < 100){
  cRnY17 = DrawRect.top;
  return 0;
 }
 if(abs(cRnY0 - cRnY1) < 100){
  cRnY1 = DrawRect.top;
  return 0;
 }
 
 if(abs(cRnY2-cRnY3) > 400){
  cRnY3 = DrawRect.top;
  return 0;
 }
 if(abs(cRnY4-cRnY5) > 400){
  cRnY5 = DrawRect.top;
  return 0;
 }
    return 0;
}

int DrawFiveSnail()
{
 //在指定时间间隔内产生一次随机数
 RunTime();
 wsprintf(szMulb,L"%d %d",firtime,fistime);
    TextOut(hdc,0,0,szMulb,(int)wcslen(szMulb));

if(abs(firtime - fistime) >= 2)
    {
    fistime = firtime;
       MakePoint();
    }

Graphics graphic(hdc);
 
 if(cp[1] > cRnY0  || cp[1] < cRnY1){
  rAspecty0 = -rAspecty0;
 }
   
 if(cp[0] > rCRangeX0 || cp[0] < rCRangeX1){
       rAspectx0 = -rAspectx0;
 }
   
 //控制点2
 if(cp[3] > cRnY2  || cp[3] < cRnY3){
      rAspecty1 = -rAspecty1;
 }
 if(cp[2] < cRnX2 || cp[2] > cRnX3){
   rAspectx1 = -rAspectx1;
 }
   
 //控制点3
 if(cp[5] > cRnY4 || cp[5] < cRnY5){
       rAspecty2 = -rAspecty2;  
 }
 if(cp[4] > cRnX4 || cp[4] < cRnX5){
  rAspectx2 = -rAspectx2;
 }

//控制点4
 if(cp[7] > cRnY6 || cp[7] < cRnY7){
       rAspecty3 = -rAspecty3;
 }

if(cp[6] > cRnX6 || cp[6] < cRnX7){
  rAspectx3 = -rAspectx3;
 }

//控制点5
 if(cp[8] > cRnY8 || cp[8] < cRnY9){
  rAspectx4 = -rAspectx4;
 }
 if(cp[9] > cRnX8 || cp[9] < cRnX9){
  rAspecty4 = -rAspecty4;
 }
   
 //控制点6
 if(cp[11] > cRnY10 || cp[11] < cRnY11){
  rAspecty5 = -rAspecty5;
 }
 if(cp[10] > cRnX10 || cp[10] < cRnX11){
  rAspectx5 = -rAspectx5;
 }
   
 // * 表示特殊控制点
 //控制点7 - *
 if(cp[13] > cRnY12 || cp[13] < cRnY13){
  rAspecty6 = -rAspecty6;
 }
 if(cp[12] > cRnX12 || cp[12] < cRnX13){
  rAspectx6 = -rAspectx6;
 }

//控制点8 - *
 if(cp[15] > cRnY14 || cp[15] < cRnY15){
  rAspecty7 = -rAspecty7;
 }
 if(cp[14] > cRnX14 || cp[14] < cRnX15){
  rAspectx7 = -rAspectx7;
 }
 //控制点9 - *
 if(cp[17] > cRnY16 || cp[17] < cRnY17){
  rAspecty8 = -rAspecty8;
 }
 if(cp[16] > cRnX16 || cp[16] < cRnX17){
  rAspectx8 = -rAspectx8;
 }
 //增量
 cp[0] += rAspectx0;
 cp[1] += rAspecty0;
 cp[2] += rAspectx1;
 cp[3] += rAspecty1;
 cp[4] += rAspectx2;
    cp[5] += rAspecty2;
    cp[6] += rAspectx3;
 cp[7] += rAspecty3;
 cp[8] += rAspectx4;
 cp[9] += rAspecty4;
    cp[10] += rAspectx5;
 cp[11] += rAspecty5;
    cp[12] += rAspectx6;
 cp[13] += rAspecty6;

cp[14] += rAspectx7;
 cp[15] += rAspecty7;
   
 cp[16] += rAspectx8;
 cp[17] += rAspecty8;
    DrawThreeSnailCurve(&graphic,cp);
 InvalidateRect(hWnd,&rect,true);
 return 0;
}

int Render()
{
 DrawFiveSnail();
 Sleep(5);
   
 return 0;
}

转载于:https://www.cnblogs.com/microsoftxiao/archive/2006/10/05/521864.html

想做Bezier动画,可惜弄出来这个差远了。相关推荐

  1. 干货 | 要想做好动效,你得先知道这些

    作者简介 翁志方,携程内容信息研发部"旅拍"前端开发.曾参加ACM-ICPC获银奖,目前喜欢研究各种新颖的交互和实现. 前言 动效是用户体验很重要的一部分.随着设备性能提升和人们对 ...

  2. layui导入 加载动画_厉害了!这个免费神器帮你无脑做施工动画

    ​你好,这里是 BIMBOX.今天诚意给你安利一款好用免费的施工动画软件. 很多施工企业在建完模型后,都会用模拟动画的形式展示施工方案流程.做施工方案可视化评审.质量安全交底等.施工模拟动画这两年也成 ...

  3. 想做C++软件开发工程师,我该如何去学习?

    想做C++软件开发工程师,我该如何去学习? 因为C++是一个兼具性能和抽象模型结合体,除了能够保证性能之外,还能用当今最流行的面向对象编程模型,而且生态系统由于这些年的积累,建设的也非常完善,所以在高 ...

  4. 关于新光源中我想做的事

    关于新光源建设的一些想法 关于新光源束测工作的一些想法 98年从科大本科毕业后来加速器工作至今,转眼20多年了,大致说说经历: 刚毕业正好赶上二期工程,在一期工程的基础上,更换很多老旧设备和升级很多系 ...

  5. 想做游戏测试工程师?这几点不知道可不行!

    如果你想转行游戏测试,如果你对游戏测试不太了解,如果你想知道游戏测试具体工作内容是什么,到底适合什么样的人,今天的分享会帮助你做全面了解. 01游戏测试的工作内容 我们先来说一下游戏测试的到底是什么? ...

  6. 测试人员想做游戏测试,你一定要知道这几点!

    如果你想转行游戏测试,如果你对游戏测试不太了解,如果你想知道游戏测试具体工作内容是什么,到底适合什么样的人,今天的分享会帮助你做全面了解. 01游戏测试的工作内容 我们先来说一下游戏测试的到底是什么? ...

  7. 人类想要拥有金钱、权力、美丽、永生、幸福……但海龟只想做一只海龟

    人类想要拥有金钱.权力.美丽.永生.幸福--. 但海龟只想做一只海龟! 写这篇文章的初心,原是为了介绍5月23日(世界海龟日)在广东被放归大海的那些乌龟壳上的二维码(兼具"导航"和 ...

  8. Treemily想做封闭版的家族社群,比Geni更迎合华人家庭观念

    Treemily 是一个以美国眼光来看「设计得颇奇特」的网站,别被它的诗作与山水画给吓到,它可是台湾这边的第一个「家族社群网站」 ! 什么是家族社群网站?看,朋友或许只是一时,亲戚却是一辈子.你在Fa ...

  9. 写给那些想做程序员和不想做程序员的人

    <写给那些想做程序员和不想做程序员的人> 首先说一说进入计算机专业的目的,我个人是因为十分喜欢IT业,很喜欢折腾电脑,所以在填报志愿是毫不犹豫的在报了的所有的学校都填写的计算机专业,梦想着 ...

最新文章

  1. 「架构技术专题」如何构建网站高可用架构(详细分析篇)?(6)
  2. Malware FAQ: How does the Ptrace exploit work o...
  3. Requests 2.18.1文档
  4. 首个开源 Linux 系统登陆火星,占有率超 Windows,一同登录还有一款安卓手机芯片...
  5. Chrome保存mht网页文件的方法 – 无需任何插件,完美!
  6. 通​过​C​a​c​t​i​监​控​w​i​n​d​o​w​s​资​源
  7. 2-机器学习入门-读书笔记
  8. 苹果迅雷iOS版安装教程
  9. 多少程序员的梦想职位,成为阿里P7真的就这么难吗-学会这些就够了
  10. vb访问服务器文件,VB6打开远程服务器文件
  11. redis 哈希hash实例应用
  12. 普通程序员如何走出困境
  13. Whole Word Masking
  14. MySQL 8.0 可以操作 JSON 了!!
  15. task04 办公自动化之Python 操作 PDF
  16. 国防科技大学计算机专业录取条件,国防科技大学录取条件
  17. ES版cpu如何购买和判断?
  18. java获取当前年月日历_java万年历,获取该年月日历表
  19. db2 数据库配置HADR+TSA添加集群节点
  20. 城南花未开,老程已不在;

热门文章

  1. java redis 原子操作_redis快速入门
  2. 目标检测(二)--Hough Forests for Object Detection
  3. 一周年工作总结--wfdb库使用
  4. osea/Beat Classification 4.0-4.2
  5. 软件测试颗粒度,测试用例粒度粗细的划分
  6. clickhouse数据类型
  7. QT--学习疑惑探索
  8. java基础 UDP通信 user datagram protocol 用户数据豆协议 TCP transmission control protocol 传输控制协议 多线程TCP...
  9. glassfish3新建domain
  10. INIT: vesion 2.88 booting