Illustrator interne Präzision?

Welche interne Genauigkeit wird von Adobe Illustrator verwendet? Oder anders ausgedrückt: Welche interne Darstellung verwendet Illustrator zum Speichern von Koordinatendaten?

Versuchen Sie dies (ich verwende CS6):

  • Zoomen Sie so weit heran, 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 manchen Fällen auf einen vergrößerten Maßstab zurückgreifen und erst ganz am Ende meine Grafik auf die endgültige Größe skalieren.

Die interne Präzision von Illustrator ist natürlich 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?

@joojaa Welche Version von Illustrator verwenden Sie? Vielleicht haben sie das nach CS6 verbessert?
@joojaa Du siehst das nicht in CS5? Das ist interessant. Es ist definitiv konsistent in meiner Kopie von Illustrator CS6 (16.0.0 x64) reproduzierbar. Sicherlich ist es keine Regression in CS6 ...
Die Präzision konnten wir übrigens per Scripting messen. Aber ich fürchte, dass die Art und Weise, wie Tourkommentare diese Frage abgegrenzt haben, sie auf dieser Seite zum Thema macht.
Ok, nachdem ich ein CS6 verfolgt habe, kann ich dieses Problem endlich auf CS6 replizieren
@Arcode Ja, nachdem ich mein Beispielbild gepostet hatte, experimentierte ich weiter damit und konnte eine Vielzahl verrückter Formen erhalten. Ich konnte es nicht festnageln, aber die Zoomstufe und / oder Position auf der Seite und / oder die Größe Ihrer Ausgangsform scheinen sich zumindest manchmal auf die Ergebnisse auszuwirken. Ich bin froh, eine Bestätigung zu sehen, dass dies auch in CS5 vorkommt.

Antworten (1)

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

Es ist nichts falsch 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 speichert intern nur Zahlen. Die Interpretation dieser Zahlen liegt beim Frontend.

Jedenfalls kann ich dein Problem nicht nachvollziehen:

Geben Sie hier die Bildbeschreibung ein

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

Ich kann das Problem jedoch auf CS6 replizieren

Nachdem ich eine cs6-Version aufgespürt habe, kann ich bestätigen, dass dies tatsächlich passiert.

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

in  0100000001110111011010111110101110000101000111101011100001010010 
out 0100000001110111011010111110110000000000000000000000000000000000

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

Ob das in CC2017 der Fall ist, muss ich zäh testen.

Ich verstehe das. (Eigentlich bin ich Entwickler und Ingenieur.) Offensichtlich ist die interne Präzision von Illustrator (oder jeder anderen Software) nicht "unendlich". Ich versuche festzustellen, was das tatsächliche Limit in Illustrator ist. Illustrator scheint nicht einmal Gleitkommazahlen zu verwenden, da selbst Gleitkommazahlen mit einfacher Genauigkeit den Kreis in meinem Beispiel problemlos beibehalten könnten. Vielmehr scheint es auf einer bestimmten Ebene auf eine ganze Zahl gekürzt zu werden.
@SWB Es verwendet wahrscheinlich eine Festkommaarithmetik, da es sich im Wesentlichen um eine Postscript-Engine handelt. Ich habe schon früher darüber spekuliert, ich denke, sie wechseln zu Gleitkommazahlen, sie könnten sich in einem gemischten Zustand befinden. Das eigentliche Problem ist, wie Adobe die Transformationsmatrizen verwendet, was überhaupt keinen Sinn ergibt. Im Wesentlichen, wenn Sie jemals mit 2 Objekten mit unterschiedlichen Transformationen interagieren, werden alle Matrizen auf Identität zurückgesetzt. Dies würde selbst rudimentäre Erwartungen an Präzision sprengen.
RE: Festpunktarithmetik. Das ist auch meine Vermutung. Ich hoffe, dass sich jemand meldet, der sich wirklich auskennt und uns sicher Bescheid gibt. Ich habe versucht zu googeln und bin leer aufgetaucht.
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 identische Ergebnis, wenn ich dieselbe Konvertierung in C # durchlaufe, der Unterschied besteht nur darin, dass C # die unteren 32 Bits abschneidet, während Ihr Beispiel rund ist.) Trotzdem erklärt das nicht wirklich, was Illustrator tut, da sogar eine einzelne würde Round-Trip die Kontrollpunkte eines Kreises 10 -> 0,001 -> 10 ohne wahrnehmbare Verschlechterung. Seltsam, dass Sie dies nur in CS6 sehen. Ich bin davon ausgegangen, dass es für Illustrator im Allgemeinen etwas Grundlegenderes ist, aber vielleicht ist es ein Fehler.
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 Werte beim Speichern auf 0,0001 pt rundet, aber Gleitkommazahlen mit einfacher Genauigkeit verwendet, während die Datei geöffnet ist. Dies ist nach dem Wechsel vom EPS-basierten nativen Format zum PDF-basierten nativen Format, der mit Version 9 erfolgte, so dass dies möglicherweise noch heute der Fall ist. Es erklärt jedoch immer noch nicht das beobachtete Verhalten in CS6, es sei denn, es handelt sich nur um einen Fehler.
@SWB Die Tools selbst müssen nicht die interne Struktur widerspiegeln. Das Skalierungswerkzeug und der Skalierungsdialog können also tatsächlich unterschiedliche Dinge tun. Es stimmt, dass ich oft eine bessere Auflösung erhalte, wenn ich Dinge mit einem Skript mache, als Dinge mit einem Tool zu tun.