只是缩放一个矩形

时间:2011-04-06 16:43:38

标签: processing

我正在尝试处理。

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

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); 

}

它可以平滑地缩放矩形但是我有点意外,因为为了调整矩形的大小,我预计rect()的大小调整参数(第3和第4个)被修改,类似这样:

float r = 1;

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

void draw(){

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

    r += 1;

}

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

此致

哈维尔

1 个答案:

答案 0 :(得分: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;
}

我所做的主要改变是顺利开启。我认为,因为你没有使用它,顶部正方形绘图跳转到每个像素,但通过翻译/缩放操作,它将平滑那些。我做的另一件事是在完成缩放操作后转换回左上角。这样做很重要,因为事情会在您期望的地方绘制。您会注意到缩放矩形现在从中心向外扩展。