scale () и shape () в обработке - PullRequest
       3

scale () и shape () в обработке

1 голос
/ 07 февраля 2011

ОБНОВЛЕНИЕ: Кажется, я понял это.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 - это прямоугольник, который окружает форму состояния.getX () и getY () возвращают координаты x и y верхнего левого угла указанного поля.Я хочу масштабировать состояние так, чтобы оно не превышало 500x500 пикселей.После этого я хочу перевести его так, чтобы он находился в середине эскиза, а это 800x550.

Вот где я сталкиваюсь с неприятностями: когда я делаю

shape(clickState.pshape, resetX, resetY);

Он рисует состояние в верхнем левом углу эскиза.Это именно то, что он должен делать.Затем я хочу добавить количество пикселей, которое потребуется для центрирования фигуры, для чего нужны transX и transY.Однако, когда я использую transX и transY, форма почти полностью отрисовывается за холстом, в зависимости от того, где находится состояние (даже если его перемещают только на 50 пикселей вправо от 0,0).Это не имеет никакого смысла для меня вообще.Я пробовал всевозможные комбинации translate () и даже пропускал scale () в целом, используя ширину и высоту в форме ().Как будто процессинг пытается меня расстроить нарочно.Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 24 февраля 2011

Винс, я думаю, что пытался сделать что-то очень похожее на прошлой неделе. Похоже, вы поняли это, но посмотрите ответы на этой доске:

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

0 голосов
/ 07 февраля 2011

Я не знаком с Processing, но матричные операции не коммутативны - порядок имеет значение. Как правило, операции применяются в явном порядке последний-указан-первый-применен , как показано в этом примере .

...