处理中的scale()和shape()

时间:2011-02-07 01:31:58

标签: java processing scale

更新:我想我明白了。 scaleMultiplier也适用于我试图做的翻译。我怀疑是这种情况,但无法确切地知道它是如何受到影响的。

任何熟悉Java分拆的人都称为Processing?我正在尝试做一些简单的事情,缩放形状并将其放置在草图的中心。简而言之,这是我的代码:

pushMatrix();

float scaleX, scaleY, scaleMultiplier, resetX, resetY, transX, transY;

scaleX = 500 / (float)clickState.bounds.getWidth();
scaleY = 500 / (float)clickState.bounds.getHeight();
scaleMultiplier = min(scaleX,scaleY);
resetX = -(float)clickState.bounds.getX();
resetY = -(float)clickState.bounds.getY();

transX = resetX + ((800 - ((float)clickState.bounds.getWidth() * scaleMultiplier))/2);
transY = resetY + ((550 - ((float)clickState.bounds.getHeight() * scaleMultiplier))/2);

scale(scaleMultiplier);
shape(clickState.pshape, transX, transY);

popMatrix();

我要做的是在美国地图上缩放一个州。 clickState是用户单击的状态。 clickState.bounds是一个围绕状态形状的Rectangle。 getX()和getY()返回所述框左上角的x和y坐标。我想缩放状态,使其不超过500x500像素。之后,我想翻译它,使它位于草图的中间,即800x550。

这是我遇到麻烦的地方:当我做的时候

shape(clickState.pshape, resetX, resetY);

它绘制草图左上角的状态。这正是应该做的。然后从那里我想添加将形状居中所需的像素数,这是transX和transY的用途。但是,当我使用transX和transY时,几乎完全从画布上绘制出形状,具体取决于状态所在的位置(即使它仅从0,0向右移动50个像素)。这对我来说没有任何意义。我已经尝试了各种translate()组合,甚至完全跳过scale()并在shape()中使用宽度和高度。这就像加工试图故意挫败我。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

我不熟悉Processing,但矩阵操作可交换 - 顺序很重要。通常,操作以明显的最后指定的首次应用顺序应用,如此example所示。

答案 1 :(得分:0)

文斯,我想我上周试图做一些非常相似的事情。听起来好像你想出来了,但看看这个板上的答案:

http://forum.processing.org/topic/how-do-i-move-svg-child-shapes#25080000000689051