U.S. patent application number 11/057497 was filed with the patent office on 2005-07-07 for method and apparatus for transforming and rendering graphical curves.
This patent application is currently assigned to Microsoft Corporation. Invention is credited to Fushiki, Ikko, Goossen, J. Andrew, Lee, Hock San.
Application Number | 20050146527 11/057497 |
Document ID | / |
Family ID | 34619261 |
Filed Date | 2005-07-07 |
United States Patent
Application |
20050146527 |
Kind Code |
A1 |
Fushiki, Ikko ; et
al. |
July 7, 2005 |
Method and apparatus for transforming and rendering graphical
curves
Abstract
The present invention provides a method and apparatus for
rendering images on a computer screen. Under the invention, a
portion of a base image is described using a path. The path is then
transformed using a non-affine transform to produce a transformed
path. The transformed path is then rendered onto the computer
screen. Another aspect of the present invention is a method and
apparatus for rendering curves of any order and any dimension. In
particular, the present invention provides a means for converting a
function of any order and any dimension that describes one segment
of a curve into a function that describes a different sized segment
or an adjoining segment.
Inventors: |
Fushiki, Ikko; (Redmond,
WA) ; Lee, Hock San; (Redmond, WA) ; Goossen,
J. Andrew; (Issaquah, WA) |
Correspondence
Address: |
Theodore M. Magee
Westman, Champlin & Kelly
Suite 1600
900 Second Avenue South
Minneapolis
MN
55402-3319
US
|
Assignee: |
Microsoft Corporation
Redmond
WA
|
Family ID: |
34619261 |
Appl. No.: |
11/057497 |
Filed: |
February 14, 2005 |
Related U.S. Patent Documents
|
|
|
|
|
|
Application
Number |
Filing Date |
Patent Number |
|
|
11057497 |
Feb 14, 2005 |
|
|
|
09452658 |
Dec 1, 1999 |
|
|
|
Current U.S.
Class: |
345/441 ;
345/443 |
Current CPC
Class: |
G06T 11/203
20130101 |
Class at
Publication: |
345/441 ;
345/443 |
International
Class: |
G06K 009/36 |
Claims
What is claimed is:
1. A method of displaying an image on a computer screen, the method
comprising: describing at least a portion of a base image as a path
comprising a function of at least one variable, the path
representing multiple pixels; performing a non-affine transform on
the path instead of the multiple pixels represented by the path to
produce a transformed path by performing the non-affine transform
on the function including the variable; and rendering the
transformed path onto the computer screen.
2. The method of claim 1 wherein performing a non-affine transform
comprises performing a bilinear transform.
3. The method of claim 2 wherein describing the portion of the base
image as a path comprises describing the portion using a function
of order n.
4. The method of claim 3 wherein performing a bilinear transform
produces a transformed function of order 2n.
5. The method of claim 3 wherein describing the portion of the base
image as a path comprises describing the portion as a function of
order one.
6. The method of claim 3 wherein describing the portion of the base
image as a path comprises describing the portion as a function of
order three.
7. The method of claim 1 wherein performing a non-affine transform
comprises performing a perspective transform.
8. The method of claim 7 wherein performing a perspective transform
produces a rational function of order n.
9. The method of claim 1 wherein rendering the transformed path
comprises approximating the transformed path as a series of lines
and rendering each line in the series of lines.
10. A computer-readable medium having computer-executable
components for performing steps comprising: generating a function
of a variable to describe multiple pixels of an image for a
computer screen; transforming the function instead of the multiple
pixels using a non-affine transform applied to the entire function
including the variable to produce a transformed function; and
converting the transformed function into an image on the computer
screen.
11. The computer-readable medium of claim 10 wherein transforming
the function comprises transforming a function representing a
smooth curve.
12. The computer-readable medium of claim 10 wherein transforming
the function comprises using a bilinear transform.
13. The computer-readable medium of claim 12 wherein generating a
function to describe an image comprises generating a function of
order n and wherein transforming the function produces a
transformed function of order 2n.
14. The computer-readable medium of claim 10 wherein transforming
the function comprises using a perspective transform.
15. The computer-readable medium of claim 10 wherein converting the
transformed function into an image comprises converting the
transformed function into a series of lines and converting each
line into an image.
Description
REFERENCE TO RELATED APPLICATION
[0001] This application is a divisional of and claims priority from
U.S. patent application Ser. No. 09/452,658, filed Dec. 1, 1999,
and entitled "METHOD AND APPARATUS FOR TRANSFORMING AND RENDERING
GRAPHICAL CURVES."
BACKGROUND OF THE INVENTION
[0002] The present invention is related to computer graphing
systems. In particular, the present invention is related to
transforming and rendering shapes on a computer output device.
[0003] Many of the images that appear on a computer screen or on a
computer-printed page are generated by passing a base image through
some form of transform. This technique allows a computer to display
many different versions of the base image without storing all of
the versions in long-term memory. For example, using a single base
image of the letter "b", a computer can generate large versions of
the letter, can change the location or orientation of the letter on
the display or page, or can skew the letter by slanting its top to
the left or to the right.
[0004] In two-dimensional graphics, transforms have historically
been limited to affine transforms where all parallel lines in the
base image remain parallel in the transformed image. Affine
transforms include scaling, rotating, skewing, and translating
(i.e. changing location).
[0005] Two techniques have been developed for performing affine
transforms. In one technique, each pixel of the base image is
transformed separately by transforming the coordinates of the
pixel. Thus, if there were one hundred pixels in an image, one
hundred transforms would be performed. In the other technique,
pixels within a base image are described using a set of equations
known as a path. Typically, the x-coordinates of the pixels are
described using one equation and the y-coordinates of the pixels
are described using a separate equation. These paths are then
transformed to produce a new set of equations that describe the
pixels of the transformed image.
[0006] Recently, more complex non-affine transforms have been
developed, which provide a three-dimensional appearance to
two-dimensional objects. In a non-affine transform, lines that are
parallel in the base image do not necessarily remain parallel in
the transformed image. Because of the complexity of these
transforms, only pixels have been transformed in the prior art. To
transform more complex curves, the prior art transforms selected
points along the curve and then connects the transformed points
together to construct the transformed curve.
[0007] This technique for performing non-affine transforms is less
than ideal because a large number of data points must be
transformed for very complex curves. In addition, the exact
description of the curve is lost in the transform. This can cause
the curve to appear jagged in the transformed space, especially if
further transforms are performed on the points approximating the
curve.
SUMMARY OF THE INVENTION
[0008] The present invention provides a method and apparatus for
rendering images on a computer screen. Under the invention, a
portion of a base image is described using a path. The path is then
transformed using a non-affine transform to produce a transformed
path. The transformed path is then rendered onto the computer
screen.
[0009] Another aspect of the present invention is a method for
rendering curves of any order and any dimension. In particular, the
present invention provides a means for converting a function of any
order that describes one segment of a curve into a function that
describes a different sized segment or an adjoining segment.
BRIEF DESCRIPTION OF THE DRAWINGS
[0010] FIGS. 1A and 1B show a non-affine transform of a square from
u,v space to x,y space under the prior art.
[0011] FIGS. 2A and 2B show a non-affine transform of a line from
u,v space to x,y space under the prior art.
[0012] FIG. 3A shows a curve in u,v space.
[0013] FIG. 3B shows a series of lines that approximates the curve
of FIG. 3A in u,v space under the prior art.
[0014] FIG. 3C shows a non-affine transform of each of the lines of
FIG. 3B into x,y space under the prior art.
[0015] FIGS. 4A and 4B show a transform of a unit square in u,v
space into a quadrilateral in x,y space that defines a non-affine
transform.
[0016] FIGS. 5A and 5B show a bilinear transform of a line under an
embodiment of the present invention.
[0017] FIGS. 6A and 6B show a bilinear transform of a curve under
an embodiment of the present invention.
[0018] FIGS. 7A, 7B, 7C, and 7D show a curve that is divided into
segments under a rendering embodiment of the present invention.
[0019] FIGS. 8A, 8B, and 8C show a flow diagram for rendering
curves under an embodiment of the invention.
[0020] FIG. 9 shows a block diagram of software and hardware
components associated with an embodiment of the present
invention.
[0021] FIG. 10 shows a block diagram of a suitable computing
environment in which embodiments of the present invention may be
practiced.
DETAILED DESCRIPTION OF ILLUSTRATIVE EMBODIMENTS
[0022] FIGS. 1A and 1B are graphs of two different two-dimensional
spaces that define a base image space and a non-affine transform
image space, respectively. FIG. 1A shows the base image space,
which is described by two orthogonal coordinates u,v and that
contains a square 200 defined by four corner points A.sub.u,v,
B.sub.u,v, C.sub.u,v, and D.sub.u,v. FIG. 1B shows the non-affine
transform space, which is described by two orthogonal coordinates
x,y and that contains a quadrilateral 202 defined by four corner
points A.sub.x,y, B.sub.x,y, C.sub.x,y, and D.sub.x,y. The
differences between quadrilateral 202 and square 200 define the
transform. In other words, passing the points of square 200 through
the transform results in quadrilateral 202. Since the transform may
be described by the four corner points of the quadrilateral, this
type of non-affine transform is sometimes referred to generically
as a "quad" transform.
[0023] FIGS. 2A and 2B show graphs of a line 204 in the base image
space that is transformed into a line 206 in the non-affine
transform space using a technique of the prior art. Under the prior
art, two end points 208 and 210 of the base image are transformed
to form two end points 212 and 214 in the transformed space. These
end points are the connected together to form transformed line 206.
Although this technique provides an accurate transform of line 204
for some non-affine transforms, for most non-affine transforms,
line 206 is different from the curve that would be generated if
every point along line 204 were transformed independently.
[0024] FIGS. 3A, 3B and 3C show graphs depicting the prior art
technique for transforming more complex curves using a non-affine
transform. FIG. 3A shows a curve 220 of the base image. Under the
prior art, curve 220 was transformed by representing the curve as a
series of straight lines 222, 224, 226, and 228, in the base image
space as shown in FIG. 3B. The endpoints of these lines were then
transformed to form a set of transformed endpoints. Thus, endpoints
230, 232, 234, 236, and 238 of FIG. 3B were transformed into
transformed endpoints 240, 242, 244, 246 and 248 of FIG. 3C. These
endpoints were then connected together to form the transformed
curve 250.
[0025] Under the prior art, transformed curve 250 is an inaccurate
approximation of the curve that would be produced if every point
along curve 220 were transformed individually. In addition, because
the curve is converted into a set of selected points, the
description of the curve is lost during the transform process.
Because of this, transformed curve 250 can appear jagged under the
prior art.
[0026] The present invention overcomes the problems of the prior
art by providing a means for transforming a set of equations that
describe curves and lines in a base image instead of the individual
points of the base image. This produces a more accurate non-affine
transform and retains the description of curves in the base image
so that the curve appears smoother in the transform space.
[0027] Two non-affine transforms known as bilinear and perspective
are of particular interest under the present invention. Although
both are "quad" transforms, they each have different properties
from each other. In a bilinear transform, a square box is
transformed into a quadrilateral such that any point along an edge
of the square becomes a point on the edge of the quadrilateral and
the point's relative position on the square edge is the same as its
relative position on the quadrilateral edge. Thus, if a point's
location along a square edge is one quarter the distance of the
square edge, the transformed point's location will be one quarter
the distance of the quadrilateral edge. In a perspective transform,
the two-dimensional base image is transformed into a
three-dimensional image. The three-dimensional image is then
projected onto a two-dimensional surface to generate the
transformed image.
Bilinear Transforms
[0028] Under one embodiment of the present invention, a bilinear
transform is performed by transforming equations that describe the
two coordinates of a curve. In most embodiments, the equations that
describe the coordinates are functions of t, where t has values
between zero and one. Thus, in a u, v coordinate system:
u=.function..sub.u(t) EQ. 1
v=.function..sub.v(t) EQ. 2
[0029] Each coordinate x, y in the transform space is formed by
combining Equations 1 and 2 using coordinate specific transform
functions of the form:
x=uv.alpha..sub.x+u.beta..sub.x+v.gamma..sub.x+.delta..sub.x EQ.
3
y=uv.alpha..sub.y+u.beta..sub.y+v.gamma..sub.y+.delta..sub.y EQ.
4
[0030] where the constants, .alpha..sub.x, .beta..sub.x,
.gamma..sub.x, .delta..sub.x, .alpha..sub.y, .beta..sub.y,
.gamma..sub.y, and .delta..sub.y, are determined from the corner
points of a quadrilateral formed by transforming a base image
square having corners at u,v coordinates of 0,0, 0,1, 1,0, and 1,1.
FIG. 4A shows a graph of such a unit square 260 in u,v space and
FIG. 4B shows a resulting transform quadrilateral 262, which is
defined by corners P.sub.0, P.sub.1, P.sub.2, and P.sub.3. Based on
FIGS. 4A and 4B, the constants of Equations 3 and 4 are defined
as:
.alpha..sub.x=p.sub.0,x-p.sub.1,x-p.sub.2,x+p.sub.3,x EQ. 5
.beta..sub.x=-p.sub.0,x+p.sub.1,x EQ. 6
.gamma..sub.x=-p.sub.0,x+p.sub.2,x EQ. 7
.delta..sub.x=p.sub.0,x EQ. 8
.alpha..sub.y=p.sub.0,y-p.sub.1,y-p.sub.2,y+p.sub.3,y EQ. 9
.beta..sub.y=-p.sub.0,y+p.sub.1,y EQ. 10
.gamma..sub.y=-p.sub.0,y+p.sub.2,y EQ. 11
.delta..sub.y=p.sub.0,y EQ. 12
[0031] where a subscript x designates the x coordinate of the point
and a subscript y designates the y coordinate of the point.
[0032] Using equations 1 and 2 above, a line in the base image can
be defined as:
u=tm.sub.u+n.sub.u EQ. 13
v=tm.sub.v+n.sub.v EQ. 14
[0033] where (n.sub.u, n.sub.v)is the starting point of the line
and (m.sub.u+n.sub.u, m.sub.v+n.sub.v)is the ending point of the
line. An example of a line described by Equations 13 and 14 is
shown as line 300 in FIG. 5A.
[0034] Combining equations 13 and 14 with equations 3 and 4
produces a set of transformed equations:
x=(tm.sub.u+n.sub.u)(tm.sub.v+n.sub.v).alpha..sub.x+(tm.sub.u+n.sub.u).bet-
a..sub.x+(tm.sub.v+n.sub.v).gamma..sub.x+.delta..sub.x EQ. 15
y=(tm.sub.u+n.sub.u)(tm.sub.v+n.sub.v).alpha..sub.y+(tm.sub.u+n.sub.u).bet-
a..sub.y+(tm.sub.v+n.sub.v).gamma..sub.y+.delta..sub.y EQ. 16
[0035] which describe the x and y coordinates of a transformed
curve. Equations 15 and 16 can be re-written as:
x=c.sub.2,xt.sup.2+c.sub.1,xt+c.sub.0,x EQ. 17
y=c.sub.2,yt.sup.2+c.sub.1,yt+c.sub.0,y EQ. 18
[0036] where:
c.sub.2,x=m.sub.um.sub.v.alpha..sub.x EQ. 19
c.sub.1,x=(m.sub.un.sub.v+m.sub.vn.sub.u).alpha..sub.x+m.sub.u.beta..sub.x-
+m.sub.v.gamma..sub.x EQ. 20
c.sub.0,x=n.sub.un.sub.v.alpha..sub.x+n.sub.u.beta..sub.x+n.sub.v.gamma..s-
ub.x+.delta..sub.x EQ. 21
c.sub.2,y=m.sub.um.sub.v.alpha..sub.y EQ. 22
c.sub.1,y=(m.sub.un.sub.v+m.sub.vn.sub.u).alpha..sub.y+m.sub.u.beta..sub.y-
+m.sub.v.gamma..sub.y EQ. 23
c.sub.0,y=n.sub.un.sub.v.alpha..sub.y+n.sub.u.beta..sub.y+n.sub.v.gamma..s-
ub.y+.delta..sub.y EQ. 24
[0037] Equations 17 and 18 show that a bilinear transform of a
straight line results in a second order curve under the present
invention. FIG. 5B shows a graph of a second order curve 302
produced by performing a bilinear transform of straight line 300 of
FIG. 5A. This second order curve may be described using a Bezier
notation in which the curve is described relative to a set of three
control points q.sub.0, q.sub.1, and q.sub.2. Using the Bezier
notation, equations 17 and 18 become:
x=q.sub.0,x(1-t).sup.2+q.sub.1,x2t(1-t)+q.sub.2,xt.sup.2 EQ. 25
y=q.sub.0,y(1-t).sup.2+q.sub.1,y2t(1-t)+q.sub.2,yt.sup.2 EQ. 26
[0038] where 1 q 0 , x = c 0 , x EQ . 27 q 1 , x = c 0 , x + c 1 ,
x 2 EQ . 28 q 2 , x = c 0 , x + c 1 , x + c 2 , x EQ . 29 q 0 , y =
c 0 , y EQ . 30 q 1 , y = c 0 , y + c 1 , y 2 EQ . 31 q 2 , y = c 0
, y + c 1 , y + c 2 , y EQ . 32
[0039] Based on equations 3 and 4, it can be seen that a path of
order n in the base image becomes a path of order 2n in the
transformed image. Thus, under embodiments of the present
invention, cubic curve 320 of FIG. 6A, which is described by:
u=t.sup.3a.sub.3,u+t.sup.2a.sub.2,u+ta.sub.1,u+a.sub.0,u EQ. 33
v=t.sup.3a.sub.3,v+t.sup.2a.sub.2,v+ta.sub.1,v+a.sub.0,v EQ. 34
[0040] becomes sixth order curve 322 of FIG. 6B when it is
transformed, where sixth order curve 322 is represented by the
path:
x=c.sub.6,xt.sup.6+c.sub.5,xt.sup.5+c.sub.4,xt.sup.4+c.sub.3,xt.sup.3+c.su-
b.2,xt.sup.2+c.sub.1,xt+c.sub.0,x EQ. 35
y=c.sub.6,yt.sup.6+c.sub.5,yt.sup.5+c.sub.4,yt.sup.4+c.sub.3,yt.sup.3+c.su-
b.2,yt.sup.2+c.sub.1,yt+c.sub.0,y EQ. 36
[0041] with
c.sub.6,x=a.sub.3ua.sub.3v.alpha..sub.x EQ. 37
c.sub.5,x=(a.sub.3ua.sub.2v+a.sub.2ua.sub.3v).alpha.x EQ. 38
c.sub.4,x=(a.sub.3ua.sub.1v+a.sub.2ua.sub.2v+a.sub.1ua.sub.3v).alpha..sub.-
x EQ. 39
c.sub.3,x=(a.sub.3ua.sub.0v+a.sub.2ua.sub.1v+a.sub.1ua.sub.2v+a.sub.0ua.su-
b.3v).alpha..sub.x+a.sub.3u.beta..sub.x+a.sub.3v.gamma..sub.x EQ.
40
c.sub.2,x=(a.sub.2ua.sub.0v+a.sub.1ua.sub.1v+a.sub.0ua.sub.2v).alpha..sub.-
x+a.sub.2u.beta..sub.x+a.sub.2v.gamma..sub.x EQ. 41
c.sub.1,x=(a.sub.1ua.sub.0v+a.sub.0ua.sub.1v).alpha..sub.x+a.sub.1u.beta..-
sub.x+a.sub.1v.gamma..sub.x EQ. 42
c.sub.0,x=a.sub.0ua.sub.0v.alpha..sub.x+a.sub.0u.beta..sub.x+a.sub.0v.gamm-
a..sub.x+.delta..sub.x EQ. 43
c.sub.6,y=a.sub.3ua.sub.3v.alpha..sub.y EQ. 44
c.sub.5,y=(a.sub.3ua.sub.2v+a.sub.2ua.sub.3v).alpha..sub.y EQ.
45
c.sub.4,y=(a.sub.3ua.sub.1v+a.sub.2ua.sub.2v+a.sub.1ua.sub.3v).alpha..sub.-
y EQ. 46
c.sub.3,y=(a.sub.3ua.sub.0v+a.sub.2ua.sub.1v+a.sub.1ua.sub.2v+a.sub.0ua.su-
b.3v).alpha..sub.y+a.sub.3u.beta..sub.y+a.sub.3v.gamma..sub.y EQ.
47
c.sub.2,y=(a.sub.2ua.sub.0v+a.sub.1ua.sub.1v+a.sub.0ua.sub.2v).alpha..sub.-
y+a.sub.2u.beta..sub.y+a.sub.2v.gamma..sub.y EQ. 48
c.sub.1,y=(a.sub.1ua.sub.0v+a.sub.0ua.sub.1v).alpha..sub.y+a.sub.1u.beta..-
sub.y+a.sub.1v.gamma..sub.y EQ. 49
c.sub.0,y=a.sub.0ua.sub.0v.alpha..sub.y+a.sub.0u.beta..sub.y+a.sub.0v.gamm-
a..sub.y+.delta..sub.y EQ. 50
Perspective Transform
[0042] Under other embodiments of the invention, a perspective
transform is performed on a path defined in the u,v plane to
produce a transformed path in the x,y plane. This involves first
transforming the path into a three-dimensional x', y', w' space
then projecting the path in the three-dimensional space onto the
x,y plane.
[0043] The transform into the three-dimensional space can be
represented by a matrix expression: 2 ( x ' y ' w ' ) = ( u v 1 ) (
m u , x m u , y m u , w m v , x m v , y m v , w m 1 , x m 1 , y m 1
, w ) EQ . 51
[0044] where u and v are each functions of t. The projection onto
the xy plane is then formed by dividing the equations for the x'
and y' coordinates by the equation for the w' coordinate: 3 x = x '
w ' EQ . 52 y = y ' w ' EQ . 53
[0045] From equations 51, 52, and 53 it can be seen that if u and v
are described by linear equations, then x and y will also be
described by the ratio of linear equations. In fact, if u and v are
functions of order n, then x and y are rational functions of order
n.
Rendering Bezier Curves
[0046] Once the paths have been transformed, either through a
bilinear or perspective transform, the transformed equations for x
and y must be rendered into individual pixels on a display. When x
and y are linear equations, it is relatively easy to convert the
equations into individual pixels. However, for more complex x and y
equations, the determination of individual pixels is
computationally intensive.
[0047] Under the prior art, higher order curves are rendered by
approximating the higher order curve as a series of lines. Although
techniques for identifying these lines have been discussed in the
prior art, specific examples have only been given for third order
functions. From the examples, those skilled in the art can generate
the lines for higher order curves. However, this involves
generating a new set of rendering equations for each order curve, a
task that is typically done by hand. The prior art does not provide
an efficient means for generating the equations needed to render
curves of any order. The present invention addresses this problem
by providing a method for generating the equations needed to render
any order curve.
[0048] Any order curve can be described using a Bezier notation.
Under that notation, a curve r of order n is described by: 4 r = i
= 0 n B i n ( t ) q i EQ . 54
[0049] where q.sub.i are the Bzier control points for curve r, and
B.sub.i.sup.n are Bernstein polynomials of n-th order that are
defined as: 5 { B i n ( t ) = ( n i ) t i ( 1 - t ) n - i for 0 i n
B i n ( t ) = 0 for i < 0 or i > n EQ . 55 where ( n i ) = n
! i ! ( n - i ) ! EQ . 56
[0050] Under this description of the curve, the locations of the
control points, q.sub.i, define the shape of the curve. In
particular, q.sub.0 and q.sub.n define the start and end of the
curve. Note that the control points have the same dimensions as the
curve they represent. Thus, for the two-dimensional curves produced
by a bilinear transform, the control points have two dimensions and
for the three-dimensional curves produced by a perspective
transform, the control points have three dimensions. Our rendering
technique can be applied to Bzier curves of any order and any
dimensions.
[0051] The general technique of the prior art for determining the
series of lines to approximate a curve, r, is described below with
reference to a curve 400 shown in FIGS. 7A through 7D, and a flow
diagram shown in FIGS. 8A through 8C.
[0052] The process of FIG. 8A begins at start 500 and continues at
step 502 where a variable, NSTEPS, is set to one. "NSTEPS"
represents the number of lines that will need to be drawn given the
current segment size. Initially, the current segment size is set to
the entire length of the curve.
[0053] At step 504, the curve over the current segment is examined
to determine if it may be approximated by a straight line. To
decide this, a straight line is drawn between control points
q.sub.0 and q.sub.n, and a distance is calculated between the
straight line and the other control points that define the curve.
For example, in FIG. 7A a line 406 is drawn between control points
402 and 404. In most embodiments where the curve is defined in
three dimensions, the three-dimensional control points are
converted into two-dimensional control points using equations 52
and 53 above before the base line is drawn between the end control
points. Thus, the distances are calculated using two-dimensional
control points instead of three-dimensional control points. For a
higher dimensional curve, the control points projected to a
two-dimensional plane are used to calculate the distances. One
rational for adopting this approach is that the curve is displayed
in two-dimensions so that distances in the third dimension are
irrelevant to approximating the curve with a straight
two-dimensional line.
[0054] In one embodiment, the distance between a control point and
the base line is measured along a line that is perpendicular to the
base line and that intersects the control point. In some
embodiments, the distance is determined by calculating a distance
based on the x coordinate and a distance based on the y coordinate.
The distance based on x coordinate is the distance between the
point's x coordinate, q.sub.x,i, and a line drawn between the
endpoints of the curve, r.sub.x, describing the x coordinate. The y
coordinate distance is the distance between the y coordinate of the
point, q.sub.y,i, and a line drawn between the endpoints of the
curve, r.sub.y, describing the y coordinates. The distance with the
larger magnitude can be used as the distance between the control
point and the line or the square root of the sum of the squares of
these two distances can be used as the distance between the control
point and the line. In general, the selected distance is known as
an error vector, with each control point having a separate error
vector.
[0055] At step 506 of FIG. 8A, the error vectors are compared
against a threshold to determine if any of the vectors exceeds the
threshold. If one of the vectors exceeds the threshold, the line is
not considered to be a sufficient approximation for the curve and
the process continues at step 508.
[0056] In step 508, the equations describing the curve are altered
so that they are functions of t/2 instead of functions of t. This
produces equations that describe the first half of the curve. For
example, in FIG. 7B, the new equations describe curve segment 408
such that q.sub.0 of the new equations still corresponds to point
402 of curve 400 but q.sub.n now corresponds to point 416, midway
along curve 400. A technique for generating these "half-step"
equations for any order curve is described below.
[0057] With the new segment size, the number of lines that needs to
be generated doubles. Thus, in step 510, NSTEPS is doubled. The
process then returns to step 504 to determine the error vectors for
the new curve segment.
[0058] If none of the error vectors of a current curve segment
exceed the threshold at step 506, the process continues at step 513
of FIG. 8B. In step 513, the last operation performed to produce
the function describing the current curve segment is checked to see
if it was a half-step operation. If it was, this is the largest
segment that can be represented by a straight line and the process
continues at state 516 where the line segment between the end
points of the curve is stored in memory for later rendering. For
example, if the last operation was a half-step operation to form
the functions that describe curve segment 418 of FIG. 7C, line 420
would be stored.
[0059] If the last operation performed was not a half-step
operation at step 513, then it is possible that a segment twice the
size of the current segment could be represented by a straight
line.
[0060] Before doubling the segment size, the present invention
checks NSTEPS to see if it is an even number at step 526. If NSTEPS
is odd at step 526, such as for curve segment 424 of FIG. 7C, the
segment should not be doubled in size to see if a larger segment
can be represented by a straight line. As such, the process
continues at step 516 where the straight line for the current
segment is stored in memory for later rendering. For example, line
426 of FIG. 7C would be stored for segment 424.
[0061] If NSTEPS is even at step 526, the equations describing the
curve are changed so that they are functions of 2t instead of t at
step 528. This is shown in FIG. 7D where the equations that
describe curve segment 428, between points 416 and 432, are changed
to describe a curve segment twice as large between points 416 and
404. A method of generating an equation based on 2t from an
equation based on t for any order curve is described in more detail
below.
[0062] With the doubling of the segment size, the number of lines
that must be drawn is cut in half. Thus, at step 530, NSTEPS is
divided by two. The process then returns to step 504 of FIG. 8A to
determine if the larger segment may be approximated by a straight
line such as line 438 of FIG. 7D.
[0063] After a line is stored for a curve segment at step 516 of
FIG. 8C, NSTEPS is decremented by one at step 520. NSTEPS is then
checked to see if it is greater than zero. If NSTEPS is equal to
zero, the end of the curve has been reached and the process ends at
step 524. If NSTEPS is greater than zero, the process continues at
step 525, where the equations describing the last curve segment are
changed to describe the next curve segment. This is achieved by
changing the equations so that they are based on t+1 instead of t.
A technique for changing the equations in this manner for any order
curve is discussed further below. In general, step 525 can be
referred to as a move operation. An example of a move operation is
shown in FIG. 7C where the equations are changed from describing
segment 418 to describing segment 424.
[0064] After moving to the next segment, the process returns to
step 504 of FIG. 8A to determine if the new segment can be
represented by a straight line.
[0065] As mentioned above, one aspect of the present invention is a
method for generating the half-step, double-step and move functions
for any order function that defines a curve segment. This method
simplifies the creation of these functions for larger order curves,
such as the sixth order curve generated above by passing a cubic
curve through a bilinear transform.
[0066] Under one embodiment of the present invention, a single
method is used to generate both the half-step and double step
functions. In the prior art, generating the functions involves
taking a current Bzier function that is in terms of t, substituting
t/c for t, and reorganizing the function so that it is once again
in terms of just t. This reorganization changes the control points
of the Bzier function, but the order of the function remains the
same. Under the method of the present invention, the reorganization
of the function is simplified to a simple matrix calculation for
converting the previous control points into a set of new control
points.
[0067] Under one embodiment, the conversion matrix used in these
calculations is formed by first re-writing the Bezier function for
the curve in terms of a new variable {tilde over (t)} and a new set
of control points {tilde over (q)}.sub.i. Since both functions
describe the same curve, they can be set equal to each other as: 6
i = 0 n B i n ( t ) q i = j = 0 n B j n ( t ~ ) q ~ j EQ . 57
[0068] Setting t=c{tilde over (t)} and using the identity: 7 B i n
( c t ~ ) = j = 0 n B i j ( c ) B j n ( t ~ ) EQ . 58
[0069] equation 57 provides the relationship between the control
points of the two different equations as: 8 q ~ j = i = 0 j B i j (
c ) q i EQ . 59
[0070] If the coordinates of each control point are written in
matrix form such that: 9 Q x = ( q 0 , x q 1 , x q n , x ) , Q y =
( q 0 , y q 1 , y q n , y ) , Q ~ x = ( q ~ 0 , x q ~ 1 , x q ~ n ,
x ) , and Q ~ y = ( q ~ 0 , y q ~ 1 , y q ~ n , y ) EQ . 60
[0071] then the relationship of equation 59 can be written as:
{tilde over (Q)}.sub.x=D(c)Q.sub.x and {tilde over
(Q)}.sub.y=D(c)Q.sub.y EQ. 61
[0072] where D(c) is a matrix with ij components that are given
by:
(D(c)).sub.ij=B.sub.j.sup.i(c) EQ. 62
[0073] For a half-step conversion, in which a function that
describes a curve segment is converted into a function that
describes half of the curve segment, c is equal to 1/2. Using
Equation 62, matrix D(c) can be easily generated for any order
curve, thus providing a simple means for determining the conversion
equations for any order curve. For example, a sixth order curve has
a half-step matrix D(1/2) of: 10 D ( 1 2 ) = [ 1 0 0 0 0 0 0 1 2 1
2 0 0 0 0 0 1 4 1 2 1 4 0 0 0 0 1 8 3 8 3 8 1 8 0 0 0 1 16 1 4 3 8
1 4 1 16 0 0 1 32 5 32 5 16 5 16 5 32 1 32 0 1 64 3 32 15 64 5 16
15 64 3 32 1 64 ] EQ . 63
[0074] Similarly, the double-step matrix D(2) can be easily
calculated for any order curve using equation 62. For example, for
a sixth order curve, D(2) is easily calculated as: 11 D ( 2 ) = [ 1
0 0 0 0 0 0 - 1 2 0 0 0 0 0 1 - 4 4 0 0 0 0 - 1 6 - 12 8 0 0 0 1 -
8 24 - 32 16 0 0 - 1 10 - 40 80 - 80 32 0 1 - 12 60 - 160 240 - 192
64 ] EQ . 64
[0075] If the curves are described as an n-th order polynomial
instead of using the Bezier description, each curve, r, is
represented as: 12 r x = i = 0 n a i , x t i EQ . 65 r y = i = 0 n
a i , y t i EQ . 66
[0076] If the curves resented by equations 65 and 66 are described
in terms of a new variable {tilde over (t)}and a new set of
parameters .sub.i, the following equations are produced: 13 i = 0 n
a i , x t i = i = 0 n a ~ i , x t ~ i EQ . 67 i = 0 n a i , y t i =
i = 0 n a ~ i , y t ~ i EQ . 68
[0077] Setting t equal to c{tilde over (t)}, in equations 67 and 68
produces the following relationships between the parameters:
.sub.i,x=c.sup.ia.sub.i,x EQ. 69
.sub.i,y=c.sup.ia.sub.i,y EQ. 70
[0078] which can be written in matrix notation as:
.sub.x=D.sub.p(c)A.sub.x EQ. 71
.sub.y=D.sub.p(c)A.sub.y EQ. 72
[0079] where 14 A ~ x = ( a ~ 0 , x a ~ 1 , x a ~ n , x ) , A ~ y =
( a ~ 0 , y a ~ 1 , y a ~ n , y ) , EQ . 73 A x = ( a 0 , x a 1 , x
a n , x ) , and A y = ( a 0 , y a 1 , y a n , y ) and D p ( c ) = [
1 0 0 0 0 0 c 0 0 0 0 0 c 2 0 0 0 0 0 0 0 0 0 0 c n ] EQ . 74
[0080] When a curve is defined in higher dimensions than two, each
component will follow the same relation as Equations 71 and 72.
[0081] Embodiments of the present invention also provide a means
for generating the move functions that are the result of changing a
current function from representing one curve segment to
representing a neighboring curve segment of equal length. Using
equation 57 above, with t={tilde over (t)}+1, the identity: 15 B j
n ( t ~ + 1 ) = ( - 1 ) n - j i = n - j n ( i n - j ) 2 i - ( n - j
) B i n ( t ~ ) EQ . 75
[0082] can be used to generate the following relationship between
the control points of the two functions: 16 q ~ j = i = n - j n ( -
1 ) n - i ( j n - i ) 2 j - ( n - i ) q i EQ . 76
[0083] This can be described in a matrix form as:
{tilde over (Q)}=S.sup.(n)Q EQ. 77
[0084] where 17 Q x = ( q 0 , x q 1 , x q n , x ) , Q y = ( q 0 , y
q 1 , y q n , y ) , Q ~ x = ( q ~ 0 , x q ~ 1 , x q ~ n , x ) , and
Q ~ y = ( q ~ 0 , y q ~ 1 , y q ~ n , y ) EQ . 78
[0085] and the ijth element of S.sup.(n), S.sub.ij.sup.n, is
defined as: 18 S ij n ( S ( n ) ) ij = ( - 1 ) n - j ( i n - j ) 2
i - ( n - j ) EQ . 79
[0086] Thus, embodiments of the present invention provide a simple
means for generating a matrix to convert a function from
representing one curve segment to representing a neighboring curve
segment.
[0087] If the function for the curve segment is in the form of a
polynomial, equations 67 and 68 above can be used to generate the
transform matrix by setting t={tilde over (t)}+1. This produces a
transform matrix S.sub.p that has ijth components defined as: 19 S
pij = ( j i ) EQ . 80
[0088] and which can be used to determine the parameters .sub.x,
.sub.y for the new curve segment from the parameters A.sub.x,
A.sub.y for the current segment using:
.sub.x=S.sub.pA.sub.x EQ. 81
.sub.y=S.sub.pA.sub.y EQ. 82
[0089] where 20 A ~ x = ( a ~ 0 , x a ~ 1 , x a ~ n , x ) , A ~ y =
( a ~ 0 , y a ~ 1 , y a ~ n , y ) , A x = ( a 0 , x a 1 , x a n , x
) , and A y = ( a 0 , y a 1 , y a n , y ) EQ . 83
[0090] Embodiments of the present invention also provide a method
for converting a polynomial representation of a path into a Bzeir
representation of the path. The method involves generating a
conversion matrix that is determined by setting the Bzier
representation of the path found in Equation 54 equal to the
polynomial representation of the path found in Equations 65 and 66
above. This produces: 21 r = i = 0 n B i n ( t ) q i = j = 0 n a j
t j EQ . 84
[0091] Using the identity: 22 t j = 1 ( n j ) i = j n ( i j ) B i n
( t ) EQ . 85
[0092] equation 84 can be modified to produce: 23 q i = j = 0 n H
ij n a j EQ . 86
[0093] where 24 H ij n = ( i j ) ( n j ) EQ . 87
[0094] Using equation 87, an n-by-n matrix H can be created to
convert the polynomial coefficients into a set of Bzier control
points through the matrix equations:
Q.sub.x=HA.sub.x EQ. 88
Q.sub.y=HA.sub.y EQ. 89
[0095] where 25 Q x = ( q 0 , x q 1 , x q n , x ) , Q y = ( q 0 , y
q 1 , y q n , y ) , A x = ( a 0 , x a 1 , x a n , x ) , and A y = (
a 0 , y a 1 , y a n , y ) EQ . 90
[0096] An inverse relationship is also provided for converting
Bzier control points into polynomial coefficients that describe the
same path. That inverse relationship is:
A.sub.x=GQ.sub.x EQ. 91
A.sub.y=GQ.sub.y EQ. 92
[0097] where 26 Q x = ( q 0 , x q 1 , x q n , x ) , Q y = ( q 0 , y
q 1 , y q n , y ) , A x = ( a 0 , x a 1 , x a n , x ) , and A y = (
a 0 , y a 1 , y a n , y ) EQ . 93
[0098] and the ij elements of G are defined as: 27 G ij n = ( - 1 )
i - j ( i j ) ( n i ) EQ . 94
[0099] Equations 62 and 79 above can also be represented as special
cases for a more generalized description of selecting a new line
segment. Specifically, we can describe t as extending from a point
t.sub.1 to a point t.sub.2 using the following equation:
t=t.sub.1(1-{tilde over (t)})+t.sub.2{tilde over (t)} EQ. 95
[0100] where t goes from t.sub.1 to t.sub.2 as {tilde over (t)}
goes from 0 to 1.
[0101] Using the following identity: 28 B j n ( t 1 ( 1 - t ~ ) + t
2 t ~ ) = i = 0 n k = 0 j B k n - 1 ( t 1 ) B j - k i ( t 2 ) B i n
( t ~ ) EQ . 96
[0102] the transformation rule for the coefficients are: 29 q ~ j =
i = 0 n k = 0 i B k n - j ( t 1 ) B i - k j ( t 2 ) q i EQ . 97
[0103] Equation 97 can be rewritten in terms of matrices as:
{tilde over (Q)}=K.sup.(n)(t.sub.1, t.sub.2)Q EQ. 98
[0104] with the matrix element given as: 30 K ij n ( K ( n ) ( t 1
, t 2 ) ) ij = k = 0 j B k n - i ( t 1 ) B j - k i ( t 2 ) EQ .
99
[0105] Using this generalized description, Equation 62 can be seen
as a specific case where:
D.sub.ij(c)=K.sub.ij.sup.n(0, c) EQ. 100
[0106] and Equation 79 can be viewed as a specific case where:
S.sub.ij.sup.n=K.sub.ij.sup.n(1,2) EQ. 101
API For Transforming and Rendering Paths
[0107] Some embodiments of the present invention provide
Application Programming Interfaces (API) that transform a path
using the perspective or bilinear transform discussed above and
then render the transformed path using the rendering technique
described above. Under one such embodiment, an API for transforming
and drawing a path is invoked using the API call DrawWarpPath (p,
pen, dstPoints, dstCount, srcRect, srcUnit, quadMode) where p is
the path to be transformed, pen is a pen type to be used when
drawing the path, dstPoints is a list of edges for a quadrilateral
that defines the transform, dstCount is three when the defining
quadrilateral is a parallelogram and four otherwise, srcRect are
points that describe a source rectangle in terms of a unit measure
found in srcUnit, and quadMode is either bilinear or perspective.
In other embodiments, an API for transforming and filling a path is
invoked using the API call FillWarpPath(p, b, dstPoints, dstCount,
srcRect, srcUnit, quadMode) where the parameters that are found in
both DrawWarpPath and FillWarpPath have the same properties and the
parameter b in FillWarpPath is a brush style that describes the
texture, and color to be used to fill the path. In some
embodiments, that path parameter passed to the API is a list of
paths to be rendered on the screen.
[0108] FIG. 9 shows a block diagram of software and hardware
components that are utilized with the API's described above. In
FIG. 9, an application 600 calls a transform API 602, such as
DrawWarpPath and FillWarpPath above. In the embodiment of FIG. 9,
the transform API is packaged as part of a graphics device
interface 604 (GDI.DLL) within an operating system 606 such as
Windows 95.RTM., Windows 98.RTM., Windows.RTM. 2000, or Windows
NT.RTM. from Microsoft Corporation of Redmond, Washington.
Transform API 602 transforms the path provided by the application
and renders the transformed path into a back buffer 608 of a
display memory 610. Back buffer 608 is periodically swapped with a
forward buffer 612, which is accessed by a display driver 614 to
provided display values to a display 616 thereby displaying the
transformed path.
[0109] FIG. 10 and the related discussion are intended to provide a
brief, general description of a suitable computing environment in
which the invention may be implemented. Although not required, the
invention will be described, at least in part, in the general
context of computer-executable instructions, such as program
modules, being executed by a personal computer. Generally, program
modules include routine programs, objects, components, data
structures, etc. that perform particular tasks or implement
particular abstract data types. Moreover, those skilled in the art
will appreciate that the invention may be practiced with other
computer system configurations, including hand-held devices,
multiprocessor systems, microprocessor-based or programmable
consumer electronics, network PCs, minicomputers, mainframe
computers, and the like. The invention may also be practiced in
distributed computing environments where tasks are performed by
remote processing devices that are linked through a communications
network. In a distributed computing environment, program modules
may be located in both local and remote memory storage devices.
[0110] With reference to FIG. 10, an exemplary system for
implementing the invention includes a general purpose computing
device in the form of a conventional personal computer 20,
including a processing unit (CPU) 21, a system memory 22, and a
system bus 23 that couples various system components including the
system memory 22 to the processing unit 21. The system bus 23 may
be any of several types of bus structures including a memory bus or
memory controller, a peripheral bus, and a local bus using any of a
variety of bus architectures. The system memory 22 includes read
only memory (ROM) 24 and random access memory (RAM) 25. A basic
input/output (BIOS) 26, containing the basic routine that helps to
transfer information between elements within the personal computer
20, such as during start-up, is stored in ROM 24. The personal
computer 20 further includes a hard disk drive 27 for reading from
and writing to a hard disk (not shown), a magnetic disk drive 28
for reading from or writing to removable magnetic disk 29, and an
optical disk drive 30 for reading from or writing to a removable
optical disk 31 such as a CD ROM or other optical media. The hard
disk drive 27, magnetic disk drive 28, and optical disk drive 30
are connected to the system bus 23 by a hard disk drive interface
32, magnetic disk drive interface 33, and an optical drive
interface 34, respectively. The drives and the associated
computer-readable media provide nonvolatile storage of computer
readable instructions, data structures, program modules and other
data for the personal computer 20.
[0111] Although the exemplary environment described herein employs
the hard disk, the removable magnetic disk 29 and the removable
optical disk 31, it should be appreciated by those skilled in the
art that other types of computer readable media which can store
data that is accessible by a computer, such as magnetic cassettes,
flash memory cards, digital video disks, Bernoulli cartridges,
random access memories (RAMs), read only memory (ROM), and the
like, may also be used in the exemplary operating environment.
[0112] A number of program modules may be stored on the hard disk,
magnetic disk 29, optical disk 31, ROM 24 or RAM 25, including an
operating system 35, one or more application programs 36, other
program modules 37, and program data 38. A user may enter commands
and information into the personal computer 20 through local input
devices such as a keyboard 40, pointing device 42 and a microphone
43. Other input devices (not shown) may include a joystick, game
pad, satellite dish, scanner, or the like. These and other input
devices are often connected to the processing unit 21 through a
serial port interface 46 that is coupled to the system bus 23, but
may be connected by other interfaces, such as a sound card, a
parallel port, a game port or a universal serial bus (USB). A
monitor 47 or other type of display device is also connected to the
system bus 23 via an interface, such as a video adapter 48. In
addition to the monitor 47, personal computers may typically
include other peripheral output devices, such as a speaker 45 and
printers (not shown).
[0113] The personal computer 20 may operate in a networked
environment using logic connections to one or more remote
computers, such as a remote computer 49. The remote computer 49 may
be another personal computer, a hand-held device, a server, a
router, a network PC, a peer device or other network node, and
typically includes many or all of the elements described above
relative to the personal computer 20, although only a memory
storage device 50 has been illustrated in FIG. 10. The logic
connections depicted in FIG. 10 include a local area network (LAN)
51 and a wide area network (WAN) 52. Such networking environments
are commonplace in offices, enterprise-wide computer network
Intranets, and the Internet.
[0114] When used in a LAN networking environment, the personal
computer 20 is connected to the local area network 51 through a
network interface or adapter 53. When used in a WAN networking
environment, the personal computer 20 typically includes a modem 54
or other means for establishing communications over the wide area
network 52, such as the Internet. The modem 54, which may be
internal or external, is connected to the system bus 23 via the
serial port interface 46. In a network environment, program modules
depicted relative to the personal computer 20, or portions thereof,
may be stored in the remote memory storage devices. It will be
appreciated that the network connections shown are exemplary and
other means of establishing a communications link between the
computers may be used. For example, a wireless communication link
may be established between one or more portions of the network.
[0115] Although the present invention has been described with
reference to particular embodiments, workers skilled in the art
will recognize that changes may be made in form and detail without
departing from the spirit and scope of the invention.
* * * * *