2011-04-06 44 views
1

我试图从处理开始。只是缩放一个矩形

现在我只是想缩放一个矩形。我发现这个例子:

float a = 0.0; 
float s = 0.0; 

void setup() 
{ 
    size(200,200); 
    rectMode(CENTER); 
    frameRate(30); 
} 

void draw() 
{ 

    s = s + 0.04; 

    translate(width/2, height/2); 
    scale(s); 
    rect(0, 0, 50, 50); 

} 

自如缩放矩形,但我有点意外,因为调整大小的矩形我所期望的大小参数,矩形的(第三和第四)()进行了修改,这样的事情方式:

float r = 1; 

void setup() 
{ 
    size(200,200); 
    rectMode(CENTER); 
    frameRate(30); 
} 

void draw(){ 

    rect(width/2, height/2, r, r); 

    r += 1; 

} 

但这种方式并不能平滑地缩放矩形。那么,我应该使用第一种方法而不是第二种方法,即使我发现第二种方法更自然吗?任何评论都将成为欢迎。

问候

哈维尔

回答

2

第一个解决方案是相当复杂的,你实际上并没有缩放矩形,而是投影矩阵。投影矩阵是在画出某物之前应用的一系列数学运算。你可以把它想象成一台相机,但它远比这更复杂。

我实际上把代码并排放在一起,没有注意到光滑度差别很大。我还添加了一些调整,这样可以帮助:)

float r = 1; 
float s = 0.0; 

void setup() 
{ 
    size(200,200); 
    rectMode(CENTER); 
    frameRate(30); 
    smooth(); 
} 

void draw(){ 
    rect(width/4, height/2, r, r); 
    r += 1.4; 
    translate(width/2, height/2); 
    scale(s); 
    translate(-width/2, -height/2); 
    rect(width/2, height/2, 50, 50); 
    s += 0.04; 
} 

,我所做的主要变化是开启顺畅。我认为那是因为你没有打开它,顶部的方形图正在跳到每个像素上,但是通过平移/缩放操作,它可以平滑过渡。我做的另一件事是在做完刻度操作之后,再回到左上角。这样做很重要,这样可以使事情在你期望的地方得到。您会注意到缩放矩阵现在从中心向外扩展。