相對於目前的畫布大小進行縮放,如 scale(0.5)。 -> 變成 0.5 倍,1 的話是原本的大小。
function draw() {
translate(width/2,height/2)
let clr1 = color('yellow')
let clr2 = color('purple')
for(let i=0;i<30;i++){
let midColor = lerpColor(clr1,clr2,i/30);
fill(midColor)
ellipse(0, 0, 50, 50);
translate(10,10);
scale(0.95)
}
}
就可製造一個奇怪的牛角
push 有點一個暫存點
pop 回到push 暫存點
舉例來說
function draw() {
translate(width/2,height/2)
let clr1 = color('yellow')
let clr2 = color('purple')
angleMode(DEGREES) // 去設定360度這件事
for(let p=0;p<8;p++){
rotate(p/8*360)
// let scaleDet
push() // 儲存狀態
for(let i=0;i<30;i++){
let midColor = lerpColor(clr1,clr2,i/30);
fill(midColor)
ellipse(0, 0, 100, 100);
translate(10,10);
scale(0.95)
}
pop() //回到push狀態
}
}
接下來加上一些scaleDet隨機調整可以去做一些動態的動滋咚滋感覺
function draw() {
// background(0);
translate(width/2,height/2)
let clr1 = color('yellow')
let clr2 = color('purple')
angleMode(DEGREES) // 去設定360度這件事
for(let p=0;p<8;p++){
rotate(p/8*360)
rotate(frameCount)
let scaleDet = random(0.8,0.98)
push() // 儲存狀態
for(let i=0;i<30;i++){
let midColor = lerpColor(clr1,clr2,i/30);
fill(midColor)
ellipse(0, 0, 100, 100);
translate(10,10);
scale(scaleDet)
}
pop() //回到push狀態
}
}
範例參考
https://openprocessing.org/sketch/1259690
可以多做一些平滑的樣式效果,可以利用基本的rotate, translate都可以更改畫面的呈現
function draw() {
background(0,10) // 蓋掉上一層
translate(width/2,height/2); // 置中
rotate(frameCount/10) // frameCount 讓他們自動旋轉
scale(map(mouseX,0,width,-PI/2,PI)) // 縮放
shearX(map(mouseX,0,width,-PI/2,PI))
rect(0,0,200,200)
// ellipse(mouseX, mouseY, 20, 20);
}
也可以利用rotate 跟 frameCount 去做出不一樣的呈現方式
function draw() {
// colorMode(HSB);
// fill(map(frameCount%360,0,360,60,360),100,100)
// ellipse(mouseX, mouseY, 20, 20);
translate(width/2,height/2)
rotate(frameCount);
translate(frameCount,0);
if(frameCount%5 <3){
// scale(1/log(frameCount)*3)
fill(255-random(100),45,45);
}else{
// scale(1/log(frameCount)*3)
fill(250-random(200),245,45);
}
// scale(1/log(frameCount)*3) //log 十次方等於一
rect(0,0,80,30)
}
參考
https://openprocessing.org/sketch/1259707