艺术编程Processing基础——钟表(简单)

刚接触到processing这个简单而强大的工具,看了一些基础便可以制作一些简单的“小玩意”,下面是一个简单的钟表的制作过程,记录下来

效果:

表盘,圆形,有60个刻度,12个明显一些的刻度

float lineLength = 10;
for(int i = 1;i <= 60;i++){if(i % 5 == 0){lineLength = 20;}else{lineLength = 10;}
//processing通过弧长进行运算的话  0在钟表“3点”的位置,12点的位置为-PI/2
float x1 = width/2 + cos(i * PI / 30 - PI / 2) * (radius - lineLength);
float y1 = height/2 + sin(i * PI / 30 - PI / 2) *(radius - lineLength);
float x2 = width/2 + cos(i * PI / 30 - PI / 2) * radius;
float y2 = height/2 + sin(i * PI / 30 - PI / 2) * radius;
line(x1,y1,x2,y2);


表盘上有字,显示1-12,在长刻度下面进行显示

for(int i = 1;i <= 60;i++){if(i % 5 == 0){lineLength = 20;pushMatrix();translate(width/2,height/2);int numTex = i / 5;rotate(radians(30 * numTex));String str = numTex + "";fill(255);//注释部分为另一种显示数字的方式,所有数字都是正向显示,与画刻度线的方式同理//text(str,width/2 + cos(i * PI / 30 - PI / 2) * 160,height/2 + sin(i * PI / 30 - PI / 2) * 160);textSize(10);text(str,cos(-PI/2) * 160,sin(-PI/2) * 160);popMatrix();}else{lineLength = 10;}float x1 = width/2 + cos(i * PI / 30 - PI / 2) * (radius - lineLength);float y1 = height/2 + sin(i * PI / 30 - PI / 2) * (radius - lineLength);float x2 = width/2 + cos(i * PI / 30 - PI / 2) * radius;float y2 = height/2 + sin(i * PI / 30 - PI / 2) * radius;line(x1,y1,x2,y2);}

这样刻度就显示出来了,现在还差左上角的时间和指针

时间就是简单的hour() minute() second()内置函数来获取
指针思路:
把一整天的时间换算成秒,计算当前时间为多少秒
通过当前时间有多少秒和整天时间的比值求指针在一圈之中转到了多少度

显示时间:

  fill(0,0,0,50);noStroke();rect(0,0,220,48);textSize(25);fill(255);text(hour() + ":" + minute() + ":" + second(),110,25);

绘制指针

float secondNum = 0;
float hourLineLength = 60;
float minuteLineLength = 90;
float secondLineLength = 120;secondNum = hour() * 60 * 60 + minute() * 60 + second();stroke(18,255,255);line(width/2,height/2,width/2 + cos(radians((secondNum/86400) * 720 - 90)) * hourLineLength,height/2 + sin(radians((secondNum/86400) * 720 - 90)) * hourLineLength);stroke(255,219,147);line(width/2,height/2,width/2 + cos(radians(((secondNum%3600)/3600) * 360 - 90)) * minuteLineLength,height/2 + sin(radians(((secondNum%3600)/3600) * 360 - 90)) * minuteLineLength);stroke(18,255,150);line(width/2,height/2,width/2 + cos(radians(((secondNum%60)/60) * 360 - 90)) * secondLineLength,height/2 + sin(radians(((secondNum%60)/60) * 360 - 90)) * secondLineLength);//上面是通过角度算出指针指向角度,注释部分是通过弧长计算//secondNum = (hour()%12) * 60 * 60 + minute() * 60 + second();//line(width/2,height/2,width/2 + cos(secondNum/43200 * TWO_PI - PI / 2) * hourLineLength,//height/2 + sin(secondNum/43200 * TWO_PI - PI / 2) * hourLineLength);

这样基本上就完成了
其中运用到一点点数学知识就是通过三角函数求圆上的某一点的坐标
在绘画刻度,指针的时候用到

下面是全部代码

float radius = 200;
float lineLength = 10;
float hourLineLength = 60;
float minuteLineLength = 90;
float secondLineLength = 120;
PFont myFont;void setup(){ size(500,500);background(0);strokeWeight(3);myFont = createFont("font1.ttf",48);ellipseMode(RADIUS);textFont(myFont);textAlign(CENTER,CENTER);
}void draw(){stroke(255,252,31);fill(0);ellipse(width / 2,height / 2,200,200);for(int i = 1;i <= 60;i++){if(i % 5 == 0){lineLength = 20;pushMatrix();translate(width/2,height/2);int numTex = i / 5;rotate(radians(30 * numTex));String str = numTex + "";fill(255);//text(str,width/2 + cos(i * PI / 30 - PI / 2) * 160,//height/2 + sin(i * PI / 30 - PI / 2) * 160);textSize(10);text(str,cos(-PI/2) * 160,sin(-PI/2) * 160);popMatrix();}else{lineLength = 10;}float x1 = width/2 + cos(i * PI / 30 - PI / 2) * (radius - lineLength);float y1 = height/2 + sin(i * PI / 30 - PI / 2) *(radius - lineLength);float x2 = width/2 + cos(i * PI / 30 - PI / 2) * radius;float y2 = height/2 + sin(i * PI / 30 - PI / 2) * radius;line(x1,y1,x2,y2);}fill(0,0,0,50);noStroke();rect(0,0,220,48);textSize(25);fill(255);text(hour() + ":" + minute() + ":" + second(),110,25);float secondNum = 0;secondNum = hour() * 60 * 60 + minute() * 60 + second();stroke(18,255,255);line(width/2,height/2,width/2 + cos(radians((secondNum/86400) * 720 - 90)) * hourLineLength,height/2 + sin(radians((secondNum/86400) * 720 - 90)) * hourLineLength);stroke(255,219,147);line(width/2,height/2,width/2 + cos(radians(((secondNum%3600)/3600) * 360 - 90)) * minuteLineLength,height/2 + sin(radians(((secondNum%3600)/3600) * 360 - 90)) * minuteLineLength);stroke(18,255,150);line(width/2,height/2,width/2 + cos(radians(((secondNum%60)/60) * 360 - 90)) * secondLineLength,height/2 + sin(radians(((secondNum%60)/60) * 360 - 90)) * secondLineLength);//secondNum = (hour()%12) * 60 * 60 + minute() * 60 + second();//line(width/2,height/2,width/2 + cos(secondNum/43200 * TWO_PI - PI / 2) * hourLineLength,//height/2 + sin(secondNum/43200 * TWO_PI - PI / 2) * hourLineLength);}

Processing基础——钟表(简单)相关推荐

  1. ASP.NET Core 异常和错误处理 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 异常和错误处理 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 异常和错误处理 上一章节中,我们学习了 ASP.NET Cor ...

  2. ASP.NET Core macOS 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程

    ASP.NET Core macOS 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程 原文:ASP.NET Core macOS 环境配置 - ASP.NET Core 基础 ...

  3. Python基础之简单用户交互

    Python基础之简单用户交互 一.要求及目的 二.代码内容 三.学习总结 一.要求及目的 要求设计一个简单的计算程序 二.代码内容 # 简单计算 a = input("please inp ...

  4. ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 标签助手 上一章节我们介绍了视图导入,学习了 ...

  5. ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程

    ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程 原文:ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单 ...

  6. ASP.NET Core 动作结果 - ASP.NET Core 基础教程 - 简单教程,简单编程

    ASP.NET Core 动作结果 - ASP.NET Core 基础教程 - 简单教程,简单编程 原文:ASP.NET Core 动作结果 - ASP.NET Core 基础教程 - 简单教程,简单 ...

  7. ASP.NET Core Identity 迁移数据 - ASP.NET Core 基础教程 - 简单教程,简单编程

    ASP.NET Core Identity 迁移数据 - ASP.NET Core 基础教程 - 简单教程,简单编程 原文:ASP.NET Core Identity 迁移数据 - ASP.NET C ...

  8. ASP.NET Core Windows 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Windows 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Windows 环境配置 ASP.NET Core ...

  9. ASP.NET Core 基础教程 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 基础教程 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 是对 ASP.NET 有重大意义的一次重新设计.本章节我们将介绍 A ...

最新文章

  1. 局域网防雷电***实用解决方案
  2. java基础学习(二)数组
  3. Android 程序 正确修改包名的方式(源代码)
  4. 走近分形与混沌(part16)--三与自组织
  5. 【NOI2013】树的计数【树的遍历】【期望】
  6. 【剑指offer - C++/Java】14、链表中倒数第k的节点
  7. idea 解决jar 的冲突
  8. win11菜单栏的推荐项目怎么取消 windows11取消推荐项目的设置方法
  9. 45本数据分析、Python的书籍,包邮送到家
  10. 计算机配件投标书范本,2021年计算机投标书格式范本.doc
  11. 利用python获取tushare 财经数据
  12. Linux 五个最牛视频编辑软件
  13. 自定义 View 实现汉字笔顺动画
  14. 计算机科学导论整理知识点,《计算机科学导论》 数据库基础知识
  15. 电脑编辑安卓分区_20分钟轻松解决安卓手机分区问题 干货篇
  16. 大数据可以考哪些证书?
  17. 投稿SCI 中文文献翻译后 中英文混排的解决办法
  18. Java并发的四种风味:Thread、Executor、ForkJoin和Actor
  19. xss漏洞之——XSS平台搭建
  20. 内存检测工具BoundsChecker使用详述

热门文章

  1. 时针分针夹角公式与重合问题
  2. Elixir 学习笔记
  3. cocosjs破解记录
  4. .NET 开源开发项目
  5. 图灵杯 蔡老板的会议
  6. 能用计算机做什么作文,关于描写计算机的作文
  7. java医院门诊预约挂号排班系统ssm
  8. 竞争定位、价值主张及企业市场细分
  9. 现在手机千篇一律,下一个乔布斯的传奇在哪?
  10. STP客户分类(Python)