平移、旋转、缩放和媒体

news2024/9/9 4:21:08

一、平移

1.1translate()函数

       做转换工作可以用translate()函数,这个函数可以改变坐标系。通过改变默认的坐标系,我们可以创建不同的转换方式,包括平移、旋转和缩放。

1.2平移位置案例

       案例代码如图1

                                           图1

       保存运行如图2

                         图2

       这个案例中圆的位置是(0,0),但它在整个屏幕中移动,因为它受translate()函数影响。代码中translate()函数设置屏幕中(0,0)的坐标为(mouseX,mouseY),每次draw()函数运行,ellipse()函数会在新的位置绘制圆,也就是当前鼠标位置。

       注意:如果没有写background()函数,那么圆会随着鼠标的移动不断更新位置并绘制新的圆,代码如图3

                                 图3

       保存运行如图4

                         图4

1.3多重变换

       当一个平移被执行之后,它会被应用于接下来所有的绘图方法中。案例代码如图5

                                           图5

       保存并运行如图6

                     图6

       此案例中,第二个小圆的位置被移动了mouseX+40,mouseY+15的距离。这两个圆的位置都是(0,0),但translate()函数使得两个圆都移动到不同的位置。当然,再draw()函数中位移的信息叠加起来,但它们都会在每次运行draw()函数开始被重置。

二、旋转

2.1rotate()函数

       rotate()函数会旋转整个坐标系。它有一个参数,是要旋转的角度(用弧度制表示)。它总是相对于(0,0)旋转,也就是沿着原点旋转。

2.2沿角旋转

       案例代码如图7

                                        图7

       保存运行如图8

                        图8

       此案例size()函数设定的窗口高度为240,所以mouseX会是0~120,mouseX/100.0会是0~2.4。(注意:120是除以100.0,而不是100)。

2.3中心旋转

       一个图形想沿自己的中心上进行旋转,则它的中心必须绘制在(0,0)上。案例代码如图9

                                        图9

       保存并运行如图10

                      图10

       图9中图形由rect()函数设定宽为160,高20像素的矩形。因此设置矩形中心的位置是(-80,-10)的坐标上代替(0,0)成为图形的中心。

2.4移动然后再旋转

        为了让一个图形沿中心旋转并在屏幕中沿着原点移动。我们可以先用translate()函数,接着用rotate()函数,最后绘制图形让它的原点在(0,0)上。 代码如图11

                                          图11

        保存并运行如图12

                      图12

2.5旋转然后再移动

        代码如图13

                                         图13

        保存并运行如图14

                        图14

        代码运行时,矩形是沿着窗口左上角进行旋转的,距离顶角的位置由translate()函数决定,而translate()函数设的值是(mouseX,mouseY),由鼠标决定。

2.6一个关节臂

        在这个例子中,我们使用一系列translate()函数和rotate()函数来创造一个前后弯曲的连接臂。每一个translate()函数都进一步移动线的位置,每一个rotate()函数都叠加在上一个旋转以上进一步弯曲。代码如下

float angle=0.0;
float angleDirection=1;
float speed=0.005;
void setup(){
  size(240,120);
}
void draw(){
  background(204);
  translate(20,25);
  rotate(angle);
  strokeWeight(12);
  line(0,0,40,0);
  translate(40,0);
  rotate(angle*2.0);
  strokeWeight(6);
  line(0,0,30,0);
  translate(30,0);
  rotate(angle*2.5);
  strokeWeight(3);
  line(0,0,20,0);
  angle+=speed*angleDirection;
  if((angle>QUARTER_PI)||(angle<0)){
    angleDirection=-angleDirection;
  }
}

        保存并运行如图15

                   图15

        angle变量从0增长到QUARTET_PI(1/4Π),然后开始减少直至小于0,接着继续循环重复。angleDirection变量的值是1或者-1.这使得angle的值持续增加或者减少。

三、缩放

 3.1scale()函数

        scale()函数可以延展屏幕中的坐标,由于坐标按缩放尺度放大或缩小每一个绘制在窗口的图形也会按尺度放大或缩小,使用scale(3)使原图形放大3悲,scale(0.5)是缩小一半。 像rotate()函数,scale()函数也沿原点进行变换。为了让一个图形沿中心进行缩放,先移动在缩放,然后将图形的中心绘制在坐标(0,0)上。案例代码如图16

                                          图16

        保存并运行如图17

                        图17

3.2保持描边一致

        在图17中,我们可以发现矩形的描边不一致,为了保持描边的一致,需要用所期望的描边粗细除以一个标量值。案例代码如图18

                                           图18

        保存并运行如图19

                     图19

3.3独立的变换

        为了使每次变换的效果独立并且不相互影响,可以使用pushMatrix()和popMatrix()函数。当pushMatrix()运行的时候,它保存一个当前坐标系的备份,然后在调用popmatrix()函数之后还原。当希望变换的效果应用在另一个图形中并且不希望影响其他图形时,这是非常有用的。

        案例代码如图20

                                                 图20

        保存并运行如图21

                        图21

        在图21中我们可以看到小矩形总在同一个地方绘制,这是因为translate(mouseX,mouseY)函数的效果被popMatrix()函数抵消了。

3.4机器人

        代码如下

float x=60;
float y=440;
int radius=45;
int bodyHeight=180;
int neckHeight=40;
float easing=0.04;
void setup(){
  size(360,480);
  ellipseMode(RADIUS);
}
void draw(){
 strokeWeight(2);
 float neckY=-1*(bodyHeight+neckHeight+radius);
 background(0,153,204);
 translate(mouseX,y);
  if(mousePressed){
    scale(1.0);
  }else{
    scale(0.6);
}
//body
noStroke();
fill(255,204,0);
ellipse(0,-33,33,33);
fill(0);
rect(-45,-bodyHeight,90,bodyHeight-33);
//neck
stroke(255);
line(12,-bodyHeight,12,neckY);
//hair
pushMatrix();
translate(12,neckY);
float angle=-PI/30.0;
for(int i=0;i<=30;i++){
  line(80,0,0,0);
  rotate(angle);
}
popMatrix();
//head
noStroke();
fill(0);
ellipse(12,neckY,radius,radius);
fill(255);
ellipse(24,neckY-6,14,14);
fill(0);
ellipse(24,neckY-6,3,3);
}

        运行结果如图22

                                     图22

四、媒体

4.1图像

        将图像添加到草图的步骤如下:

(1)将图像添加到草图程序的data文件夹中。

(2)创建PImage变量存储图像。

(3)使用loadImage()将图像加载到变量。

        案例代码如图23

                                           图23

        保存并运行如图24

                                图24

        注意:Image()函数第一个参数是指定绘制的图像,第二和第三个参数是设置图像x和y坐标。第四和第五个参数是绘制图像的宽度和高度,如果没有第四和第五这两个参数,图像按原尺寸呈现。

4.2多个图像

        案例代码如图25

                                            图25

        保存并运行如图26

                                图26

        注意:中文不会显示而是会显示框框。

4.3鼠标控制图像

        当mouseX和mouseY的值被用于image()函数的第四和第五个参数时,图像的尺寸就会随着鼠标的变化而变化。案例代码如图27   

                                            图27

        保存并运行如图28

                                图28

4.4GIF和PNG的透明度

        代码和插入JPG图像的代码差不多,就是把JPG图像换成GIF或者PNG就可以了。例如gif的案例代码如图29

                                     图29

4.5字体

4.5.1添加文字步骤

(1)将字体添加到data文件中(点击工具,选择创建字体即可)。

(2)创建一个PFont变量存储字体。

(3)创建这个字体并使用createFont()函数将字体读取给变量,这会读取字体文件,然后创建一个特殊的可以被Processing使用的版本。

(4)使用textFont()设置当前字体。

4.5.2绘制字体案例

        用text()函数绘制文字,可以用textSize()函数设置文字的尺寸。

案例代码如图30

                                      图30

        保存并运行如图31

                        图31

4.6在字符串中存储文字

        案例代码如图32

                                                  图32

        保存并运行如图33

                                     图33

五、图形

5.1图形步骤

(1)将一个svg文件添加到data文件中。

(2)创建一个PShape变量来存储矢量文件。

(3)用loadShape()函数读取矢量文件。

5.2绘制图形

        根据5.1中的步骤我们可以使用shape()函数绘制图像。案例代码如图34

                                    图34

        注意:第四和第五个函数是设置它的宽度和高度。

5.3缩放图形

        案例代码如图35

                                图35

       

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

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

相关文章

【大一公共课】C语言+python语言入门对比+思维导图

C 和 Python 入门教程对比 一、引言 C 语言和 Python 语言都是在编程领域中广泛使用的语言&#xff0c;但它们在语法、应用场景和学习难度上有很大的不同。本教程将对 C 和 Python 的入门知识进行对比&#xff0c;帮助您更好地理解和选择适合自己的编程语言。 二、C 语言入门 …

python爬取某财富网

过程&#xff1a; 点击底部的第3页&#xff0c;第5页&#xff0c;网页刷新了&#xff0c;但是顶部的url地址没有变。那么就是 动态加载&#xff0c; 就是 XHR. 直接请求api. 实验代码如下: import requestsheaders {"User-Agent": "Mozilla/5.0 (Windows NT…

LLM大模型:2024工业AI大模型发展分析

一、大模型为工业智能化发展带来新机遇 1.1. 大模型开启人工智能应用新时代 大模型引领人工智能技术创新和应用。 自 1956 年达特茅斯会议&#xff08;Dartmouth Conference&#xff09;提出人工智能的概念以来&#xff0c;人工智能技术经历了多个发展高峰和低谷。在这一长期的…

《深入浅出WPF》学习笔记一.解析WPF程序

《深入浅出WPF》学习笔记一.解析WPF程序 visual studio帮助我们做了那些事情 引用文件 输出文件类型 按照最原始的方式&#xff0c;我们需要手动打开编译器命令行&#xff0c;使用命令引用类库将代码编译成目标文件。 visual studio会根据我们选择的项目模板&#xff0c;自动…

Java学习Day19:基础篇9

包 final 权限修饰符 代码块 静态代码块在Java中是一个重要的特性&#xff0c;它主要用于类的初始化操作&#xff0c;并且随着类的加载而执行&#xff0c;且只执行一次。静态代码块的实践应用广泛&#xff0c;以下是几个主要的应用场景&#xff1a; 1. 初始化静态变量 静态代…

芋道源码yudao-cloud 二开日记(Editor富文本本地图片上传报错问题)

&#xff1a; 于是找到富文本的组件代码Editor.vue&#xff0c;检查一下上传的接口地址和token有没有传&#xff0c;如下图&#xff1a; 都没有问题&#xff0c;但还是报错&#xff0c;所以试试自定义上传的方法&#xff1a; // 导入上传文件的接口 import * as FileApi from …

数字图像处理 --- 二维离散余弦变换(python实战)

二维离散余弦变换(python实战) &#xff08;注&#xff1a;文中所讨论的离散余弦变换都是DCT-II&#xff09; 在上一篇文章中&#xff0c;我详细介绍了一维离散余弦变换的基本原理&#xff0c;并且以可视化的方式展示了一维DCT中用于分析输入信号的一系列基础余弦波。 在这篇文…

【简单图解 最强计网八股】HTTP 和 HTTPS 的区别

HTTP&#xff08;HyperText Transfer Protocol 超文本传输协议&#xff09; HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff0c;超文本传输安全协议&#xff09; 通过 传输内容加密 和 身份认证 保证了传输过程的安全性 协议传输内容加密身份认证响应效率端口号…

​LLM大模型从入门到精通(7)--企业大模型开发流程​

一、大模型项目开发的两种方式 2023年以来&#xff0c;随着ChatGPT的火爆&#xff0c;使得LLM成为研究和应用的热点&#xff0c;但是市面上大部分LLM都存在一个共同的问题&#xff1a;模型都是基于过去的经验数据进行训练完成&#xff0c;无法获取最新的知识&#xff0c;以及各…

Axure中继器:数据动态展示的强大工具

在Axure RP这一强大的原型设计工具中&#xff0c;中继器&#xff08;Repeater&#xff09;无疑是一颗璀璨的明珠。它以其独特的功能和广泛的应用场景&#xff0c;成为设计师在创建数据密集型原型时的首选。本文将深入探讨Axure中继器的特点、使用方式及其在数据动态展示中的重要…

新手小白如何投放知乎信息流广告推广?

随着越来越多的企业开始寻求更有效的方式来触达目标客户&#xff0c;知乎作为一个集知识分享、社交互动于一体的平台&#xff0c;已经成为众多品牌青睐的广告投放渠道之一。特别是知乎的信息流广告&#xff0c;因其高度融合的内容形式和精准的目标用户定向&#xff0c;成为了品…

ReactHooks(完结)

上期戳here ReactHooks[三] 一.memo 函数1.1 语法格式 二. useMemo2.1 问题引入2.2 语法格式2.3 使用 useMemo 解决刚才的问题 三.useCallback3.1 useMemo和useCallback区别3.2 语法格式 四.useTransition4.1 问题引入4.2 语法格式4.3 使用 isPending 展示加载状态4.4 注意事项…

Python3 | 练气期,捕获错误异常 、自定义异常处理!

[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ] 0x00 前言简述 在我们开始学习 Python 编程语言的时候, 我们经常会遇到各种错误, 比如:语法错误,运行时错误,逻辑错误等等, 这些错误在开发学习中是不可避免的, 但是随着我们学习的深入可以发现 Python 可以很好的处理…

Java 8-函数式接口

目录 一、概述 二、 函数式接口作为方法的参数 三、函数式接口作为方法的返回值 四、 常用的函数式接口 简单总结 简单示例 4.1 Consumer接口 简单案例 自我练习 实际应用场景 多线程处理 4.2 Supplier接口 简单案例 自我练习 实际应用场景 配置管理 4.3 Func…

UCC5320SCDWVR驱动SIC的功耗计算

驱动功耗可以通过分析器件的电气特性和推荐的电源电压来估算。以下是一些关键信息&#xff0c;用于估算功耗&#xff1a; 电源电流&#xff1a; 输入电源静态电流&#xff08;IVCC1​&#xff09;&#xff1a;最小值为1.67 mA&#xff0c;典型值为2.4 mA。输出电源静态电流&am…

day33

类类型接口 静态属性和静态方法 区分方法就是必须要有 new什么东西 完成什么类 第二种类类型接口 字面量类类型接口 接口继承 接口继承接口 继承多个接口 接口可以继承多个&#xff0c;但是类只能继承一个 接口不能继承对象 接口继承类&#xff0c;仅继承类中对于实…

力扣高频SQL 50题(基础版)第二十六题

文章目录 力扣高频SQL 50题&#xff08;基础版&#xff09;第二十六题1667.修复表中的名字题目说明实现过程准备数据实现方式结果截图总结 力扣高频SQL 50题&#xff08;基础版&#xff09;第二十六题 1667.修复表中的名字 题目说明 表&#xff1a; Users ----------------…

Day7-指针专题二

1. 字符指针与字符串 C语言通过使用字符数组来处理字符串 通常&#xff0c;我们把char数据类型的指针变量称为字符指针变量。字符指针变量与字符数组有着密切关系&#xff0c;它也被用来处理字符串 初始化字符指针是把内存中字符串的首地址赋予指针&#xff0c;并不是把该字符串…

TCP/UDP通信

1、TCP/IP四层模型 TCP/IP&#xff08;Transmission Control Protocol/Internet Protocol&#xff0c;传输控制协议/网际协议&#xff09;是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP 和IP两个协议&#xff0c;而是指一个由FTP、SMTP、TCP、UDP…

【Linux】make/Makefile的理解

1.make是一个命令&#xff0c;makefile是一个文件, 依赖关系和依赖方法. a.快速使用一下 i.创建一个Makefile文件(首字母也可以小写) b.依赖关系和依赖方法 i.依赖关系: 我为什么要帮你? mybin:mytest.c ii.依赖方法: 怎么帮? gcc -o mybin mytest.c make之前要注意先创建…