刚接触到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);
}
有没有办法在这个简单的get方法中添加超时选项?我正在使用法拉第3.3。Faraday.get(url)四处寻找,我只能先发起连接后应用超时选项,然后应用超时选项。或者有什么简单的方法?这就是我现在正在做的:conn=Faraday.newresponse=conn.getdo|req|req.urlurlreq.options.timeout=2#2secondsend 最佳答案 试试这个:conn=Faraday.newdo|conn|conn.options.timeout=20endresponse=conn.get(url
我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b
我意识到这可能是一个非常基本的问题,但我现在已经花了几天时间回过头来解决这个问题,但出于某种原因,Google就是没有帮助我。(我认为部分问题在于我是一个初学者,我不知道该问什么......)我也看过O'Reilly的RubyCookbook和RailsAPI,但我仍然停留在这个问题上.我找到了一些关于多态关系的信息,但它似乎不是我需要的(尽管如果我错了请告诉我)。我正在尝试调整MichaelHartl'stutorial创建一个包含用户、文章和评论的博客应用程序(不使用脚手架)。我希望评论既属于用户又属于文章。我的主要问题是:我不知道如何将当前文章的ID放入评论Controller。
我的工作要求我为某些测试自动生成电子邮件。我一直在四处寻找,但未能找到可以快速实现的合理解决方案。它需要在outlook而不是其他邮件服务器中,因为我们有一些奇怪的身份验证规则,我们需要保存草稿而不是仅仅发送邮件的选项。显然win32ole可以做到这一点,但我找不到任何相当简单的例子。 最佳答案 假设存储了Outlook凭据并且您设置为自动登录到Outlook,WIN32OLE可以很好地完成此操作:require'win32ole'outlook=WIN32OLE.new('Outlook.Application')message=
1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,
//1.验证返回状态码是否是200pm.test("Statuscodeis200",function(){pm.response.to.have.status(200);});//2.验证返回body内是否含有某个值pm.test("Bodymatchesstring",function(){pm.expect(pm.response.text()).to.include("string_you_want_to_search");});//3.验证某个返回值是否是100pm.test("Yourtestname",function(){varjsonData=pm.response.json
Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功
在前面两节的例子中,主界面窗口的尺寸和标签控件显示的矩形区域等,都是用C++代码编写的。窗口和控件的尺寸都是预估的,控件如果多起来,那就不好估计每个控件合适的位置和大小了。用C++代码编写图形界面的问题就是不直观,因此Qt项目开发了专门的可视化图形界面编辑器——QtDesigner(Qt设计师)。通过QtDesigner就可以很方便地创建图形界面文件*.ui,然后将ui文件应用到源代码里面,做到“所见即所得”,大大方便了图形界面的设计。本节就演示一下QtDesigner的简单使用,学习拖拽控件和设置控件属性,并将ui文件应用到Qt程序代码里。使用QtDesigner设计界面在开始菜单中找到「Q
ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear
给定一个nxmbool数组:[[true,true,false],[false,true,true],[false,true,true]]有什么简单的方法可以返回“该列中有多少个true?”结果应该是[1,3,2] 最佳答案 使用转置得到一个数组,其中每个子数组代表一列,然后将每一列映射到其中的true数:arr.transpose.map{|subarr|subarr.count(true)}这是一个带有inject的版本,应该在1.8.6上运行,没有任何依赖:arr.transpose.map{|subarr|subarr.in