DE4134234A1 - Approximationsverfahren - Google Patents
ApproximationsverfahrenInfo
- Publication number
- DE4134234A1 DE4134234A1 DE4134234A DE4134234A DE4134234A1 DE 4134234 A1 DE4134234 A1 DE 4134234A1 DE 4134234 A DE4134234 A DE 4134234A DE 4134234 A DE4134234 A DE 4134234A DE 4134234 A1 DE4134234 A1 DE 4134234A1
- Authority
- DE
- Germany
- Prior art keywords
- curve
- ram
- points
- pnt
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/17—Function evaluation by approximation methods, e.g. inter- or extrapolation, smoothing, least mean square method
Description
Die Erfindung betrifft ein lineares Approximationsverfahren
für einen sogenannten Outline-Font.
In den vergangenen Jahren haben Outline-Fonts als Gegen
stand des Ausdrucks von Kurven eines Zeichens oder einer
Graphik an Bedeutung zugenommen.
Bei einer tatsächlichen Beschreibung einer Kurve für einen
Outline-Font wird im Stand der Technik die Kurve nacheinan
der solange unterteilt, bis benachbarte Unterteilungspunkte
zu einem einzigen Punkt degenerieren. Die Kurve wird dann
dadurch näherungsweise ausgedrückt, daß nacheinander die
einzelnen Unterteilungspunkte durch gerade Linien miteinan
der verbunden werden, das heißt die tatsächliche Kurve wird
durch eine lineare Approximation ausgedrückt.
Wenn die Krümmung einer auszudrückenden Kurve klein ist,
kann man eine ausreichende Ausdrucksqualität mit einer ver
hältnismäßig kleinen Anzahl von Unterteilungen erreichen.
Bei den bekannten Verfahren werden jedoch die Unterteilun
gen unabhängig von der Krümmung ausgeführt. In einigen Fäl
len führt dies zu mehr Unterteilungen als erforderlich
wäre. Dies wiederum führt dazu, daß die Erzeugung eines
Outline-Fonts viel Zeit in Anspruch nimmt.
Aufgabe der Erfindung ist es daher, ein Approximationsver
fahren zu schaffen, mit dem die zur Erzeugung eines Out
line-Fonts erforderliche Zeit verringert werden kann und
man nach Maßgabe einer auszudrückenden Kurve eine optimale
Anzahl von Unterteilungen erhält.
Diese Aufgabe wird durch ein Approximationsverfahren gemäß
Patentanspruch 1 bzw. Patentanspruch 2 gelöst.
Die Erfindung wird nachfolgend anhand von Ausführungsbei
spielen unter Bezug auf die Zeichnungen näher erläutert. Es
zeigen:
Fig. 1 ein Blockschaltbild einer Vorrichtung zur Durchfüh
rung des Verfahrens gemäß der Erfindung,
Fig. 2(A), 2(B) und 2(C) Flußdiagramme zur Erläuterung der
Arbeitsweise der Vorrichtung von Fig. 1,
Fig. 3, 4(A) und 4(B) Diagramme zur Erläuterung eines Out
line-Fonts,
Fig. 5 eine Datentabelle,
Fig. 6 bis 9 Adressenpläne jeweiliger in RAMs gespeicher
ter Daten,
Fig. 10 eine Darstellung zur Erläuterung einer ersten
Methode zum Erhalt der Anzahl von Unterteilungen
eines Kurvenstücks,
Fig. 11 ein spezielles Beispiel, bei dem die Anzahl von
Unterteilungen aufgrund der ersten Methode gewonnen
wird und
Fig. 12 und 13 Darstellungen zur Erläuterung einer zweiten
Methode zur Gewinnung der Anzahl von Unterteilungen
des Kurvenstücks.
Bei dem im folgenden beschriebenen Ausführungsbeispiel wer
den, soweit nichts anderes angegeben wird, eine kubische
Kurve, etwa eine kubische Bezier-Kurve oder eine kubische
Spline-Kurve dazu verwendet, einen Outline-Font auszu
drücken. Diese Kurven lassen sich parametrisch wie folgt
ausdrücken:
Q = WA × PA + WB × PB + WC × PC + WD × PD (1)
wobei WA, WB, WC und WD Funktionen sind, die unter Verwendung
eines Parameters t ausgedrückt werden. Nimmt man beispielsweise
die kubische Bezier-Kurve, dann sind diese
Funktionen gegeben durch
WA = (1 - t)³ (2a)
WB = 3t (1 - t)² (2b)
WC = 3t² (1 - t) (2c)
WC == t³ (2d)
mit
(0 t 1)
PA, PB, PC und PD sind die Koordinaten in einer X-Y-Ebene,
die eine krummlinige Gestalt festlegen. Diese Koordinaten
sind etwa ausgedrückt als:
PA (x, y): Ankerpunkt
PB (x, y): Steuerpunkt
PC (x, y): Steuerpunkt
PD (x, y): Ankerpunkt.
PB (x, y): Steuerpunkt
PC (x, y): Steuerpunkt
PD (x, y): Ankerpunkt.
Betrachtet man nun die Gleichung (1), dann sind die Parame
terfunktionen wie WA, WB, WC und WD, wie sie beispielsweise
in den Gleichungen (2a) bis (2d) definiert sind, abhängig
von den Arten der kubischen Kurven einzigartig bestimmt.
PA, PB, PC und PD sind entsprechend der krummlinigen
Gestalt vorbestimmt. Wie in Fig. 5 gezeigt, werden die
Parameterfunktion WA bis WD entsprechend den Werten der
jeweiligen Unterteilungsparameter t vorher berechnet. Die
Ergebnisse dieser Berechnungen können in einer Datentabelle
gespeichert werden. Die Koordinaten (x, y) von PA, PB, PC
und PD können ebenfalls in der Datentabelle gespeichert
werden. Die jeweiligen Daten werden also in der Datenta
belle gespeichert. Hardwareberechnungen auf der Basis der
Gleichung (1) werden mit Hilfe eines Multiplizierers und
eines Addierers durchgeführt, so daß man die krummlinigen
Daten oder die Daten für die lineare Approximation mit
hoher Geschwindigkeit erhält. Gemäß Darstellung in Fig. 5
ist der Parameter t (0 t 1) 256fach unterteilt. Die
Parameterfunktionen WA bis WD werden pro t erhalten. Dann
werden die Hardwareberechnungen auf der Basis der Gleichung
(1) ausgeführt. Als Ergebnis kann man die Koordinaten von
insgesamt 257 Punkten auf der Kurve erhalten. Diese Koordi
naten werden nacheinander durch gerade Linien verbunden,
wodurch die Kurve angenähert ausgedrückt werden kann.
Bei dem oben gegebenen Beispiel wird die Kurve durch Unter
teilung der Kurve in 256 Abschnitte angenähert ausgedrückt.
Wenn eine Kurve eine kleine Krümmung aufweist, dann
erreicht man eine Annäherung ausreichender Genauigkeit auch
dann, wenn die Kurve nicht in eine so große Anzahl von
Abschnitten unterteilt wird. Dies sei unter Bezug auf
Fig. 3, 4(A) und 4(B) erläutert. Die in Fig. 3 dargestellte
Kurve setzt sich aus insgesamt 14 Kurvenstücken C1 bis C14
zusammen. Jedes der Kurvenstücke C1 bis C14 wird durch die
Gleichung (1) unter Verwendung unterschiedlicher Anker- und
Steuerpunkte ausgedrückt. Die Fig. 4(A) und 4(B) zeigen
die Kurvenstücke C1 bzw. C2 von Fig. 3 in vergrößerter Wie
dergabe. Das Kurvenstück C1 ist gemäß Darstellung in Fig.
4(A) in 16 Abschnitte unterteilt. Das Kurvenstück C1 wird
also durch 17 auf ihm liegende Punkte Q0,0 bis Q0,16
angenähert. Bei dem Beispiel von Fig. 5 wird n schrittweise
jeweils um 16 inkrementiert (256/16 = 16), das heißt n = 0,
16, 32, . . . 256. Es reicht aus, wenn die Berechnungen nur
für diese Werte von n ausgeführt werden. Das Kurvenstück C2
ist gemäß Darstellung in Fig. 4(B) in 32 Abschnitte unter
teilt. Das Kurvenstück C2 wird also durch 33 auf ihm lie
gende Punkte Q0,0 bis Q0,32 angenähert. In diesem Fall wird
beim Beispiel von Fig. 5 n schrittweise jeweils um 8
(256/32 = 8) inkrementiert, das heißt die Berechnungen
brauchen nur für die Werte n = 0, 8, 16, ..., 256 ausge
führt zu werden. Auf diese Weise wird eine Anzahl von
Unterteilungen abhängig von der jeweils anzunähernden Kurve
bzw. dem anzunähernden Kurvenstück vorher ermittelt. Nur
die dieser Anzahl von Unterteilungen entsprechende Anzahl
von Berechnungen wird dann ausgeführt, was die Hardwarebe
rechnungen beschleunigt. Spezielle Methoden zur Ermittlung
der Anzahl von Unterteilungen werden später erläutert.
Auf der Grundlage des Voranstehenden soll das Approxima
tionsverfahren von Fig. 3 nachfolgend erläutert werden.
Fig. 1 ist ein Blockdiagramm, daß die Hardware für den
näherungsweisen Ausdruck der Kurve von Fig. 3 zeigt.
Ein Mikroprozessor SPU0 steuert die Hardware insgesamt.
Ein Nur-Lese-Speicher ROM0 speichert Programme, die für die
verschiedensten, von dem Mikroprozessor SPU0 auszuführenden
Prozesse verwendet werden.
In einem Speicher mit wahlfreiem Zugriff RAM0 werden zuvor
Daten gespeichert, auf die später noch näher eingegangen
wird. In dem RAM0 sind Daten einer Vielzahl von Kurven,
etwa der kubischen Spline-Kurve zusätzlich zur kubischen
Bezier-Kurve gespeichert. Diese Daten werden je nach Erfor
dernis zu Speichern mit wahlfreiem Zugriff RAM1, RAM2 und
RAM3 übertragen.
Der Speicher RAM1 speichert die Werte der Parameterfunktio
nen WA, WB, WC und WD, wie in Fig. 5 gezeigt. In der in
Fig. 6 gezeigten Weise sind im RAM1 Daten WA0-WA256, WB0-
WB256, WC0-WC256 und WD0-WD256 gespeichert, die vom
RAM0 übertragen wurden.
Der Speicher RAM2 speichert die Koordinatendaten der Anker
punkte PA, PD und der Steuerpunkte PB, PC für die einzelnen
Kurvenstücke C1-C14 in Fig. 3. Die Koordinatendaten wer
den vom RAM0 übertragen und im RAM2 gespeichert, wie dies
in Fig. 7 dargestellt ist. Dort repräsentieren PAX0-PDX0
die x-Koordinaten der Anker- und Steuerpunkte des Kurven
stücks C1. PAY0-PDY0 bezeichnen die y-Koordinaten dieser
Anker- und Steuerpunkte. PAX1-PDX1 bezeichnen die x-Koor
dinaten der Anker- und Steuerpunkte des Kurvenstücks C2.
PAY1-PDY1 sind die y-Koordinaten dieser Anker- und Steu
erpunkte, ect.
Für jedes der Kurvenstücke C1-C14 werden in den Speicher
RAM3 vorher die Daten entsprechend der Anzahl von Untertei
lungen eingegeben. Diese Daten können die Anzahl von Unter
teilungen selbst oder die Schrittzahl n (siehe Fig. 5)
umfassen. Bei diesem Ausführungsbeispiel speichert der
Speicher RAM3 gemäß Darstellung in Fig. 8 die Schrittzahl
von n, das heißt ein n-Inkrement Δn. In Fig. 8 entsprechen
Δn1, Δn2, ... den Schrittzahlen, die für die einzelnen Kur
venstücke C1, C2, ... in Fig. 3 gespeichert sind. Die Daten
Δn1, Δn2,... werden vom RAM0 zum RAM3 übertragen und dort
in der in Fig. 8 gezeigten Weise gespeichert.
Der Speicher RAM4 speichert die Ergebnisse der Hardwarebe
rechnungen, die gemäß der Gleichung (1) ausgeführt werden,
daß heißt Daten Q(x, y) über die Koordinaten auf den Kur
venstücken C1-C14. Die Koordinatendaten Q(x, y) werden im
RAM4 in der in Fig. 9 gezeigten Weise gespeichert. Dort
sind X0,0-X0,16 und Y0,0-Y0,16 die x- und y-Koordinaten
der Punkte Q0,0-Q0,16 auf dem Kurvenstück C1 von Fig.
4(A). Die Daten X1,0-X1,32 und Y1,0-Y1,32 sind die x
und y-Koordinaten an den Punkten Q1,0-Q1,32 auf dem Kur
venstück C2 von Fig. 4(B).
Ein Adreßzeiger PNT1 des RAM1 setzt sich aus unabhängigen
Adreßunterzeigern PNT1A, PNT1B, PNT1C und PNT1D zusammen.
Diese Unterzeiger zeigen auf die Adressen der Daten WA0-
WA256, WB0-WB256, WC0-WC256 bzw. WD0-WD256 (siehe
Fig. 6).
Ein Adreßzeiger PNT2 des RAM2 dient dazu, auf die Adressen
der jeweiligen Koordinatendaten (siehe Fig. 7) der Anker-
und Steuerpunkte zu weisen, die im RAM2 gespeichert sind.
Ein Adreßzeiger PNT3 des RAM3 zeigt auf die Adressen der
Schrittzahlen Δn1, Dn2, ... (siehe Fig. 8), die im RAM3
gespeichert sind.
Ein Adreßzeiger PNT4 des RAM4 zeigt auf die Adressen der
Koordinatendaten X0,0-X0,16 und Y0,0-Y0,16 (siehe Fig.
9), die mittels der Hardwareberechnungen erhalten werden.
Eine Zwischenspeicherschaltung STP dient zur Zwischenspei
cherung der Schrittzahlen Δn, Δn2, ... (siehe Fig. 8) die
im RAM3 gespeichert sind.
Eine Addierschaltung ADD addiert den Wert des momentan aus
gewählten Adreßunterzeigers, PNT1A, PNT1B, PNT1C oder
PNT1D zu dem Wert in der Zwischenspeicherschaltung STP.
Die Addierschaltung ADD gibt das Ergebnis dieser Addition
an den momentan ausgewählten Adreßunterzeiger. Anders aus
gedrückt, inkrementiert die Addierschaltung ADD die Werte
der Adreßunterzeiger um die Schrittzahlen Δn1, Δn2, . . .
die in der Zwischenspeicherschaltung STP zwischengespei
chert sind.
Eine Multiplizierschaltung MLT multipliziert die im RAM1
gespeicherten, in Fig. 6 gezeigten Daten mit den im RAM2
gemäß Fig. 7 gespeicherten Daten. Die Multiplizierschaltung
MLT führt also die Multiplikation (z. B. Wa×PA) in der
Gleichung (1) aus.
Ein Rechenwerk ALU addiert das von der Multiplizierschal
tung MLT gelieferte Produkt zu einem Wert eines Akkumula
tors.
Der Akkumulator ACC hält das Rechenergebnis des Rechenwerks
ALU und überträgt es an einen Eingang des Rechenwerks. Das
Rechenwerk ALU und der Akkumulator ACC bewirken also zusam
men die Addition in der Gleichung (1).
Eine Steuerschaltung CONT steuert den Rechenvorgang auf
grund eines Befehls vom Mikroprozessor CPU0. Die Steuerein
heit CONT enthält ein Mikroprogramm für die oben beschrie
benen Rechenvorgänge.
Unter Bezugnahme auf die Flußdiagramme der Fig. 2(A),
2(B) und 2(C) soll nun die Arbeitsweise der in Fig. 1
gezeigten Schaltung erläutert werden.
Auf der Basis eines Signals vom Mikroprozessor CPU0 wird
zuerst eine Initialisierung ausgeführt.
a): Vom RAM0 werden die Daten der Parameterfunktionen WA,
WB, WC und WD, wie in Fig. 5 gezeigt, entsprechend dem
jeweiligen t übertragen. Diese Daten werden gemäß Darstel
lung in Fig. 6 im RAM1 gespeichert. An das RAM2 werden vom
RAM0 die Daten der Koordinaten der Anker- und Steuerpunkte
für jedes der Kurvenstücke C1-C14 von Fig. 3 übertragen.
Diese Koordinatendaten werden dann in der in Fig. 7 gezeig
ten Weise in RAM2 gespeichert. An den RAM3 werden vom RAM0
die Schrittzahldaten Δn1, Δn2, ... für die einzelnen Kur
venstücke C1-C14 entsprechend der Anzahl von Unterteilungen
des jeweiligen Kurvenstücks C1-C14 in Fig. 3 übertragen und
im RAM3 in der in Fig. 8 gezeigten Weise gespeichert.
b): Die Adreßzeiger PNT2, PNT3 und PNT4 werden jeweils
auf "0" gesetzt. Als Folge davon wird auf die Adressen
gezeigt, unter denen gemäß Fig. 7 die Daten PAX0, gemäß
Fig. 8 die Daten Δn1 und gemäß Fig. 9 die Daten X0,0
gespeichert sind.
Damit ist die Initialisierung abgeschlossen. Als nächstes
wird der Rechenvorgang für das Kurvenstück C1 der Fig. 3
und 4(A) ausgeführt.
c): Der Adreßunterzeiger PNT1A wird auf "0" gesetzt, der
Adreßunterzeiger PNT1B auf "257", der Adreßunterzeiger
PNT1C auf "514" und der Adreßunterzeiger PNT1D auf "771".
Entsprechend Fig. 6 wird damit auf die Adressen gewiesen,
unter denen die Daten WA0, WB0, WC0 bzw. WD0 gespeichert
sind. In der Zwischenspeicherschaltung STP werden Daten
M[PNT3] zwischengespeichert, die an der Adresse "0000" des
RAM3 gespeichert sind, auf die der Adreßzeiger PNT3 weist.
Damit wird die Schrittzahl Δn1, wie in Fig. 8 gezeigt, zwi
schengespeichert, d. h. die Schrittzahl "16", die der Anzahl
von Unterteilungen des Kurvenstücks C1 von Fig. 4(A) ent
spricht.
d): Im folgenden wird ein Weg der Ausführung einer Rechen
routine beschrieben, die in Fig. 2(B) gezeigt ist.
Zum Erhalt der x-Koordinate am Punkt Q0,0 in Fig. 4(A),
wird auf folgende Weise "WA×PA + WB×PB + WC×PC + WD ×
PD" in Gleichung (1) berechnet.
(d1): Der Akkumulator ACC wird gelöscht und auf "0"
gesetzt.
d2): An den Eingang "X" der Multiplizierschaltung MLT wer
den Daten M[PNT1A] übertragen, d. h. "WA0" (siehe Fig. 6),
die an der Adresse "0000" des RAM1 gespeichert sind, auf
die der Adreßunterzeiger PNT1A weist. An den Eingang "Y"
der Multiplizierschaltung MLT werden Daten M[PNT2] übertra
gen, d. h. "PAX0" (siehe Fig. 7), die an der Adresse "0000"
des RAM2 gespeichert sind, auf die der Adreßzeiger PNT2
weist.
d3): Die Multiplikation und Addition von Fig. 2(C) werden
auf folgende Weise ausgeführt:
d101): An dem Ausgang "Z" der Multiplizierschaltung MLT wird das Produkt "WA0×PAX0" des Werts "WA0" am Eingang "X" der Multiplizierschaltung MLT und des Werts "PAX0" an ihrem Eingang "Y" ausgegeben. D.h., es wird der Rechen schritt "WA×PA" der Gleichung (1) ausgeführt. Das Ergeb nis dieses Rechenschritts wird an den Eingang "Y" des Rechenwerks ALU gegeben. Auf der anderen Seite wird an den Eingang "X" des Rechenwerks ALU der Wert "0" des Akkumula tors ACC übertragen.
d101): An dem Ausgang "Z" der Multiplizierschaltung MLT wird das Produkt "WA0×PAX0" des Werts "WA0" am Eingang "X" der Multiplizierschaltung MLT und des Werts "PAX0" an ihrem Eingang "Y" ausgegeben. D.h., es wird der Rechen schritt "WA×PA" der Gleichung (1) ausgeführt. Das Ergeb nis dieses Rechenschritts wird an den Eingang "Y" des Rechenwerks ALU gegeben. Auf der anderen Seite wird an den Eingang "X" des Rechenwerks ALU der Wert "0" des Akkumula tors ACC übertragen.
d102): Der Wert am Eingang "X" des Rechenwerks ALU wird zu
demjenigen an seinem Eingang "Y" addiert. Das Ergebnis die
ser Addition wird an den Akkumulator ACC gegeben. Daraufhin
hält der Akkumulator ACC den Wert des Produkts "WA0×
PAX0".
d103): Zu dem Wert des Adreßzeigers PNT2 wird "1"
addiert, so daß der Zeigerwert "0001" wird.
d4): An den Eingang "X" der Multiplizierschaltung MLT wer
den Daten M[PNT1B], d. h. "WB0" (siehe Fig. 6) übertragen,
die an der Adresse "0257" des RAM1 gespeichert sind, auf
die der Adreßunterzeiger PNT1B zeigt. An den Eingang "Y"
der Multiplizierschaltung MLT werden Daten M[PNT2], d. h.
"PBX0" (siehe Fig. 7) übertragen, die an der Adresse "0001"
des RAM2 gespeichert sind, auf die der Adreßzeiger PNT2
zeigt.
d5): Dann werden die Multiplikation und Addition gemäß
Fig. 2(C) ausgeführt. Die grundsätzlichen Vorgänge sind
dabei die gleichen, wie sie oben bei (d3) beschrieben wur
den. Die Multiplizierschaltung MLT ermittelt das Produkt
von "WB0" (siehe Fig. 6) und "PBX0" (siehe Fig. 7)1 also
das Produkt "WB0×PBX0", das "WB×PB" in Gleichung (1)
entspricht. Das Rechenwerk ALU addiert den Wert dieses Pro
dukts "WB0×PBX0" zu dem im Akkumulator ACC gehaltenen
Wert, also zu "WA0×PAX0". Die Summe "WA0×PAX0 + WB0×
PBX0" wird in den Akkumulator ACC eingegeben. Damit ist
eine Berechnung entsprechend "WA×PA + WB×PB" in Glei
chung (1) ausgeführt.
d6): An den Eingang "X" der Multiplizierschaltung MLT wer
den Daten M[PNT1C], d. h. "WC0" (siehe Fig. 6) übertragen,
die an der Adresse "0514" des RAM1 gespeichert sind, auf
die der Adreßunterzeiger PNT1C weist. An den Eingang "Y"
der Multiplizierschaltung MLT werden Daten M[PNT2], d. h.
"PCX0" (siehe Fig. 7) übertragen, die an der Adresse "0002"
des RAM2 gespeichert sind, auf die der Adreßzeiger PNT2
weist.
d7): Die Multiplikation und Addition von Fig. 2(C) werden
dann ausgeführt. Die grundsätzlichen Vorgänge sind dabei
die gleichen, wie sie bei (d3) erläutert wurden. Die Multi
plizierschaltung MLT ermittelt das Produkt von "WC0" in
Fig. 6 und "PCX0" in Fig. 7, also das Produkt "WC0×PCX0",
das "WC×PC" in Gleichung (1) entspricht. Das Rechenwerk
ALU addiert das Ergebnis dieser Multiplikation zu dem im
Akkumulator ACC gehaltenen Wert von "WA0×PAX0 + WB0×
PBX0". Das Ergebnis der Addition wird in den Akkumulator
ACC eingegeben, der dann "WA0×PAX0 + WB0×PBX0 + WC0×
PCX0" hält. Damit ist die Berechnung entsprechend "WA×PA
+ WB×PB + WC×PC in Gleichung (1) ausgeführt.
d8): An den Eingang "X" der Multiplizierschaltung MLT wer
den Daten M[PNT1D] übertragen, d. h. "WD0" (siehe Fig 6),
die an der Adresse "0771" des RAM1 gespeichert sind, auf
die der Adreßunterzeiger PNT1D weist. An den Eingang "Y"
der Multiplizierschaltung MLT werden Daten M[PNT2] übertra
gen, d. h. "PDX0" (siehe Fig. 7), die an der Adresse "0003"
des RAM2 gespeichert sind, auf die der Adreßzeiger PNT2
weist.
d9): Die Multiplikation und Addition von Fig. 2(C) werden
ausgeführt. Die grundsätzlichen Vorgänge sind dabei die
gleichen wie bei (d3) beschrieben. Die Multiplizierschal
tung MLT ermittelt das Produkt von "WD0" von Fig. 6 und
"PDX0" von Fig. 7, d. h. das Produkt "WD0×PDX0", das "WD×
PD" in Gleichung (1) entspricht. Das Rechenwerk ALU addiert
das Produkt von "WD0×PDX0" zu dem im Akkumulator ACC
gehaltenen Wert von "WA0×PAX0 + WB0×PBX0 + WC0×PCX0".
In den Akkumulator ACC wird dann das Ergebnis dieser Addi
tion, also "WA0×PAX0 + WB0×PBX0 + WC0×PCX0 + WD0×
PDX0" eingegeben. Damit ist eine Berechnung entsprechend
"WA×PA + WB×PB + WC×PC + WD×PD" ausgeführt.
d10): Die x-Koordinate am Punkt Q0,0 in Fig. 4(A) wird in
oben beschriebener Weise errechnet. Das im Akkumulator ACC
gehaltene Rechenergebnis wird unter der Adresse "0000", auf
die der Adreßzeiger PNT4 weist, in den Speicher RAM4 ein
gespeichert. Die gespeicherten Daten M[PNT4] sind als
"X0,0" in Fig. 9 bezeichnet.
d11): Zum Wert des Adreßzeigers PNT4 wird "1" addiert, so
daß der Zeigerwert "0001" wird.
d12)-d21): Zum Erhalt der y-Koordinate des Punkts Q0,0
in Fig. 4(A) wird, auf gleiche Weise wie in (d1) bis (d10)
der Prozeß von (d12)-(d21) von Fig. 2(B) ausgeführt.
Danach ist an der Adresse "0001" des RAM4, auf die der
Adreßzeiger PNT4 weist, ein Rechenergebnis gespeichert,
das sich aus der Ausrechnung von "WA0×PAY0 + WB0×PBY0 +
WC0×PCY0 + WD0×PDY0" ergibt. Diese gespeicherten Daten
M[PNT4] sind als "Y0,0" in Fig. 9 bezeichnet.
d22): Zum Wert des Adreßzeigers PNT4 wird "1" addiert, so
daß der Zeigerwert "0002" wird.
d23): Vom Wert des Adreßzeigers PNT2 wird "8" subtra
hiert, so daß der Zeigerwert "0000" wird. Damit ist die in
Fig. 2(A) gezeigte Rechenroutine beendet. Die x-Koordinate
"X0,0" und die y-Koordinate "Y0,0" am Punkt Q0,0 in Fig.
4(A) sind im RAM4 gespeichert (siehe Fig. 9).
e): Zum jeweiligen Wert der Adreßunterzeiger PNT1A,
PNT1B, PNT1C und PNT1D wird die Schrittzahl Δn1 addiert,
die in der Zwischenspeicherschaltung STP zwischengespei
chert ist (in diesem Fall also, wie oben erläutert, "16") .
Die Zeigerwerte der Adreßunterzeiger PNT1A, PNT1B, PNT1C
und PNT1D werden damit "16", "273" (= 257 + 16), "530"
(= 514 + 16) bzw. "787" (= 771 + 16).
f): Es wird geprüft, ob der Wert des Adreßunterzeigers
PNT1A größer als "256" ist.
Der momentane Wert des Adreßunterzeigers PNT1A ist "0016".
Der Ablauf geht daher gemäß Fig. 2(A) zur Rechenroutine
(d). Damit werden die gleichen Schritte ausgeführt, wie sie
oben unter (d) erläutert wurden. Folglich werden die x-
Koordinate "X0,1" und die y-Koordinate "Y0,1" des Punkts
Q0,1 von Fig. 4(A) in dem RAM4 gespeichert (siehe Fig. 9).
Im einzelnen ist "X0,1" gleich "WA16×PAX0 + WB16×PBX0 +
WC16×PCX0 + WD16×PDX0", während "Y0,1" gleich "WA16×
PAY0 + WB16×PBY0 + WC16×PCY0 + WD16×PDY0" ist (siehe
Fig. 6 und 7).
Der Prozeß setzt sich in dieser Weise fort, bis der Wert
des Adreßunterzeigers PNT1A "256" überschreitet. So werden
in dem RAM4 nacheinander die x-Koordinaten "X0,0"-"X0,16"
und die y-Koordinaten "Y0,0"-"Y0,16" der Punkte Q0,0-
Q0,16 in Fig. 4(A) gespeichert (siehe Fig. 9).
g): Wenn der Wert des Adreßunterzeigers PNT1A größer als
"256" wird, wird der folgende Prozeß ausgeführt, d. h. zum
Wert des Adreßzeigers PNT2 wird "8" addiert. Als Folge
davon wird der Zeigerwert "0008" (siehe Fig. 7). Zum Wert
des Adreßzeigers PNT3 wird "1" addiert, und der Zeigerwert
wird "0001" (siehe Fig. 8) .
Damit sind die Prozesse in Verbindung mit dem Kurvenstück
C1 aus den Fig. 3 und 4(A) beendet.
h): Es wird geprüft, ob der Wert des Adreßzeigers PNT3
"14" erreicht hat. Dieser Wert entspricht der Anzahl von
Kurvenstücken der Kurve von Fig. 3. Dieser Wert wird für
jede Kurve geeignet gewählt.
Der momentane Wert des Adreßzeigers PNT3 ist "0001". Der
Ablauf von Fig. 2(A) geht deshalb weiter zur Rechenroutine
(c). Damit wiederholen sich die oben unter (c) bis (g)
beschriebenen Vorgänge. Auf diese Weise werden im RAM4
nacheinander die x-Koordinaten "X1,0"-"X1,32" und die y-
Koordinaten "Y1,0"-"Y1,32" der Punkte der Q1,0-Q1,32
von Fig. 4(B) gespeichert (siehe Fig. 9).
Auf diese Weise werden für die Kurvenstücke C1-C14 von
Fig. 3 die gleichen Schritte ausgeführt, bis der Wert des
Adreßzeigers PNT3 "14" wird. Wenn der Wert des Adreßzei
gers PNT3 "14" geworden ist, wird entschieden, daß die Pro
zesse für die Kurvenstücke C1-C14 von Fig. 3 beendet
sind.
Wie oben beschrieben, kann die Anzahl von Unterteilungen
jedes Kurvenstücks abhängig von seiner Krümmung angemessen
bestimmt werden. Die Auswahl der optimalen Anzahl von
Unterteilungen jedes Kurvenstücks ermöglicht eine Beschleu
nigung der Hardware-Rechenvorgänge. Im allgemeinen kann bei
einer kleinen Krümmung eine genau genug ausgedrückte Nähe
rung der Kurve auch mit einer kleinen Anzahl von Untertei
lungen erhalten werden.
Im folgenden wird eine Methode beschrieben, nach der die
optimale Anzahl von Unterteilungen eines Kurvenstücks
ermittelt wird.
Dabei sei zunächst auf Fig. 10 Bezug genommen, anhand derer
eine erste Methode beschrieben werden soll.
In Fig. 10 bezeichnen PA und PD Ankerpunkte des Kurven
stücks C1, während PB und PC Steuerpunkte derselben sind.
Lab, Lbc, Lcd und Lda sind die Längen der Geraden, die PA
mit PB, PB mit PC, PC mit PD bzw. PD mit PA verbinden. All
gemein nehmen die Längen Lab und Lcd der entsprechenden
Geraden mit wachsender Krümmung eines Kurvenstücks CV1 zu.
Die optimale Anzahl "N" von Unterteilungen des Kurvenstücks
CV1 kann durch folgende Abschätz-Ausdrücke erhalten werden.
ΔL = (Lab + Lbc + Lcd - Lda) + 1 (3)
N = 2{ log(a) Δ L } (4)
2 a 8 ("a" ist die Basis)
Es ist zu beachten, daß die Basis "a" nach Maßgabe der
Näherungsgenauigkeit für die Kurve geeignet zu wählen ist.
Die Unterteilungsanzahl "N", die durch die Gleichung (4)
bestimmt ist, wird so ausgewählt, daß die Anzahl von Unter
teilungen ("256" beim Beispiel von Fig. 6 ) in der Datenta
belle nicht überschritten wird.
Fig. 11 gibt ein Beispiel der Unterteilungsanzahlen, die
aus den oben beschriebenen Abschätzungsausdrücken folgen.
Fig. 11 zeigt ein Beispiel, wo die y-Koordinaten der Steu
erpunkte PB und PC sequentiell verringert werden, d. h. die
Krümmung des Kurvenstücks nimmt allmählich ab. Man beachte,
daß der "Schritt" in Fig. 11 ein Wert ist, der sich aus
"256/N" ergibt. Dies entspricht den Schrittzahldaten Δn1,
Δn2, ..., die in Fig. 8 gezeigt sind. Wie in Fig. 11
gezeigt, nimmt, wenn die vorgenannten Abschätz-Ausdrücke
verwendet werden, die Anzahl von Unterteilungen mit abneh
mender Krümmung des Kurvenstücks ab.
Es sei angemerkt, daß in der Gleichung (3) die Längenwerte
der jeweiligen Geraden selbst verwendet werden. Das Quadrat
dieser Längen könnte aber ebenso eingesetzt werden.
Unter Bezug auf die Fig. 12 und 13 soll nun eine zweite
Methode beschrieben werden.
PA und PD in Fig. 12 sind Ankerpunkte eines Kurvenstücks
CV2, während PB und PC ihre Steuerpunkte sind. S1 ist die
Fläche eines Vierecks, das sich durch Verbinden der Punkte
PA, PB, PC und PD mit geraden Linien ergibt. Typischerweise
nimmt die Fläche S1 des Vierecks mit zunehmender Krümmung
des Kurvenstücks CV2 zu. Demzufolge kann die optimale
Unterteilungsanzahl "N" des Kurvenstücks CV2 unter Verwen
dung des folgenden Abschätz-Ausdrucks erhalten werden:
N = 2{ log(a)S1 } (5)
2 a 8 ("a" ist die Basis)
Es sei angemerkt, daß die Basis "a" nach Maßgabe der Nähe
rungsgenauigkeit der Kurve angemessen ausgewählt wird. Die
Unterteilungsanzahl "N" in Gleichung (5) wird so ausge
wählt, daß sie nicht die Anzahl von Unterteilungen in der
Datentabelle ("256" im Beispiel von Fig. 6) überschreitet.
In Fig. 13 sind PA und PD Ankerpunkte eines Kurvenstücks
CV3, während PB und PC ihre Steuerpunkte sind. S2 ist die
Fläche eines Dreiecks, das sich durch Verbinden der Punkte
PA, PB und PD mit geraden Linien ergibt. S3 ist die Fläche
eines Dreiecks, das durch Verbinden der Punkte PA, PC und
PD durch gerade Linien gebildet wird.
Die Summe "S2 + S3" der Flächen S2 und S3 der Dreiecke
nimmt mit zunehmender Krümmung des Kurvenstücks CV3 zu.
Daher kann die optimale Unterteilungsanzahl "N" mittels des
folgenden Abschätz-Ausdrucks ermittelt werden:
N = 2{ log(a)(S2+S3) } (6)
2 a 8 ("a" ist die Basis)
Es sei angemerkt, daß die Basis "a" nach Maßgabe der Nähe
rungsgenauigkeit der Kurve angemessen ausgewählt wird. Die
Unterteilungsanzahl "N" in Gleichung (6) wird so ausge
wählt, daß sie nicht die Anzahl von Unterteilungen in der
Datentabelle ("256" im Beispiel von Fig. 6) überschreitet.
Es sei darauf hingewiesen, daß in den Gleichungen (5) und
(6) die Werte der Flächen selbst verwendet werden. Statt
dessen könnten aber auch die Quadrate dieser Werte einge
setzt werden.
Gemäß der voranstehend beschriebenen ersten Methode der
Erfindung wird der Unterschied zwischen zwei Werten ermit
telt, von denen der eine der Summe der Längen von Geraden
entspricht, die nacheinander von einem Ankerpunkt über die
Steuerpunkte zum anderen Ankerpunkt führen und die Punkte
verbinden, während der andere Wert der Länge der Geraden
entspricht, die die beiden Ankerpunkte miteinander verbin
det. Die Anzahl von Unterteilungen der Kurve wird auf der
Grundlage eines dieser Differenz entsprechenden Wertes
ermittelt, so daß die Kurve angenähert ausgedrückt wird.
Bei der zweiten Methode gemäß der Erfindung wird die Anzahl
von Unterteilungen der Kurve auf der Grundlage von Flächen
ermittelt, die von Geraden eingeschlossen werden, die einen
Ankerpunkt, den Steuerpunkt und den anderen Ankerpunkt ver
binden. Auch hierdurch wird die Kurve angenähert ausge
drückt. Dabei wird also die optimale Anzahl von Untertei
lungen abhängig von der Kurve ermittelt, die ausgedrückt
werden soll. Die zur Erzeugung des Outline-Fonts erforder
liche Zeit kann dadurch reduziert werden.
Claims (2)
1. Lineares Approximationsverfahren zum näherungswei
sen Ausdrücken einer Kurve, die durch zwei Ankerpunkte (PA,
PD) und wenigstens einen Steuerpunkt (PB, PC) ausgedrückt
ist, bei dem die Kurve in eine Vielzahl von Abschnitten
unterteilt wird und benachbarte Unterteilungspunkte jeweils
durch eine Gerade verbunden werden,
dadurch gekennzeichnet, daß man die
Differenz zwischen einem ersten und einem zweiten Wert
ermittelt, von denen der erste den Längen von Geraden ent
spricht, die nacheinander den einen Ankerpunkt mit dem
Steuerpunkt und diesen mit dem anderen Ankerpunkt verbin
den, während der andere Wert der Länge einer Geraden ent
spricht, die die Ankerpunkte verbindet, und daß man die
Anzahl (N) von Unterteilungen der Kurve auf der Basis eines
dieser Differenz entsprechenden Werts ermittelt.
2. Lineares Approximationsverfahren zum näherungswei
sen Ausdrücken einer Kurve, die durch zwei Ankerpunkte (PA,
PD) und wenigstens einen Steuerpunkt (PB, PC) ausgedrückt
ist, bei dem die Kurve in eine Vielzahl von Abschnitten
unterteilt wird und benachbarte Unterteilungspunkte jeweils
durch eine Gerade verbunden werden,
dadurch gekennzeichnet , daß man die
Anzahl von Unterteilungen der Kurve auf der Basis von Flä
chen (S1; S2, S3) ermittelt, die von Geraden umgeben wer
den, welche den einen Ankerpunkt, den Steuerpunkt und den
anderen Ankerpunkt miteinander verbinden.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2278099A JP2522107B2 (ja) | 1990-10-17 | 1990-10-17 | 曲線近似方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
DE4134234A1 true DE4134234A1 (de) | 1992-04-23 |
DE4134234C2 DE4134234C2 (de) | 1996-05-09 |
Family
ID=17592621
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE4134234A Expired - Fee Related DE4134234C2 (de) | 1990-10-17 | 1991-10-16 | Verfahren zur Erzeugung von Signalen, die eine definierte Kurve, insb. eines Zeichens eines Outline-Fonts, repräsentieren |
Country Status (3)
Country | Link |
---|---|
US (1) | US5430834A (de) |
JP (1) | JP2522107B2 (de) |
DE (1) | DE4134234C2 (de) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3226734B2 (ja) * | 1994-10-19 | 2001-11-05 | キヤノン株式会社 | データ変換装置および方法 |
US20090141038A1 (en) * | 2007-11-02 | 2009-06-04 | Newaskar Saket Prashant | Bezier Curves for Low Memory Embedded Graphics Systems |
JP4582200B2 (ja) * | 2008-06-03 | 2010-11-17 | コニカミノルタビジネステクノロジーズ株式会社 | 画像処理装置、画像変換方法、およびコンピュータプログラム |
US9367933B2 (en) | 2012-06-26 | 2016-06-14 | Google Technologies Holdings LLC | Layering a line with multiple layers for rendering a soft brushstroke |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1984002993A1 (en) * | 1983-01-20 | 1984-08-02 | Dicomed Corp | Method and apparatus for representation of a curve of uniform width |
DE3700740A1 (de) * | 1986-01-16 | 1987-07-23 | Gen Electric | Linearapproximationsumformschaltung |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4688182A (en) * | 1984-09-10 | 1987-08-18 | Allied Corporation | Method and apparatus for generating a set of signals representing a curve |
GB2203613B (en) * | 1987-04-06 | 1992-01-02 | Canon Kk | Image processing apparatus |
US5214754A (en) * | 1988-06-29 | 1993-05-25 | Fujitsu Limited | Method and apparatus for approximating polygonal line to curve |
US5133052A (en) * | 1988-08-04 | 1992-07-21 | Xerox Corporation | Interactive graphical search and replace utility for computer-resident synthetic graphic image editors |
US5233671A (en) * | 1989-02-22 | 1993-08-03 | Ricoh Company Ltd. | Image coding method for coding characters using a modified Bezier curve |
FR2646256A1 (fr) * | 1989-04-24 | 1990-10-26 | Digital Equipment Int | Procede pour realiser des dessins a l'aide d'un ordinateur |
US5103306A (en) * | 1990-03-28 | 1992-04-07 | Transitions Research Corporation | Digital image compression employing a resolution gradient |
-
1990
- 1990-10-17 JP JP2278099A patent/JP2522107B2/ja not_active Expired - Fee Related
-
1991
- 1991-10-16 DE DE4134234A patent/DE4134234C2/de not_active Expired - Fee Related
-
1993
- 1993-08-09 US US08/104,259 patent/US5430834A/en not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1984002993A1 (en) * | 1983-01-20 | 1984-08-02 | Dicomed Corp | Method and apparatus for representation of a curve of uniform width |
DE3700740A1 (de) * | 1986-01-16 | 1987-07-23 | Gen Electric | Linearapproximationsumformschaltung |
Also Published As
Publication number | Publication date |
---|---|
JPH04152390A (ja) | 1992-05-26 |
JP2522107B2 (ja) | 1996-08-07 |
US5430834A (en) | 1995-07-04 |
DE4134234C2 (de) | 1996-05-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP0153556B1 (de) | Verfahren zum grafischen Darstellen eines Gebildes | |
EP0290374B1 (de) | Verfahren und Vorrichtung zum Generieren und zum Reproduzieren von zweidimensionalen graphischen Objekten | |
DE3806223C2 (de) | Verfahren zur Erzeugung von Zeichenmustern | |
DE3019878A1 (de) | Vorrichtung zur erzeugung eines drehzahlabhaengigen signals fuer die schlupfregelung eines rades | |
DE3616740A1 (de) | Vorrichtung zur gewinnung von werkstueckkonturen | |
DE4014595A1 (de) | Cad/cam-einrichtung | |
DE4014594A1 (de) | Cad/cam-einrichtung | |
DE19618332A1 (de) | Numerische Steuervorrichtung mit Spline-Interpolationsfunktion | |
DE102017124477B4 (de) | Werkzeugpfaderzeugungsvorrichtung, werkzeugpfaderzeugungsverfahren und werkzeugpfaderzeugungsprogramm | |
DE2542247A1 (de) | Verfahren zur schweineverarbeitung | |
DE3315148A1 (de) | Digitale sichtanzeigeeinrichtung | |
DE112017004424T5 (de) | Befehlswerterzeugungsvorrichtung | |
DE1588093A1 (de) | Anordnung zum automatischen Steuern von Werkzeugmaschinen | |
DE3820566C2 (de) | Verfahren zum Ermitteln einer Bewegungsbahn eines Bearbeitungswerkzeugs einer von einer numerischen Steuervorrichtung gesteuerten Werkzeugmaschine | |
DE4134234C2 (de) | Verfahren zur Erzeugung von Signalen, die eine definierte Kurve, insb. eines Zeichens eines Outline-Fonts, repräsentieren | |
DE2212967A1 (de) | Einrichtung und Verfahren zur Verwendung eines dreifeldrigen Wortes zur Darstellung einer Gleitkommazahl | |
DE4119712A1 (de) | Vorrichtung und verfahren zur erzeugung linearer pixel | |
DE4100691A1 (de) | Verfahren zur darstellung eines dreidimensionalen modells | |
EP0779585A2 (de) | Digitale Signalprozessoranordnung zum Vergleich von Merkmalsvektoren und zugehöriges Betriebsverfahren | |
DE4134235C2 (de) | Verfahren zur Erzeugung von Signalen, die eine definierte Kurve, insb. eines Zeichens eines Outline-Fonts, repräsentieren | |
DE3634024C2 (de) | ||
DE102018110297B4 (de) | Verfahren und Vorrichtung zur ruckbegrenzten Trajektorieplanung und Echtzeit-Steuerung einer Bewegung | |
DE3836205A1 (de) | Multiplizierer | |
CH694117A5 (de) | Verfahren und Vorrichtung zur Drahtentladungsbearbeitung. | |
DE2428856A1 (de) | Schaltkreis zur erzeugung einer zahl, die das quadrat wenigstens einer verschiebung repraesentiert, und numerische steuerung fuer eine werkzeugmaschine |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
OP8 | Request for examination as to paragraph 44 patent law | ||
8128 | New person/name/address of the agent |
Representative=s name: HOFFMANN, E., DIPL.-ING., PAT.-ANW., 82166 GRAEFEL |
|
D2 | Grant after examination | ||
8364 | No opposition during term of opposition | ||
8320 | Willingness to grant licences declared (paragraph 23) | ||
8339 | Ceased/non-payment of the annual fee |