- edited description
Разобраться с масштабированием и параллельным переносом
Вот этот кусок, правильный:
{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)
-
reporter -
reporter Не могу успокоиться.. что-то странное тут...
-
- changed version to Alpha_1.0
- Log in to comment