Processing之函数

news2024/9/27 17:35:49

一.函数基础

       函数是processing程序中最基本的结构。经常使用的函数有draw()、line()、size()等。计算机每次运行程序的一行。当一个函数运行时,计算机跳到函数定义的位置,运行到哪里的代码,然后在跳回它离开的位置。 

1.1掷骰子

       案例代码如图1:

                                   图1

       保存并运行如图2

                        图2

       图2中rollDice()中的两行代码选择一个1到骰子面数之间的随机数,然后将数字输出到控制台。由于数字是随机的,随意程序每次运行时我们会看到不同的数字。

1.2另一个掷骰子方法

       如果写一个功能相同的程序但是不用rollDice()函数,代码如图3

                                   图3

       注意:用第一种方法比较好,第二种较麻烦,比如说想修改输出内容需要修改三次,而第一种只需要修改一次。

二.写一个函数

2.1绘制猫头鹰

       案例代码如下

void setup(){
  size(480,120);
}
void draw(){
  background(176,204,226);
  translate(110,110);
  stroke(138,138,125);
  strokeWeight(70);
  line(0,-35,0,-65);
  noStroke();
  fill(255);
  ellipse(-17.5,-65,35,35);
  ellipse(17.5,-65,35,35);
  arc(0,-65,70,70,0,PI);
  fill(51,51,30);
  ellipse(-14,-65,8,8);
  ellipse(14,-65,8,8);
  quad(0,-58,4,-51,0,-44,-4,-51);
}

       保存并运行如图5

                图5

       注意:translate()函数将原点(0,0)移动到距上边110像素、距左边110像素的位置,猫头鹰的形象根据移动过的(0,0)来绘制,坐标有时取正,有时取负,因为它的中心点在新的(0,0)点。

2.2绘制一对猫头鹰

       案例代码如下:

void setup(){
  size(480,120);
}
void draw(){
  background(176,204,226);
  translate(110,110);
  stroke(138,138,125);
  strokeWeight(70);
  line(0,-35,0,-65);
  noStroke();
  fill(255);
  ellipse(-17.5,-65,35,35);
  ellipse(17.5,-65,35,35);
  arc(0,-65,70,70,0,PI);
  fill(51,51,30);
  ellipse(-14,-65,8,8);
  ellipse(14,-65,8,8);
  quad(0,-58,4,-51,0,-44,-4,-51);
  //right
  translate(70,0);
  stroke(138,138,125);
  strokeWeight(70);
  line(0,-35,0,-65);
  noStroke();
  fill(255);
  ellipse(-17.5,-65,35,35);
  ellipse(17.5,-65,35,35);
  arc(0,-65,70,70,0,PI);
  fill(51,51,30);
  ellipse(-14,-65,8,8);
  ellipse(14,-65,8,8);
  quad(0,-58,4,-51,0,-44,-4,-51);
}
        将第一个代码复制粘贴然后修改translate()函数的值就可以实现绘制两只猫头鹰,但如果数量变多呢?复制粘贴显得麻烦,因此我们需要编写一个函数来实现绘制。

2.3一个猫头鹰函数

       案例代码如下

void setup(){
  size(480,120);
}
void draw(){
  background(176,204,226);
  owl(110,110);
  owl(180,110);
}
void owl(int x,int y){
  pushMatrix();
  translate(x,y);
  stroke(138,138,125);
  strokeWeight(70);
  line(0,-35,0,-65);
  noStroke();
  fill(255);
  ellipse(-17.5,-65,35,35);
  ellipse(17.5,-65,35,35);
  arc(0,-65,70,70,0,PI);
  fill(51,51,30);
  ellipse(-14,-65,8,8);
  ellipse(14,-65,8,8);
  quad(0,-58,4,-51,0,-44,-4,-51);
  popMatrix();
}
        保存并运行如图6

                     图6

        效果和图5是一样的,但是运用了owl()函数,这使得代码显得干净利落。首先猫头鹰的代码只出现了一次,并被命名为owl()函数。这段代码运行两次是因为draw()函数调用了它两次。猫头鹰绘制在不同的位置是因为函数中的参数值被传递到x和y中了。

2.4增加超多的猫头鹰

        有了函数后,我们可以用for循环依次改变第一个参数的值,排列绘制很多猫头鹰。

        案例代码如下

void setup(){
  size(480,120);
}
void draw(){
  background(176,204,226);
  for(int x=35;x<width+70;x+=70){
    owl(x,110);
}
}
void owl(int x,int y){
  pushMatrix();
  translate(x,y);
  stroke(138,138,125);
  strokeWeight(70);
  line(0,-35,0,-65);
  noStroke();
  fill(255);
  ellipse(-17.5,-65,35,35);
  ellipse(17.5,-65,35,35);
  arc(0,-65,70,70,0,PI);
  fill(51,51,30);
  ellipse(-14,-65,8,8);
  ellipse(14,-65,8,8);
  quad(0,-58,4,-51,0,-44,-4,-51);
  popMatrix();
}

        保存并运行如图7

                                        图7

2.5不同尺寸的猫头鹰

        我们可以在上一个案例中添加两个参数来改变每只猫头鹰的灰度值和尺寸。案例代码如下

void setup(){
  size(480,120);
}
void draw(){
  background(176,204,226);
  randomSeed(0);
  for(int i=35;i<width+40;i+=40){
    int gray=int(random(0,102));
    float scalar=random(0.25,1.0);
    owl(i,110,gray,scalar);
}
}
void owl(int x,int y,int g,float s){
  pushMatrix();
  translate(x,y);
  scale(s);
  stroke(138-g,138-g,125-g);
  strokeWeight(70);
  line(0,-35,0,-65);
  noStroke();
  fill(255);
  ellipse(-17.5,-65,35,35);
  ellipse(17.5,-65,35,35);
  arc(0,-65,70,70,0,PI);
  fill(51,51,30);
  ellipse(-14,-65,8,8);
  ellipse(14,-65,8,8);
  quad(0,-58,4,-51,0,-44,-4,-51);
  popMatrix();
}

        保存并运行如图8

                                            图8

三.返回值

        函数可以做计算并向主函数返回一个值。例如random()和sin()函数,当这类函数出现时,它返回的值通常被赋给一个变量。

float    r=random(1,10);

        在这个例子中random()函数可以返回1~10之间的数值,这个值随后被赋予r变量。一个函数的返回值也可以经常被用作另一个函数的参数,例如:

point(random(width,rrandom(height));

        在这里它们没有被赋予一个变量而是作为point()的参数传入,并用于定位窗口中点的位置。

3.1返回一个值

        为了写一个带返回值的函数,将关键词void替换成需要返回的数据类型。一般使用retrun()来返回数据。案例代码如图9

                                图9

        保存并运行如图10

                图10

        calculateMars()函数是计算我们临近星球上的人或者物体的重量。函数名前是float,所以会返回一个float的数值。在代码的最后一行这个函数的返回变量newWeight,在setup()的第二行,返回值被赋予marsWeight。如果想看自己在火星的体重,可以将yourWeight改为我们自己的体重。

四.案例函数之机器人

       案例代码如下:

void setup(){
  size(720,480);
  strokeWeight(2);
  ellipseMode(RADIUS);
}
void draw(){
  background(0,153,204);
  drawRobot(120,420,110,140);
  drawRobot(270,460,260,95);
  drawRobot(420,310,80,10);
  drawRobot(570,390,180,40);
}
void drawRobot(int x,int y,int bodyHeight,int neckHeight){
  int radius=45;
  int ny=y-bodyHeight-neckHeight-radius;//脖子的y值
  //脖子

stroke(255);

line(x+2,y-bodyHeight,x+2,ny);

line(x+12,y-bodyHeight,x+12,ny);

line(x+22,y-bodyHeight,x+22,ny);

//天线

line(x+12,ny,x-18,ny-43);

line(x+12,ny,x+42,ny-99);

line(x+12,ny,x+78,ny+15);

//身体

noStroke();

fill(255,204,0);

ellipse(x,y-33,33,33);

fill(0);

rect(x-45,y-bodyHeight,90,bodyHeight-33);

fill(255,204,0);

rect(x-45,y-bodyHeight+17,90,6);

//头部

fill(0);

ellipse(x+12,ny,radius,radius);

fill(255);

ellipse(x+24,ny-6,14,14);
fill(0);

ellipse(x+24,ny-6,3,3);

}

        保存并运行如图11

                                      图11

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1992541.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

离线安装windows应用商店中的应用

以windows notepad为例 1.百度windows应用商店&#xff0c;notepad 进入https://apps.microsoft.com/detail/9msmlrh6lzf3?hlen-aq&glAQ 是一个名为windows notepad的应用&#xff0c;复制地址栏里面detail后面的字符9msmlrh6lzf3 有很多notepad类似的应用&#xff0c;wi…

2024年新能源汽车充电桩建设驶入快车道

2024年新能源汽车市场大爆发&#xff1a;渗透率飙升&#xff0c;保有量创新高&#xff0c;充电桩建设驶入快车道 随着2024年新能源汽车市场的持续繁荣&#xff0c;一场前所未有的绿色革命正在全球范围内加速推进。这一年&#xff0c;新能源汽车的渗透率不仅实现了质的飞跃&…

CSS 实现两边固定宽,中间自适应

0. **Flexbox 实现**&#xff1a; css复制代码.container { display: flex; } ​ .fixed { width: 200px; /* 两边固定宽度 */ } ​ .flexible { flex: 1; /* 中间自适应 */ } html复制代码<div class…

指纹失效,忘记iPhone屏幕解锁密码怎么应对?

为保证手机的安全及隐私&#xff0c;我们会给手机设置屏幕锁屏密码&#xff0c;通过输入设置密码来解锁手机屏幕锁&#xff0c;但为了给大家提供快速便捷的解锁方式&#xff0c;苹果公司提供了指纹解锁&#xff0c;不仅解锁更便捷了还极大地增强了设备的安全性。但有时我们手指…

springboot在线图库网站-计算机毕业设计源码38597

基于SpringbootVue的在线图库网站的设计与实现 摘 要 本文基于Spring Boot作为后端框架&#xff0c;Vue作为前端框架&#xff0c;设计并实现了一个功能丰富的在线图库网站。该网站提供了注册、登录、普通用户功能和管理员功能等一系列功能&#xff0c;为用户提供了方便的浏览摄…

[论文笔记]BM25S:Python打造超越RANK-BM25的实现

引言 今天带来一篇BM25变种的论文笔记&#xff0c;不要低估BM25&#xff0c;在RAG中检索中通常都会引入BM25检索&#xff0c;然后配合嵌入模型进行混合检索。 BM25S: Orders of magnitude faster lexical search via eager sparse scoring&#xff0c;题目翻译过来是&#xf…

sqlserver导出数据脚本

文章目录 sqlserver导出数据脚本任务-生成脚本 sqlserver导出数据脚本 任务-生成脚本

第二十天的学习(2024.8.8)Vue拓展

昨天的笔记中&#xff0c;我们进行的项目已经可以在网页上显示查询到数据库中的数据&#xff0c;今天的笔记中将会完成在网页上进行增删改查的操作 1.删除表中数据 现在网页上只能呈现出数据库中的数据&#xff0c;我们首先添加一个删除按钮&#xff0c;使其可以对数据库数据…

线上学习管理系统/在线学习系统/网上学习系统

摘 要 本毕业设计的内容是设计并且实现一个基于SSM框架的线上学习管理系统。它是在Windows下&#xff0c;以MYSQL为数据库开发平台&#xff0c;Tomcat网络信息服务作为应用服务器。线上学习管理系统的功能已基本实现&#xff0c;主要包括学生、教师、课程信息、课程资料、试题…

用Python轻松移除PDF中的注释

PDF文档因其跨平台的兼容性和格式稳定性而备受青睐。然而&#xff0c;随着文档在不同用户间的流转&#xff0c;累积的注释可能会变得杂乱无章&#xff0c;甚至包含敏感或过时的信息&#xff0c;这不仅影响了文档的清晰度和专业性&#xff0c;还可能引发隐私风险。因此&#xff…

本地Linux服务器创建我的世界MC私服并实现与好友异地远程联机游戏

文章目录 前言1. 安装JAVA2. MCSManager安装3.局域网访问MCSM4.创建我的世界服务器5.局域网联机测试6.安装cpolar内网穿透7. 配置公网访问地址8.远程联机测试9. 配置固定远程联机端口地址9.1 保留一个固定tcp地址9.2 配置固定公网TCP地址9.3 使用固定公网地址远程联机 前言 本…

01_Electron 跨平台桌面应用开发介绍

Electron 跨平台桌面应用开发介绍 一、Electron 的介绍二、关于 NW.js 和 Electron 介绍三、搭建 Electron 的环境1、准备工作&#xff1a;2、安装 electron 环境3、查看 electron 的版本&#xff0c;electron -v 一、Electron 的介绍 Electron 是由 Github 开发的一个跨平台的…

四宫格照片拼图怎么制作?5种方法制作很简单

一张创意满满的四宫格照片总能瞬间吸引眼球&#xff0c;无论是社交媒体分享还是日常记录&#xff0c;都能让你的作品脱颖而出。今天&#xff0c;给大家分享五种超实用的四宫格照片拼图制作方法&#xff0c;快来一起看看吧。 方法一&#xff1a;迅捷图片转换器 这不仅是一款强大…

数据结构基础入门

&#x1f600;前言 本篇博文是关于数据结构基础入门&#xff0c;希望你能够喜欢 &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满意是我的动力&#x1f609…

有没有比较好的PDF编辑软件可以推荐一下?

推荐3款好用的PDF编辑器&#xff0c;简单好用&#xff0c;且基础功能免费&#xff0c;可以满足99%的工作、学习需求。 支持Windows版、Mac版 1、PDF编辑器 点击直达链接>>pdfbianji.55.la 这是一款功能丰富、编辑简单好用的PDF编辑器&#xff0c;目前仅支持Windows系统…

【C++】函数的定义

函数定义的格式 函数类型 函数名( 参数列表 ) { 函数体语句 return表达式 } 下面是一个实例&#xff0c;是用来写一个加法函数的 #include<iostream> using namespace std;//函数的定义 //语法&#xff1a; //返回值类型 函数名 &#xff08;参数列表&#xff09; {…

DIRB:一款强大的Web目录扫描工具使用指南

网安学习交流 DIRB是一款广泛使用的开源Web内容扫描工具&#xff0c;它专注于发现Web服务器上存在的目录和文件。对于安全研究员、渗透测试人员以及Web开发者来说&#xff0c;DIRB是一个不可或缺的工具&#xff0c;它能帮助他们识别潜在的入口点&#xff0c;从而进一步评估目标…

2023华为od机试C卷【符号运算/求分数计算结果】Python实现

思路: 先将中缀表达式改为后缀表达式,这样就不用考率需要使用括号来标识操作符的优先级。后缀表达式的计算按 操作符 从左到右出现的顺序依次执行(不考虑运算符之间的优先级),对于计算机而言是比较简单的结构。 然后实现后缀表达式的计算。需要注意的是:在处理后缀表达式…

谁才是制作中国式报表的最佳工具?赶紧看看这款“功能强大且免费”的报表工具!

确定制作中国式报表最佳工具的前提是&#xff1a;先搞懂到底什么是中国式报表&#xff1f; 一. 什么是中国式报表&#xff1f; 其实行业内一直没有对中国式报表做出明确的定义&#xff0c;但综合来看&#xff0c;典型的中国式报表具有以下四个显著特征&#xff1a; 1.报表格…

GIF压缩怎么压?整理了六个图片压缩方法(附步骤)

GIF压缩方法有哪些&#xff1f;电脑照片怎么压缩到200k&#xff1f; 最近很经常看到类似的问题&#xff0c;本文就分享几个简单的电脑文件压缩方法。对GIF图进行压缩是一个常见的需求&#xff0c;可以帮助减小文件大小&#xff0c;提高加载速度&#xff0c;同时保持图像质量。…