DE4134234A1 - Approximationsverfahren - Google Patents

Approximationsverfahren

Info

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
Application number
DE4134234A
Other languages
English (en)
Other versions
DE4134234C2 (de
Inventor
Shingo Takahashi
Aisaku Imanishi
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Seikosha KK
Original Assignee
Seikosha KK
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Seikosha KK filed Critical Seikosha KK
Publication of DE4134234A1 publication Critical patent/DE4134234A1/de
Application granted granted Critical
Publication of DE4134234C2 publication Critical patent/DE4134234C2/de
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/17Function 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.
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.
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.
DE4134234A 1990-10-17 1991-10-16 Verfahren zur Erzeugung von Signalen, die eine definierte Kurve, insb. eines Zeichens eines Outline-Fonts, repräsentieren Expired - Fee Related DE4134234C2 (de)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

Patent Citations (2)

* Cited by examiner, † Cited by third party
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