Разобраться с масштабированием и параллельным переносом

Issue #149 new
Alex Lulin repo owner created an issue

Вот этот кусок, правильный:

{code} l_Matrix := TMatrix.Identity; // - СНИМАЕМ оригинальную матрицу, точнее берём ЕДИНИЧНУЮ матрицу // https://ru.wikipedia.org/wiki/%D0%95%D0%B4%D0%B8%D0%BD%D0%B8%D1%87%D0%BD%D0%B0%D1%8F_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D0%B0 l_Matrix := l_Matrix * TMatrix.CreateTranslation(-l_CenterPoint.X,-l_CenterPoint.Y);

// - задаём точку, вокруг которой вертим
l_Matrix := l_Matrix * TMatrix.CreateRotation(l_Angle);

// - задаём угол поворота
l_Matrix := l_Matrix * TMatrix.CreateTranslation(l_CenterPoint.X,l_CenterPoint.Y);

// - задаём начало координат
l_Matrix := l_Matrix * l_OriginalMatrix;

// - ПРИМЕНЯЕМ оригинальную матрицу
// Иначе например ОРИГИНАЛЬНЫЙ параллельный перенос - не будет работать.
// https://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BF%D0%B5%D1%80%D0%B5%D0%BD%D0%BE%D1%81

{code}

А вот этот:

{code} l_Matrix := TMatrix.Identity; l_Matrix := l_Matrix * TMatrix.CreateTranslation(-l_C.X, -l_C.Y); l_Matrix := l_Matrix * TMatrix.CreateScaling(f_Scale, f_Scale); l_Matrix := l_Matrix * TMatrix.CreateTranslation(l_C.X, l_C.Y); // l_Matrix := l_Matrix * TMatrix.CreateTranslation(-l_C.X * f_Scale, -l_C.Y * f_Scale); l_Matrix := l_Matrix * l_OriginalMatrix;

  • сдаётся мне из серии - "угадал".

Ибо.

Я не очень понимаю - ЗАЧЕМ ТАМ смещать начало координат.

А если мы будем рисовать фигуру не в точке l_C а "рядом". Всё съедет?

И ОТДЕЛЬНО надо проверить как с масштабированием ведут себя ProxyShape и ShapesGroup.

Comments (3)

  1. Log in to comment