Я рисую простой прямоугольник, используя постскриптум со следующимкоманда Concat на языке приписки
1 -1 scale
0 -300 translate
newpath 88.9 117.25 moveto 131.6 117.25 lineto
88.9 259.75 lineto closepath fill 88.9 117.25 moveto 111.4 94.75
lineto154.1 94.75 lineto 131.6 117.25 lineto closepath fill 131.6
117.25 moveto 154.1 94.75 lineto 154.1 237.25 lineto 131.6 259.75
lineto closepath fill
%%EndDocument
Результатом является 3D-прямоугольником.
Но когда я добавляю следующий код, прямоугольник становится наклонным под некоторым углом.
[ 0.9999999 0 -1 1 261 0 ] concat
Я могу понять, что это поведение вызвано из-за значений, используемых в матрице, объединенной с CTM. Может ли кто-нибудь объяснить использование значений в приведенной выше матрице и как это влияет на поведение чертежа?
Редактировать:
Большое спасибо за информацию. На самом деле, я конвертирую растровое изображение в eps, используя пост-скрипт. Для этого я преобразовываю все операции, выполняемые на объекте Graphics, для рисования растрового изображения в их эквивалентную команду post script.
Я конвертирую g.Transform=matrix
в C# как [ matrix.Elements[0] ...... [matrix.Elements[5] ] concat
в почтовом скрипте. Из того, что я googled, оба выглядят похожими на меня по функциональности, но результат нарисованных eps отличается от растрового изображения. Итак, я хотел знать, как работает concat-преобразование матрицы postscript. Кто-нибудь может объяснить, что происходит с моим подходом к конвертации в eps?
Матрицы преобразования описаны в руководстве: http://partners.adobe.com/public/developer/en/ps/PLRM.pdf –
Работает по матричному умножению. Ваша матрица должна быть [1 0 0 1 261 0], если вектор ai + bj не ортогонален ci + di, тогда ваша модель перекошена, период. полная остановка. Просто i + j не ортогонален i. Возможно ли, что ваша матрица транспонирована, потому что математическая матрица работает в обоих направлениях, соответствующих правилу A * B = (BT * AT) T, где T - операция транспонирования. – joojaa
Я думаю, проблема в том, что g.Transform заменяет матрицу новой, но concat использует матрицу матричного умножения * CTM (Текущая матрица преобразования). Я думаю, что конкатенирование CTM * -матрицы в постскриптуме исправит это. Может ли кто-нибудь предложить, как я могу это достичь. – Kira