Равномерное масштабирование определенной точки

1

Мне нужно масштабировать объект в едином масштабе на определенной точке, используя (x, y) умножение, такое как объяснение здесь:

http://www.willamette.edu/~gorr/classes/GeneralGraphics/Transforms/transforms2d.htm#Combining

Проблема, с которой я сейчас сталкиваюсь, заключается в том, что всякий раз, когда я пытаюсь масштабировать объект с некоторым коэффициентом (равным для X и Y), объект получает определенное значение справа. Я хотел бы предотвратить это, и я понимаю, что решение этой проблемы заключалось бы в том, чтобы вычесть значение из (X, Y) до фактического масштабирования объекта, но я не могу найти правильное значение. В учебнике выше это объясняется так:

Мы видели, что основные масштабирующие и вращательные преобразования всегда относятся к началу координат. Чтобы масштабировать или вращать вокруг определенной точки (неподвижной точки), мы должны сначала перевести объект так, чтобы неподвижная точка находилась в начале координат. Затем мы выполняем масштабирование или поворот, а затем инвертируем исходный перевод, чтобы переместить неподвижную точку обратно в исходное положение. Например, если мы хотим масштабировать треугольник на 2 в каждом направлении вокруг точки fp = (1.5,1), мы сначала переведем все точки треугольника на T = (-1.5, -1), масштаб на 2 (S), а затем перевести обратно на -T = (1.5,1). Математически это выглядит

Что означает "происхождение"? Означает ли это (0,0), и если да, то умножение не умножилось бы на ноль и не получило бы никакого результата? Это не имеет никакого смысла, почему я подозреваю, что я должен принять этот номер что я вычитаю только из одного действия.

Заранее спасибо.

EDIT: Это ответ на вопрос, объясненный для любого человека, который мог бы, возможно, искать его в будущем, так как я не нашел удовлетворительного объяснения в Интернете (исключая возможные из них, которые я не нашел даже через то, что я искал достаточно )

Поэтому, если вы хотите масштабировать в точке (X, Y), скажите, что она (X = 10, Y = 15) с коэффициентом шкалы 10, вы должны выполнить следующие шаги: 1) Найти центр плоскости, где объекты в настоящее время расположены. В нашем случае это будет точка (10,15). 2) Для каждого объекта, который вы применяете масштабирование, чтобы вычесть значение X центральной точки из точки объекта X, а также для Y (я использую центральную точку, потому что я хочу, чтобы она была единой шкалой). 3) Умножьте результат операции на масштабный коэффициент (в нашем случае 10).

Теги:
scaling
graphics2d

2 ответа

0
Лучший ответ

Значение, которое вы хотите вычесть из всех координат перед масштабированием, является точкой вашего объекта, которую вы не хотите перемещать с помощью операции масштабирования. Как правило, это центральная точка, если это применимо. Вычитая центральную точку, она становится сопоставленной для координат начала координат и поэтому не зависит от масштабирования.

Все остальные точки вашего объекта все еще перемещаются, потому что они отображаются в точках, отличных от (0,0).

  • 0
    Хорошо, это объяснение было достаточно для меня, и я понял концепцию. Спасибо!
0

Да, начало координат - это (0,0) точка системы координат. Но почему это приведет к умножению на 0?

Сначала вы перемещаете (переводите) объект так, чтобы он находился в центре системы координат. Затем вы масштабируете его с коэффициентом, а затем перемещаете обратно туда, где он был первоначально.

Если вы хотите выполнить операцию, описанную в вашей цитате, то для каждой точки объекта вы сначала переводите ее на T (где T - это точка, вокруг которой вы хотите масштабировать), то вы умножаете каждый компонент результата на соответствующее масштабирование фактор S. Затем вы переместите новую точку обратно с помощью -T.

  • 0
    Спасибо за ответ, Дирк, ваш ответ был примерно таким же, как и тот, который я принял.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню