如何在处理小程序中调整绘图大小?

How do I resize a drawing in a processing applet?

我导入了处理语言Java,画了一个简单的房子

赞:

  rect (75, 175, 350, 175);

  // door

  rect (225, 275, 50, 75);

  // roof
  triangle (250, 100, 75, 175, 425, 175);

  // windows
  rect (125, 200, 50, 50);
  rect (325, 200, 50, 50);

我希望能够在更改 window 大小时调整图像大小或缩放图像。现在 window 大小只有 500 x 500,但是如果我展开 window 它不会用它展开绘图。

我尝试使用 scale(),但出于某种原因,它将图像缩放了大约一毫秒,然后恢复为未缩放的版本。我的 java 老师告诉我处理刷新的 draw 方法每秒大约 60 次,但我不明白为什么它与第一次不同。

如果您希望绘图与 window 成比例,您需要将所有坐标都基于 widthheight 变量。

例如,假设我在 200x200 window:

内画一个 200x200
size(200, 200);
ellipse(100, 100, 200, 200);

如果我随后将 window 的大小更改为 400x400,那么我必须更改传递给 ellipse() 函数的参数:

size(400, 400);
ellipse(200, 200, 400, 400);

这可能很烦人(如您所见),因此最好将您的参数基于 widthheight 变量。这样,每当您的 window 大小发生变化时,Processing 都会为您进行计算,并根据您的 window.

缩放绘图。
size(600, 600);
ellipse(width/2, height/2, width, height);

这只是一个示例,但您的过程是相同的:检查并更改每个值以基于 widthheight 变量而不是硬编码数字.

可以在此处找到更多信息:Using Variables - HappyCoding.io

(完全披露:我写了那个教程,但我认为它准确地解释了你的问题)

编辑: 您询问了 scale() 方法,所以我将在下面进行解释。但是,如果您试图根据 window 的大小来确定绘图的大小,那么您应该使用上述方法!但是因为这是家庭作业,所以你只能按照老师说的去做。无论如何...

我们来看一个简单的程序:

size(100, 100);
ellipse(50, 50, 10, 10);

此代码只是创建一个 100x100 大小的 window,然后在中心绘制一个小椭圆:

如果我们想让圆变大,可以使用scale()函数。您可以将 scale() 函数视为自动将您传递给绘图函数的每个参数(如 ellipse()rect())乘以您传递给 [=27= 的任何数字] 函数。

例如,此代码将每个数字乘以 2

size(100, 100);
scale(2);
ellipse(50, 50, 10, 10);

圆圈现在是原来的两倍大,但也不再位于中心。那是因为我们还用 50,50(window 的中心)乘以 2 得到 100,100(window 的右下角) .要解决这个问题,我们要么需要更改 50,50:

size(100, 100);
scale(2);
ellipse(25, 25, 10, 10);

或者我们可以使用 translate() 函数移动坐标 ,然后 我们进行缩放:

size(100, 100);
translate(50, 50);
scale(2);
ellipse(0, 0, 10, 10);

这两种方法都可以,所以这取决于哪种方法对您更有意义。现在我们有一个大的居中圆圈,尽管我们仍在将其大小调整为 10,10