После прочтения Adobe PDF 1.7 (ISO 32000-1:2008) specification у меня все еще не получается понять, как правильно создать матрицу преобразования.PDF 1.7 - Как точно работает CTM (матрица трансформации тока)?
Спецификация в разделе 4.2/4.3 состояние следующее:
• Переводы определяются как [1 0 0 1 Тх ф], где ТХ и Ty являются расстояния, чтобы перевести происхождение от координаты системы в горизонтальных и вертикальных размеров, соответственно.
• Масштабирование получается [sx 0 0 sy 0 0]. Это масштабирует координаты , так что 1 единица в горизонтальном и вертикальном размерах новой системы координат имеет тот же размер, что и единицы sx и sy, соответственно в предыдущей системе координат.
• Вращения производятся с помощью [ cosθθθθθθθθθθθθθθθθθθθθθθθθθ, что приводит к вращению осей системы координат на угол θ против часовой стрелки.
• Skew is , указанный в [1 tan α tan β 1 0 0], что искажает ось x на угол и ось y на угол β.
Учитывая это, как точно можно использовать преобразования в последовательности друг с другом?
Я могу успешно использовать Translation
и Rotation
вместе, но когда я пытаюсь использовать Scaling
или Skewing
вещи идут серьезно неправильно. Возможно, я неправильно использую CTM или, может быть, даже моя математика отключена. Я пытаюсь создать текст в координатном положении (50, 50) с вращением 45 градусов и масштабированием 2 (в указанном порядке). Причина, по которой я указываю « В этом порядке», объясняется тем, что спецификация заявляет, что упорядочение преобразований имеет значение (спецификация дает графический пример различий, основанных на упорядочении преобразования). Итак, как бы выглядел бы объект потока и/или как применима матричная математика?
Рабочая (Трансформация (50, 50) + 45 градусов вращения)
[ 1 0 0 ] [ 0.707 0.707 0 ] [ 0.707 0.707 0 ]
[ 0 1 0 ] x [ -0.707 0.707 0 ] = [ -0.707 0.707 0 ]
[ 50 50 1 ] [ 0 0 1 ] [ 50.000 50.000 1 ]
BT
0.707 0.707 -0.707 0.707 50 50 Tm
/F1 36 Tf
(Hello, World!) Tj
ET
Когда я пытаюсь сделать матричное умножение добавить масштабирование, это не похоже на работу:
[ 0.707 0.707 0 ] [ 2 0 0 ] [ 1.414 1.414 0 ]
[ -0.707 0.707 0 ] x [ 0 2 0 ] = [ -1.414 1.414 0 ]
[ 50.000 50.000 1 ] [ 0 0 1 ] [ 100.000 100.000 1 ]
Математика кажется правильной, за исключением того, что текст начинается с координаты (100, 100) вместо (50, 50). Мне это кажется не правильным, так как я пытаюсь начать с (50, 50), повернуться на 45 градусов, затем масштабировать на 2.
BTW, вы выполнили первое умножение матрицы наоборот, поворот x-перевод дает ваш результат, а не перевод x вращения, как вы писали. – mkl
А вы правы, сэр. –