Масштабирование векторов от центральной точки?

Я пытаюсь выяснить, есть ли у меня точки, которые делают, например, квадрат:

 *     *



 *     *

и скажем, я знаю центр этого квадрата. Я хочу формулу, которая сделает его для eample дважды его размером, но от центра

 *               *

      *     *



      *     *

 *               *

Поэтому новая форма является вдвое более большой и от центра полигона. Это должно работать на любую форму не просто квадраты.

Я больше ищу теорию позади него больше, чем реализация.

5
задан fbrereto 6 May 2010 в 18:50
поделиться

4 ответа

Если вы знаете центральную точку cp и точку v в многоугольнике, которую вы хотите масштабировать в масштабе , то:

v2 = v - cp; // get a vector to v relative to the centerpoint
v2_scaled = v2 * scale; // scale the cp-relative-vector
v1_scaled = v2_scaled + cp; // translate the scaled vector back

Это перевод -scale-translate шаблон может быть выполнен с векторами любой размерности.

8
ответ дан 14 December 2019 в 01:03
поделиться

Чтобы сделать то, что вы хотите, нужно выполнить три операции: перевести квадрат так, чтобы его центроид совпал с началом системы координат, масштабировать полученный квадрат, перевести его обратно.

0
ответ дан 14 December 2019 в 01:03
поделиться

Я не уверен, что есть чистый способ сделать это для всех типов объектов. Для относительно простых вы должны уметь найти «центр» как среднее значение всех значений X и Y отдельных точек. Чтобы удвоить размер, вы найдете длину и угол вектора от центра к точке. Удвойте длину вектора и сохраните тот же угол, чтобы получить новую точку.

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

0
ответ дан 14 December 2019 в 01:03
поделиться

Если вы хотите, чтобы фигура была вдвое больше, увеличьте расстояние до координат в sqrt (2) раз дальше от центра.

Другими словами, допустим, ваша точка находится в (x, y) , а центр - в (xcent, ycent) . Ваша новая точка должна быть в

(xcent + sqrt(2)*(x - xcent),  ycent + sqrt(2)*(y - ycent))

. Это масштабирует расстояния от новой «исходной точки», (xcent, ycent) таким образом, чтобы площадь удвоилась. (Потому что sqrt (2) * sqrt (2) == 2) .

1
ответ дан 14 December 2019 в 01:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: