Как может преобразование многочлен к другой системе координат?

Вы не можете использовать 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 может вообще не отображать текст, он может (например) извлекать текст, и в этом случае ему не нужно интерпретировать шрифт при условии, что эта информация доступна.

6
задан basszero 3 October 2008 в 18:20
поделиться

5 ответов

Проблемный оператор немного неясен, поэтому сначала я разъясню свою собственную интерпретацию его:

У Вас есть полиномиальная функция

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 вручную и используете бином Ньютона.

4
ответ дан 16 December 2019 в 21:48
поделиться

Ответ Tyler является правильным ответом, если необходимо вычислить эту замену переменной z = ax+b много раз (я имею в виду для многих различных многочленов). С другой стороны, если необходимо сделать это только однажды, это намного быстрее для объединения вычисления коэффициентов матрицы с заключительной оценкой. Лучший способ сделать это состоит в том, чтобы символически оценить Ваш многочлен в точке (ax+b) методом Hörner:

  • Вы храните полиномиальные коэффициенты в векторе V (вначале, все коэффициенты являются нулем), и поскольку я = n к 0, Вы умножаете его на (ax+b) и добавляете Ci.
  • добавление Ci означает добавлять его к постоянному термину
  • умножение на (ax+b) означает умножать все коэффициенты на b в векторный K1, умножая все коэффициенты на a и смещая их далеко от постоянного термина в векторный K2, и откладывая K1+K2 в V.

Это будет легче к программе, и быстрее вычислить.

Обратите внимание, что, изменяясь y в w = cy+d действительно легок. Наконец, как mattiast указывает, общая смена системы координат не даст Вам многочлен.

Техническое примечание: если Вы все еще хотите вычислить матрицу T (как определено Tyler), необходимо вычислить ее при помощи взвешенной версии правила Паскаля (это - то, что вычисление Hörner делает implicitely):

ti, j = b ti, j-1 + ti-1, j-1

Таким образом, Вы вычисляете его просто, столбец после столбца, слева направо.

3
ответ дан 16 December 2019 в 21:48
поделиться

Если я понимаю Ваш вопрос правильно, нет никакой гарантии, что функция останется многочленом после изменения координат. Например, позвольте y=x^2 и новой системе координат x' =y, y' =x. Теперь уравнение становится y' = sqrt (x'), который не является многочленом.

2
ответ дан 16 December 2019 в 21:48
поделиться

У Вас есть уравнение:

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
0
ответ дан 16 December 2019 в 21:48
поделиться

Если входные пробелы линейно связаны, то да, матрица должна смочь преобразовать один набор коэффициентов другому. Например, если у Вас был свой многочлен в Вашем "исходном" 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'

который может быть переписан как матричная проблема и решен.

-1
ответ дан 16 December 2019 в 21:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: