2011-02-07 3 views
1

UPDATE: Я думаю, что понял. Масштабный умножитель также применил к переводу, который я пытался сделать. У меня было подозрение, что это так, но не мог точно понять, как это повлияло.шкала() и форма() в обработке

Любое знакомое с spinoff Java под названием Обработка? Я пытаюсь сделать что-то простое, масштабировать форму и поместить ее в центр эскиза. Это мой код в двух словах:

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() и даже пропускать масштаб() в целом и используя ширину и высоту в форме(). Это похоже на то, что Processing пытается сбить меня с толку. Любая помощь приветствуется.

+0

Я имею IDE обработки, и если вы могли бы разместить весь свой код, было бы легче для меня, чтобы попытаться исправить и запустить , – WuHoUnited

+0

Мне нужно было бы отправить вам весь zip-файл, так как я использую библиотеку плюс SVG на карте, а также данные, которые я пытаюсь отобразить на карте. – vince88

ответ

0

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

Смежные вопросы