# Processing 008 平移、放缩、旋转变换、相对变换和绝对变换

Processing 008 平移、放缩、旋转变换、相对变换和绝对变换

平移变换

用 translate 函数可以平移坐标

translate(x, y); // 将坐标向右平移x, 向下平移 y

这个函数可以作用在此函数之后所有的绘图上,例如我们想绘制很多的椭圆

void setup() {
  background(255);
  size(680, 480);
  fill(#00FF00, 255);
  x = 100;
  y = 100;
  
  translate(-34, -24);
  for(int i = 0; i < 10; i++){
    translate(0, 48);
    for(int j = 0; j < 10; j++){
      translate(68, 0);
      ellipse(0, 0, 60, 40);
    }
    translate(-680, 0);
  }
}

所以这里的translate相当于是相对平移,即在上一次结果上平移,如果想用绝对坐标,可以在每一次平移后调用 resetMatrix

void setup() {
  background(255);
  size(680, 480);
  fill(#00FF00, 255);
  x = 100;
  y = 100;
  
  for(int i = 0; i < 10; i++){
    for(int j = 0; j < 10; j++){
      translate(i * 68 + 34, j * 48 + 24);
      ellipse(0, 0, 60, 40);
      resetMatrix();
    }
  }
}

在这里插入图片描述
上面两段代码的运行效果是一样的。

也可以在 draw 函数中绘制,需要注意的是 draw 函数每次调用完会自动 resetMatrix

float x, y;

void setup() {
  background(255);
  size(680, 480);
  fill(#00FF00, 255);
  x = 0;
  y = 0;
}

void draw(){
  translate(x * 68 + 34, y * 48 + 24);
  ellipse(0, 0, 60, 40);
  x += 1;
  if(x == 10){
    x = 0;
    y += 1;
    if(y == 10){
      y = 0;
    }
  }
}

放缩变换

用 scale 进行放大缩小

void setup() {
  background(255);
  size(680, 480);
  fill(#00FF00, 255);
  ellipse(200, 200 , 100, 50);
  scale(2, 2);
  ellipse(200, 200 , 100, 50);
}

在这里插入图片描述
需要注意的是所有的变换都是针对整个坐标系的而不是单个图形,所以如果想原地缩放的话,需要平移到原点之后再缩放,或者是直接以原点为基准绘制,绘制完成的基础上再平移到指定位置。

void setup() {
  background(255);
  size(680, 480);
  fill(#00FF00, 255);
  translate(width / 2 , height / 2);
  scale(4, 3);
  ellipse(0, 0 , 50, 50);
}

在这里插入图片描述

旋转变换

用 rotate 进行旋转变换

float alpha = 0;

void setup() {
  background(255);
  size(680, 480);
  fill(#00FF00, 255);
}


void draw(){
    translate(width / 2 , height / 2);
    rotate(alpha);
    ellipse(0, 0 , 200, 100);
    alpha += 0.05;
}

在这里插入图片描述
需要注意的是rotate 旋转的是弧度而非角度,可以用下列函数进行转换

rotate(radians(degree)); // 角度转弧度

弧度转角度

degrees(rad);
  • 12
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值