Precisão interna do Illustrator?

7

Qual é a precisão interna usada pelo Adobe Illustrator? Ou, de outra forma, que representação interna o Illustrator usa para armazenar dados de coordenadas?

Tente isso (estou usando o CS6):

  • Aumente o zoom o mais perto possível do Illustrator (6400% no CS6).
  • Desenhar um círculo.
  • Redimensione o círculo para 0,001 × 0,001 pt.
  • Redimensione o círculo para 10 × 10 pt.

Aqui está o que recebo quando faço isso:

Círculo se torna quadrado

Este é obviamente um exemplo extremo, mas experimentei distorções semelhantes em cenários mais realistas quando os objetos passaram por uma edição extensa. Para evitar isso, tive que recorrer, em alguns casos, a trabalhar em uma escala ampliada e redimensionar apenas meu trabalho artístico para o tamanho final no final.

Claramente, a precisão interna do Illustrator não é infinita. Parece que as coordenadas são finalmente arredondadas para um número inteiro em pequena escala (presumo que haja uma fração de ponto), de modo que os erros de arredondamento possam se acumular, culminando em distorção visível.

Alguém pode lançar alguma luz sobre isso?

SWB
fonte
@joojaa Qual versão do Illustrator você está usando? Talvez eles tenham melhorado esse pós-CS6?
SWB
@joojaa Você não vê isso no CS5? Isso é interessante. É definitivamente reproduzível de forma consistente na minha cópia do Illustrator CS6 (16.0.0 x64). Certamente não é uma regressão no CS6 ...
SWB
A propósito, poderíamos medir a precisão usando scripts. Mas tenho medo de que a maneira como os comentários da turnê tenham escopo essa questão o torne offtopic neste site.
Joojaa
Ok i após o acompanhamento de um CS6 eu finalmente pode pode replicar esse problema em CS6
joojaa
Eu tentei isso com o CS5 e acabei com uma forma ainda mais estranha!
Ryan

Respostas:

1

Nenhum aplicativo de computador tem precisão infinita. Mesmo aplicativos CAD não possuem uma escala de precisão muito maior. No entanto, eles permitem que você altere a unidade de trabalho, o que altera a localização do ponto zero, enquanto o illustrator calcula sempre tudo em pontos. Você provavelmente deve ler o que todo cientista da computação precisa saber sobre números de ponto flutuante , que agora se aplicam a todos os usuários de computador.

Não há nada errado em desenhar em escala, é essencialmente isso que os aplicativos de CAD têm, apenas, a possibilidade de informar esse fato ao usuário. Veja o aplicativo internamente, apenas armazena números de interpretação desses números até o front-end.

Enfim, não consigo replicar o seu problema:

insira a descrição da imagem aqui

Imagem 1 : um círculo de 0,001 pt escalado progressivamente por x10 (formulário de imagem CC2017, mas os resultados no cs 5 são comparáveis)

No entanto, posso replicar o problema no CS6

Depois de rastrear uma versão cs6, posso verificar se isso realmente acontece.

Posso até dar uma ida e volta a um valor de flutuação dupla completa, por exemplo:

in  0100000001110111011010111110101110000101000111101011100001010010 
out 0100000001110111011010111110110000000000000000000000000000000000

Portanto, parece que o valor interno do sistema certamente não é um flutuador duplo. Flutuador único, talvez? Faria sentido para uma versão inicial de um código de aceleração de hardware!

Eu tenho que testar se esse é o caso no CC2017 difícil.

joojaa
fonte
Eu entendi aquilo. (Na verdade, sou desenvolvedor e engenheiro.) Obviamente, a precisão interna do Illustrator (ou qualquer outro software) não é "infinita". Estou tentando determinar qual é o limite real no Illustrator. O Illustrator nem parece estar usando ponto flutuante, pois mesmo o ponto flutuante de precisão única poderia facilmente preservar o círculo no meu exemplo. Em vez disso, parece estar truncando para um número inteiro em algum nível.
SWB
@SWB Provavelmente está usando uma aritmética de ponto fixo, já que é essencialmente um mecanismo postscript. Eu especulei sobre isso antes, acho que eles estão passando para ponto flutuante, podem estar em algum estado misto. O verdadeiro problema é como a Adobe escolhe operar as matrizes de transformação, o que não faz nenhum sentido. Em essência, se você interagir com 2 objetos com transformações diferentes, todas as matrizes serão redefinidas para identidade. Isso explodiria até expectativas rudimentares de precisão.
Joojaa
RE: aritmética de ponto fixo. Esse é o meu palpite também. Espero que alguém que realmente saiba entre em contato e informe-nos com certeza. Eu tentei pesquisar no Google e apareceu vazio.
SWB
Como você fez seu teste? Isso de fato parece uma conversão para single e volta para double. (Recebo quase o mesmo resultado na mesma conversão em C #, diferindo apenas porque o C # trunca os 32 bits mais baixos, enquanto o seu exemplo é arredondado.) Ainda assim, isso não explica realmente o que o Illustrator está fazendo, pois mesmo um ida e volta dos pontos de controle de um círculo 10-> 0.001-> 10 sem uma degradação perceptível. Curioso que você só está vendo isso no CS6. Eu assumi que era algo mais fundamental para o Illustrator em geral, mas talvez seja um bug.
SWB
11
Encontrei este post feito pela desenvolvedora do Illustrator Teri Pettit em 2003 (período da versão 10/11): groups.google.com/d/msg/adobe.illustrator.macintosh/KSqIpfpQHdU/… . Ela afirma que o Illustrator arredonda valores para 0,0001 pt ao salvar, mas usa flutuadores de precisão única enquanto o arquivo está aberto. Isso ocorre após a alteração do formato nativo baseado em EPS para o formato nativo baseado em PDF, que ocorreu com a versão 9, portanto, ainda pode ser verdade hoje. No entanto, ele ainda não explica o comportamento observado no CS6, a menos que seja apenas um bug.
SWB