¿Precisión interna de Illustrator?

¿Cuál es la precisión interna utilizada por Adobe Illustrator? O dicho de otra manera, ¿qué representación interna usa Illustrator para almacenar datos de coordenadas?

Prueba esto (estoy usando CS6):

  • Acérquese tanto como lo permita Illustrator (6400 % en CS6).
  • Dibuja un circulo.
  • Cambie el tamaño del círculo a 0,001 × 0,001 pt.
  • Cambie el tamaño del círculo a 10 × 10 pt.

Esto es lo que obtengo cuando hago eso:

El círculo se convierte en cuadrado

Obviamente, este es un ejemplo extremo, pero he experimentado distorsiones similares en escenarios más realistas cuando los objetos han pasado por una edición extensa. Para evitar esto, he tenido que recurrir en algunos casos a trabajar a una escala ampliada y solo cambiar el tamaño de mi obra de arte al tamaño final al final.

Claramente, la precisión interna de Illustrator no es infinita. Parece que las coordenadas finalmente se redondean a un número entero en una pequeña escala (supongo que una fracción de un punto), de modo que los errores de redondeo se pueden acumular y finalmente culminan en una distorsión visible.

¿Alguien puede arrojar algo de luz sobre esto?

@joojaa ¿Qué versión de Illustrator estás usando? ¿Quizás mejoraron este post-CS6?
@joojaa ¿No ves esto en CS5? Eso es interesante. Definitivamente es consistentemente reproducible en mi copia de Illustrator CS6 (16.0.0 x64). Seguramente no es una regresión en CS6...
Por cierto, pudimos medir la precisión mediante secuencias de comandos. Pero me temo que la forma en que los comentarios de la gira han abordado esta pregunta la hace fuera de tema en este sitio.
Ok, después de rastrear un CS6, finalmente puedo replicar este problema en CS6
¡Probé esto con CS5 y terminé con una forma aún más extraña!
@Arcode Sí, después de publicar mi imagen de ejemplo, experimenté un poco más y pude obtener una amplia variedad de formas locas. No pude precisarlo, pero el nivel de zoom y/o la posición en la página y/o el tamaño de la forma inicial parecen afectar los resultados, al menos a veces. Me alegra ver alguna confirmación de que esto también ocurre en CS5.

Respuestas (1)

Ninguna aplicación informática tiene una precisión infinita. Incluso las aplicaciones CAD no tienen una escala de precisión mucho mayor. Sin embargo, le permiten cambiar la unidad de trabajo, lo que cambia su ubicación de punto cero, mientras que Illustrator siempre calcula todo en puntos. Probablemente debería querer leer lo que todo informático necesita saber sobre los números de coma flotante , que ahora se aplica a todos los usuarios de computadoras.

No hay nada de malo en dibujar a escala, eso es esencialmente lo que hacen las aplicaciones CAD: solo tienen la facilidad de decirle al usuario este hecho. Ver la aplicación internamente solo almacena números, la interpretación de esos números depende de la interfaz.

De todos modos no puedo replicar tu problema:

ingrese la descripción de la imagen aquí

Imagen 1 : un círculo de 0,001 pt escalado progresivamente por x10 (forma de imagen CC2017 pero los resultados en cs 5 son comparables)

Sin embargo, puedo replicar el problema en CS6

Después de haber rastreado una versión cs6, puedo verificar que esto realmente sucede.

Incluso puedo hacer un viaje de ida y vuelta con un valor flotante doble completo, por ejemplo:

in  0100000001110111011010111110101110000101000111101011100001010010 
out 0100000001110111011010111110110000000000000000000000000000000000

Entonces parece que el valor interno del sistema ciertamente no es un doble flotador. ¿Solo flotador quizás? ¡Tendría sentido para una versión anterior de un código de aceleración de hardware!

Tengo que probar si ese es el caso en CC2017 duro.

Entiendo que. (En realidad, soy desarrollador e ingeniero). Obviamente, la precisión interna de Illustrator (o cualquier software) no es "infinita". Estoy tratando de determinar cuál es el límite real en Illustrator. Illustrator ni siquiera parece estar usando punto flotante, ya que incluso el punto flotante de precisión simple podría preservar fácilmente el círculo en mi ejemplo. Más bien, parece estar truncándose a un número entero en algún nivel.
@SWB Probablemente esté usando una aritmética de punto fijo, ya que es esencialmente un motor de postscript. He especulado sobre esto antes, creo que están haciendo la transición al punto flotante, pueden estar en algún estado mixto. El verdadero problema es cómo Adobe elige operar las matrices de transformación, lo que no tiene ningún sentido. En esencia, si alguna vez interactúa con 2 objetos con diferentes transformaciones, todas las matrices se restablecen a la identidad. Esto haría estallar incluso las expectativas rudimentarias de precisión.
RE: aritmética de punto fijo. Esa es mi conjetura también. Espero que alguien que realmente sepa intervenga y nos lo diga con seguridad. Intenté buscar en Google y aparecí vacío.
¿Cómo hiciste tu prueba? De hecho, parece una conversión a sencillo y de nuevo a doble. (Obtengo casi el mismo resultado al pasar por la misma conversión en C#, con la única diferencia de que C# trunca los 32 bits inferiores, mientras que su ejemplo se redondea). Aún así, eso no explica realmente lo que está haciendo Illustrator, ya que incluso uno ida y vuelta los puntos de control de un círculo 10->0.001->10 sin una degradación perceptible. Curioso que solo estés viendo esto en CS6. Asumí que era algo más fundamental para Illustrator en general, pero tal vez sea un error.
Encontré esta publicación hecha por el desarrollador de Illustrator Teri Pettit en 2003 (marco de tiempo de la versión 10/11): groups.google.com/d/msg/adobe.illustrator.macintosh/KSqIpfpQHdU/… . Ella afirma que Illustrator redondea los valores a 0.0001 pt al guardar, pero usa flotadores de precisión simple mientras el archivo está abierto. Esto es después del cambio del formato nativo basado en EPS al formato nativo basado en PDF, que sucedió con la versión 9, por lo que es posible que siga siendo cierto hoy. Sin embargo, todavía no explica el comportamiento observado en CS6, a menos que sea solo un error.
@SWB, las herramientas en sí mismas no tienen que reflejar la sutura interna. Entonces, la herramienta de escala y el diálogo de escala pueden, de hecho, hacer cosas diferentes. Es cierto que a menudo obtengo una mejor resolución haciendo cosas con un script que haciendo cosas con una herramienta.