如何在处理小程序中调整绘图大小?
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 成比例,您需要将所有坐标都基于 width
和 height
变量。
例如,假设我在 200x200
window:
内画一个 200x200
圆
size(200, 200);
ellipse(100, 100, 200, 200);
如果我随后将 window 的大小更改为 400x400
,那么我必须更改传递给 ellipse()
函数的参数:
size(400, 400);
ellipse(200, 200, 400, 400);
这可能很烦人(如您所见),因此最好将您的参数基于 width
和 height
变量。这样,每当您的 window 大小发生变化时,Processing 都会为您进行计算,并根据您的 window.
缩放绘图。
size(600, 600);
ellipse(width/2, height/2, width, height);
这只是一个示例,但您的过程是相同的:检查并更改每个值以基于 width
和 height
变量而不是硬编码数字.
可以在此处找到更多信息: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
。
我导入了处理语言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 成比例,您需要将所有坐标都基于 width
和 height
变量。
例如,假设我在 200x200
window:
200x200
圆
size(200, 200);
ellipse(100, 100, 200, 200);
如果我随后将 window 的大小更改为 400x400
,那么我必须更改传递给 ellipse()
函数的参数:
size(400, 400);
ellipse(200, 200, 400, 400);
这可能很烦人(如您所见),因此最好将您的参数基于 width
和 height
变量。这样,每当您的 window 大小发生变化时,Processing 都会为您进行计算,并根据您的 window.
size(600, 600);
ellipse(width/2, height/2, width, height);
这只是一个示例,但您的过程是相同的:检查并更改每个值以基于 width
和 height
变量而不是硬编码数字.
可以在此处找到更多信息: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
。