Вы не можете использовать Unicode со шрифтом , вообще (за исключением ограниченного случая латинского или почти латинского языков), потому что шрифты используют кодировку, а кодировка - это однобайтовый массив. Таким образом, вы не можете ссылаться более чем на 256 символов из шрифта, а код символа не может быть больше, чем один байт.
Первая проблема с «использованием Unicode» заключается в том, что Unicode - это не простое 2-байтовое кодирование, это многобайтовый формат с переменной длиной, а иногда один глиф представлен несколькими кодовыми точками Unicode.
Итак, чтобы справиться с этим, вам нужно использовать CIDFont, а не Font. Вы не можете «использовать карту charcode-to-glyf», под которой я предполагаю, что вы имеете в виду подтаблицу CMAP шрифтом TTF. Вы должны составить CIDFont с CMap, чтобы отобразить несколько байтов в текстовой строке в коды символов для поиска в CMap, что дает вам CID для ссылки на точную символьную программу в шрифте.
Возможно, будет возможно создать один CMap, который будет охватывать каждую кодовую точку Unicode, но у меня есть сомнения, это, безусловно, будет огромной задачей. Однако определенные CMaps уже существуют. Adobe публикует стандартный список на своем веб-сайте, который включает CMaps, такие как UniCNS-UCS2-H и UniCNS-UCS2-V или UniGB-UTF8-H и т. Д.
Вероятно, вы можете использовать один из стандартных CMaps.
Обратите внимание, что не имеет значения, что FirstChar, LastChar и т. Д. Уже хранятся в шрифте TrueType, вам все равно необходимо указать их в объекте шрифта PDF. Это потому, что потребитель PDF может вообще не отображать текст, он может (например) извлекать текст, и в этом случае ему не нужно интерпретировать шрифт при условии, что эта информация доступна.
Проблемный оператор немного неясен, поэтому сначала я разъясню свою собственную интерпретацию его:
У Вас есть полиномиальная функция
f (x) = Cnxn + Cn-1xn-1 +... + C0
[Я изменил A, B... Z в Cn, Cn-1..., C0, чтобы более легко работать с линейной алгеброй ниже.]
Затем у Вас также есть преобразование, такое как: z = топор + b , что Вы хотите использовать для нахождения коэффициентов для того же многочлена, но с точки зрения z:
f (z) = Dnzn + Dn-1zn-1 +... + D0
Это может быть сделано довольно легко с некоторой линейной алгеброй. В частности, можно определить (n+1) × (n+1) матрица T, который позволяет нам делать умножение матриц
d = T * c,
где d является вектором - столбцом с главной записью D0, чтобы продлиться записи Dn, вектор - столбец c подобен для коэффициентов Ci, и матрица T имеет (я, j)-th [ith строка, jth столбец] запись tij данный
tij = (j выбирают i), ай bj-i.
Где (j выбирают i) биномиальный коэффициент, и = 0 когда i> j. Кроме того, в отличие от стандартных матриц, я думаю, что я, j каждый диапазон от 0 до n (обычно Вы запускаете в 1).
Это - в основном хороший способ выписать расширение и повторное сжатие многочлена, когда Вы включаете z=ax+b вручную и используете бином Ньютона.
Ответ Tyler является правильным ответом, если необходимо вычислить эту замену переменной z = ax+b много раз (я имею в виду для многих различных многочленов). С другой стороны, если необходимо сделать это только однажды, это намного быстрее для объединения вычисления коэффициентов матрицы с заключительной оценкой. Лучший способ сделать это состоит в том, чтобы символически оценить Ваш многочлен в точке (ax+b) методом Hörner:
Это будет легче к программе, и быстрее вычислить.
Обратите внимание, что, изменяясь y в w = cy+d действительно легок. Наконец, как mattiast указывает, общая смена системы координат не даст Вам многочлен.
Техническое примечание: если Вы все еще хотите вычислить матрицу T (как определено Tyler), необходимо вычислить ее при помощи взвешенной версии правила Паскаля (это - то, что вычисление Hörner делает implicitely):
ti, j = b ti, j-1 + ti-1, j-1
Таким образом, Вы вычисляете его просто, столбец после столбца, слева направо.
Если я понимаю Ваш вопрос правильно, нет никакой гарантии, что функция останется многочленом после изменения координат. Например, позвольте y=x^2 и новой системе координат x' =y, y' =x. Теперь уравнение становится y' = sqrt (x'), который не является многочленом.
У Вас есть уравнение:
y = Ax^(n-1) + Bx^(n-2) + ... + Z
В пространстве xy, и Вы хотите это в некотором x'y' пространство. То, в чем Вы нуждаетесь, является функциями преобразования f (x) = x' и g (y) = y' (или h (x') = x и j (y') = y). В первом случае необходимо решить для x и решить для y. После того как у Вас есть X и Y, Вы можете, заменил теми результатами в Ваше исходное уравнение, и решите для y'.
Тривиально ли это, зависит от сложности функций, используемых для преобразования от одного пространства до другого. Например, уравнения, такие как:
5x = x' and 10y = y'
чрезвычайно легки решить для результата
y' = 2Ax'^(n-1) + 2Bx'^(n-2) + ... + 10Z
Если входные пробелы линейно связаны, то да, матрица должна смочь преобразовать один набор коэффициентов другому. Например, если у Вас был свой многочлен в Вашем "исходном" x-пространстве:
ax^3 + bx^2 + cx + d
и Вы хотели преобразовать в другое w-пространство где w = px+q
затем Вы хотите найти', b', c' и d' таким образом что
ax^3 + bx^2 + cx + d = a'w^3 + b'w^2 + c'w + d'
и с некоторой алгеброй,
a'w^3 + b'w^2 + c'w + d' = a'p^3x^3 + 3a'p^2qx^2 + 3a'pq^2x + a'q^3 + b'p^2x^2 + 2b'pqx + b'q^2 + c'px + c'q + d'
поэтому
a = a'p^3
b = 3a'p^2q + b'p^2
c = 3a'pq^2 + 2b'pq + c'p
d = a'q^3 + b'q^2 + c'q + d'
который может быть переписан как матричная проблема и решен.