Illustrator interne Präzision?

7

Welche interne Präzision verwendet Adobe Illustrator? Oder anders ausgedrückt: Welche interne Darstellung verwendet Illustrator zum Speichern von Koordinatendaten?

Versuchen Sie dies (ich verwende CS6):

  • Zoomen Sie so nah wie es Illustrator zulässt (6400% in CS6).
  • Zeichne einen Kreis.
  • Ändern Sie die Größe des Kreises auf 0,001 × 0,001 pt.
  • Ändern Sie die Größe des Kreises auf 10 × 10 pt.

Folgendes bekomme ich, wenn ich das mache:

Kreis wird quadratisch

Dies ist offensichtlich ein extremes Beispiel, aber ich habe ähnliche Verzerrungen in realistischeren Szenarien erlebt, wenn Objekte einer umfangreichen Bearbeitung unterzogen wurden. Um dies zu vermeiden, musste ich in einigen Fällen auf die Arbeit in vergrößertem Maßstab zurückgreifen und meine Grafik erst am Ende auf die endgültige Größe anpassen.

Die interne Präzision von Illustrator ist eindeutig nicht unendlich. Es scheint, dass Koordinaten letztendlich in einem kleinen Maßstab auf eine ganze Zahl gerundet werden (ich nehme einen Bruchteil eines Punktes an), so dass sich Rundungsfehler ansammeln können, die schließlich zu sichtbaren Verzerrungen führen.

Kann jemand etwas Licht ins Dunkel bringen?

SWB
quelle
@joojaa Welche Version von Illustrator verwenden Sie? Vielleicht haben sie diese Post-CS6 verbessert?
SWB
@joojaa Sie sehen das nicht in CS5? Das ist interessant Es ist definitiv konsistent reproduzierbar in meiner Kopie von Illustrator CS6 (16.0.0 x64). Sicherlich ist es keine Regression in CS6 ...
SWB
Übrigens konnten wir die Genauigkeit durch Skripten messen. Aber ich befürchte, dass die Art und Weise, wie Tourkommentare diese Frage formuliert haben, sie auf dieser Seite offtopisch macht.
Jojaja
Ok, nachdem ich einen CS6 verfolgt habe, kann ich dieses Problem endlich auf CS6 replizieren
joojaa
Ich habe es mit CS5 versucht und bin zu einer noch seltsameren Form gekommen!
Ryan

Antworten:

1

Keine Computeranwendung hat unendliche Präzision. Selbst CAD-Anwendungen haben keine viel größere Genauigkeitsskala. Sie ermöglichen es Ihnen jedoch, die Arbeitseinheit zu ändern, wodurch sich Ihre Nullpunktposition ändert, während der Illustrator immer alles in Punkten berechnet. Sie sollten wahrscheinlich lesen wollen, was jeder Informatiker über Gleitkommazahlen wissen muss , was mittlerweile für alle Computerbenutzer gilt.

Es ist nichts Falsches daran, im Maßstab zu zeichnen, das ist im Wesentlichen das, was die CAD-Anwendungen tun. Sie haben nur die Möglichkeit, dem Benutzer diese Tatsache mitzuteilen. Siehe die Anwendung intern nur speichert Zahlen Interpretation dieser Zahlen ist bis zum Frontend.

Jedenfalls kann ich Ihr Problem nicht wiederholen:

Geben Sie hier die Bildbeschreibung ein

Bild 1 : Ein 0,001-Punkt-Kreis, der progressiv um x10 skaliert wird (Bildform CC2017, aber Ergebnisse in cs 5 sind vergleichbar)

Ich kann das Problem jedoch auf CS6 replizieren

Nachdem ich eine CS6-Version gefunden habe, kann ich überprüfen, ob dies tatsächlich passiert.

Ich kann sogar einen vollen Double-Float-Wert umrunden, zum Beispiel:

in  0100000001110111011010111110101110000101000111101011100001010010 
out 0100000001110111011010111110110000000000000000000000000000000000

Es scheint also, dass der interne Wert des Systems sicherlich kein Double Float ist. Single Float vielleicht? Es wäre sinnvoll für eine frühe Version eines Hardwarebeschleunigungscodes!

Ich muss testen, ob das in CC2017 hart der Fall ist.

joojaa
quelle
Ich verstehe das. (Ich bin eigentlich Entwickler und Ingenieur.) Offensichtlich ist die interne Präzision von Illustrator (oder einer anderen Software) nicht "unendlich". Ich versuche festzustellen, wie hoch das tatsächliche Limit in Illustrator ist. Illustrator scheint nicht einmal Gleitkomma zu verwenden, da selbst Gleitkommazahlen mit einfacher Genauigkeit den Kreis in meinem Beispiel leicht beibehalten könnten. Vielmehr scheint es auf einer bestimmten Ebene auf eine Ganzzahl abgeschnitten zu sein.
SWB
@ SWB Es wird wahrscheinlich eine Festkomma-Arithmetik verwendet, da es sich im Wesentlichen um eine Postscript-Engine handelt. Ich habe schon früher darüber spekuliert, ich denke, sie wechseln zum Gleitkomma, sie befinden sich möglicherweise in einem gemischten Zustand. Das eigentliche Problem ist, wie Adobe die Transformationsmatrizen bedient, was überhaupt keinen Sinn ergibt. Wenn Sie jemals mit 2 Objekten mit unterschiedlichen Transformationen interagieren, werden im Wesentlichen alle Matrizen auf Identität zurückgesetzt. Dies würde sogar rudimentäre Präzisionserwartungen in die Luft jagen.
Jojaja
RE: Festkomma-Arithmetik. Das ist auch meine Vermutung. Ich hoffe, jemand, der es tatsächlich weiß, wird sich einschalten und uns sicher Bescheid geben. Ich habe Googeln versucht und bin leer aufgetaucht.
SWB
Wie hast du deinen Test gemacht? Das sieht in der Tat nach einer Umstellung auf Single und zurück auf Double aus. (Ich erhalte fast das gleiche Ergebnis, wenn dieselbe Konvertierung in C # durchgeführt wird, wobei sich C # nur dadurch unterscheidet, dass C # die unteren 32 Bits abschneidet, während Ihr Beispiel rundet.) Dies erklärt jedoch nicht wirklich, was Illustrator tut, da selbst eine einzige dies tun würde Umrunden der Kontrollpunkte eines Kreises 10-> 0,001-> 10 ohne wahrnehmbare Verschlechterung. Neugierig, dass Sie dies nur in CS6 sehen. Ich nahm an, dass es für Illustrator im Allgemeinen etwas grundlegenderes war, aber vielleicht ist es ein Fehler.
SWB
1
Ich habe diesen Beitrag des Illustrator-Entwicklers Teri Pettit aus dem Jahr 2003 (Zeitrahmen Version 10/11) gefunden: groups.google.com/d/msg/adobe.illustrator.macintosh/KSqIpfpQHdU/… . Sie gibt an, dass Illustrator beim Speichern Werte auf 0,0001 pt rundet, aber Floats mit einfacher Genauigkeit verwendet, während die Datei geöffnet ist. Dies ist nach dem Wechsel vom nativen EPS-basierten Format zum nativen PDF-basierten Format, der mit Version 9 geschehen ist, so dass dies möglicherweise auch heute noch der Fall ist. Das beobachtete Verhalten in CS6 wird jedoch immer noch nicht erklärt, es sei denn, es handelt sich nur um einen Fehler.
SWB