Using an electronic device, a user can direct the device to display different types of content. For example, a user can direct the device to operate an application by which a user can provide a text input for display by the application (e.g., a word processing application). As another example, a user can direct the device to operate an application by which a user can define graphical elements for display. The graphical elements can include one or more shapes (e.g., predefined shape templates such as, for example, circles, squares, rectangles, polygons, or shapes having curved surfaces). Several graphical elements can be overlaid or combined to form complex graphical shapes and entities displayed by the device.
In some embodiments, a user can direct an electronic device to display a graphical element that includes a curved line. For example, a user can provide an input directing an application to draw a curved line on a display (e.g., a user provides a touch input on a touch surface, or a user controls a cursor moving on the display). The electronic device can detect a succession of points selected or identified by the user using any suitable approach. In some embodiments, the electronic device can detect individual points provided by a user at a predefined rate, or at a variable rate. The electronic device can provide any type of line between adjacent points. In some embodiments, the electronic device can define discontinuous segments between adjacent points. In some embodiments, the electronic device can process a completed line to define a smooth curve going through each of the points on the line.
While the user provides an input for drawing the line, however, the electronic device may not know how to draw a curved line through individual points selected by the user. The electronic device can instead initially display a sequence of distinct segments angled relative to one another at each interface between segments. Only once all of the points forming the line have been provided (e.g., once the user stops providing an input corresponding to an instruction to draw a line) can the electronic device apply a smoothing function to the drawn line to define a continuous or partially continuous line. This approach, however, can be limiting to a user, as a user may be required to stop drawing a line to determine the exact path of the line. When a user wishes to follow a predetermined path having several curved regions, a user may then be forced to guess at a path (e.g., use trial and error) or define a sequence of shorter, curved lines following the path that are later connected to each other, possible adversely affecting the smoothness of the interface between the shorter curved lines.
This is directed to systems, methods and computer-readable media for dynamically drawing a smooth curved line while a user defines additional points of the line. In particular, this is directed to applying a Bezier function to all but the last line segments of a line to preemptively smooth a curved line as the line is being drawn.
An electronic device can receive an instruction to a draw a curved line on a display from a user. As the user provides the instruction, the electronic device can detect a sequence of points or locations on the display through which the user wishes the line to go. The electronic device can detect points at any suitable rate including, for example, based on a time interval, motion detection, a user-provided instruction, or any other suitable interval.
Initially, the electronic device can connect adjacent points using straight line segments at an angle relative to one another. To allow the user to see a curve that more accurately represents the provided instruction in real time, the electronic device can define, for each segment, a curved line to replace the straight segment between the points. Successive curved lines can be selected to define a substantially smooth path between several points. In some embodiments, the electronic device can identify one or more segments, or one or more interfaces between segments for which it may be desirable not to provide a smooth curved line.
The electronic device can define a curved line to replace a segment using any suitable approach. In some embodiments, the electronic device can define a Bezier curve for a segment, where the detected points constitute ends of the Bezier curve, and control points defined by an algorithm based on the shape of the individual segments can provide intermediate points controlling the curvature and shape of the Bezier curve. The electronic device can consider any suitable number of segments before and/or after a particular segment for which a Bezier curve is defined. In some embodiments, the electronic device can consider three segments total (e.g., one before and one after the particular segment).
As the electronic device detects a point of the curve and defines a segment, the electronic device can define a new Bezier curve for the segment. In addition, the electronic device can adjust a Bezier curve for one or more (e.g., up to two) previous segments for which a Bezier curve was defined. The defined Bezier curves can be displayed instead of the initial segments to better illustrate the curve drawn by the user.
Based on the variables used for the Bezier curve, a Bezier curve defined for particular segment away from a changing end of the curve can remain the same as new points are detected for the curve. For example, a Bezier curve defined for any segment but the last two of the curve can be unchanged by additional segments added to the curve. To allow the curve to be smoothed dynamically without requiring intensive processing to re-draw or re-smooth the entire curve, the electronic device can store in cache all Bezier curves for segments other than those for which the calculated Bezier curves may still change (e.g., the last two). When a new segment is added, Bezier curves for the last two segments can be re-calculated based on the new segment, and at least one of the re-calculated Bezier curves can be provided to cache (e.g., the segment that is now one of the last three, and for which the calculated Bezier curve will not change). The Bezier curves for the last two segments can remain dynamically stored, as they may be adjusted based on additional segments of the curve.
In some embodiments, the electronic device can compare angles between adjacent segments to determine whether a user intended to draw a sharp angle in the curve (e.g., an angle that should not be rounded). For example, the electronic device can determine whether an angle between segments is within a threshold amount of 180 degrees (e.g., pi radians). If the electronic device determines that the angle is not within the threshold amount, the electronic device can retain the sharp angle, and smooth the segments before and after the angle using a Bezier transformation.
The above and other features of the present invention, its nature and various advantages will be more apparent upon consideration of the following detailed description, taken in conjunction with the accompanying drawings in which:
This is directed to seamlessly smoothing out in real time curves drawn on a display by a user. In particular, this is directed to applying a Bezier transform to individual segments of a curve to round the curve as the curve is drawn.
Using input interfaces of electronic device, a user can provide different types of inputs to the device. In some cases, users can provide textual inputs, such that text characters (e.g., letters, number and symbols) selected by a user appear on a device display. In some cases, a user can instead or in addition provide an input for selecting one or more options provided by a device, for example on a display. In still other cases, a user can provide an instruction for displaying non-textual elements on a display. For example, a user can provide an instruction for displaying one or more graphical elements on a display including, for example, shapes or linear elements. In some cases, a displayed shape can be defined as a combination of several linear elements that intersect, or as a pre-defined closed line pattern.
A user can direct a device to display a linear graphical element using several different approaches. In some embodiments, a user can direct an electronic device to implement an application for drawing graphical elements on the display. Using the application, the user can select one or more drawing tools and corresponding settings to draw a graphical element on the display. For example, a user can select a line type, thickness, color, sample rate, or other properties of a defined line element. Using the drawing tool, a user can select a start point for the line element, and provide a sequence of inputs defining a path for the line element from the start point using an input interface. For example, the user can control the movement of a cursor or other line drawing tool from the start point to an end point along a user defined path.
As the user provides an input corresponding to the path of the line element, the electronic device can sample individual points over time to define the line. The electronic device can sample points at any suitable rate including, for example, a constant rate or a variable rate. In some cases, points can be sampled at predefined time intervals (e.g., every 100 ms), intervals selected based on the distance covered (e.g., a maximum number of pixels or measured distance between points), based on the output of a motion sensing component (e.g., in response to detecting a particular amount of movement), or combinations of these. The electronic device can store a sequence of points using any suitable approach including, for example, in a list or array of coordinates.
As the electronic device defines individual points of a line, the electronic device can display several lines connecting the defined points. In some cases, the electronic device can initially drawn and display straight lines between the points.
The electronic device can connect the individual points to draw a line on the display. In particular, the electronic device can provide straight line segment 103 between points 102 and 104, segment 105 between points 104 and 106, segment 107 between points 106 and 107, segment 109 between points 108 and 110, and segment 111 between points 110 and 112. The combined straight line segments can define line 101, which the electronic device can display to approximate curved line 120 provided by the user.
The electronic device can use one of several approaches to replace line 101 with a line that more closely matches line 120. In one implementation, the electronic device can increase the sample rate for individual points on the line. By identifying additional points along line 120, the electronic device can draw a larger number of straight line segments that are shorter, and therefore more closely match the shape of curve 120. This approach, however, can require more processing and storage resources, which can restrict the usefulness of the device. Alternatively, the electronic device can apply a transformation to line 101 to replace the combination of segments with a continuous curved line. For example, the electronic device can identify the sequence of points corresponding to line 120, and apply a Bezier transform to the points to define a Bezier curve based on the sequence of points. The resulting Bezier curve can then more accurately represent a line corresponding to the user's input. This approach, however, requires the entire line to be completed before the transform can be applied. The user may therefore not know how the device will draw the curved representation until the user provides an indication that the line is finished.
To improve a user's ability to accurately draw curved lines as desired, the electronic device can instead replace individual segments of a line with curved lines while the user continues to provide inputs corresponding to a curved line (e.g., as the user continues to draw the line).
In contrast with the approach shown in
In an alternative approach, the electronic device can instead or in addition incompletely apply a transform to one or more of the segments of the line for which straight segments are provided. In particular, the electronic device can define temporary curved lines based on the output of a transform, where some of the arguments required for the transform are not available. For example, if the transform requires the two points following a particular segment to adjust the segment (e.g., adjust segment 209 only if point 212 and an additional point are known), the electronic device can apply the transform to the segment based on incomplete arguments, and later adjust the segment when the missing arguments become available (e.g., adjust segment 209 once another point is defined by the device). Using this approach, the electronic device can store in cache the curved lines for which sufficient information is available to apply the transform, and for which the transformed curved lines will not change as the device defines more points of the line based on the user's input. The segments for which the transformed curved line can change can be re-calculated each time a new point is defined (e.g., when sufficient points are detected to apply the transform) until the final curved line is defined, at which time the final curved line can be added to the cache.
Display 350, shown in
At step 408, the electronic device can define segments between the defined points. For example, the electronic device can define a straight or curved line segment between adjacent defined points. In some cases, the electronic device can define a line segment between several points (e.g., define a segment between three consecutive points). At step 410, the electronic device can determine whether a segment is defined between two points that are within a threshold number of the last defined points. For example, the electronic device can select a segment, and determine whether the points providing the end points of the segment are among the last points (e.g., the last three or four defined points of the line). In some embodiments, steps 408 and 410 can instead or in addition be replaced by a step that selects two adjacent points and determines whether the points are among the last points of the line. The electronic device can then define a segment between the points at a later step of process 400. If the electronic device determines that a segment is defined between two points that are not within a threshold number of the last defined points, the electronic device can move to step 412.
At step 412, the electronic device can apply a complete transform to the segment. For example, the electronic device can apply a transform (e.g., a Bezier transform) for which the arguments required to apply the transform to the segment are all known. In some embodiments, the electronic device can display the transformed segment between the points. At step 414, the electronic device can store the transformed segment. For example, the electronic device can store the transformed segment in cache, where it can be re-used without needing to be re-defined (e.g., the transform need not be re-applied to the segment). Process 416 can then move to step 418, described below.
If, at step 410, the electronic device instead determines that a segment is defined between two points that are within a threshold number of the last defined points, the electronic device can move to step 416. At step 416, the electronic device can apply a partial transform to the segment. For example, the electronic device can apply a transform to the segment for which only some of the required arguments are known. In particular, an argument defined by as of yet undefined subsequent points of the line (e.g., the device has not yet sampled the subsequent points defining the line) may not be available to the transform. In some embodiments, the electronic device can display the partially transformed segment. At step 418, the electronic device can determine whether the drawn line is complete. For example, the electronic device can determine whether the user has provided an input corresponding to an instruction to stop drawing the line. If the electronic device determines that the drawn line is complete, process 400 can move to step 420 and end. In some embodiments, the electronic device can store all completely and partially transformed segments defining the line in response to determining that the line is complete. In some embodiments, the electronic device can instead or in addition apply a new transform to the entire, complete line (e.g., to the entire collection of defined points) to replace the individual segments defined while the line was being drawn.
If, at step 418, the electronic device instead determines that the drawn line is incomplete, the electronic device can move to step 422. At step 422, the electronic device can identify an additional point for the line. For example, the electronic device can define an addition sampled point for the line. By virtue of the additional point, the segment may no longer be defined by two points that are within a threshold number of the last defined points. Accordingly, process 400 can return to step 410, and re-apply the transform to the segment. Accordingly, a partial transform of a segment (e.g., determined at step 416) may not be stored in cache, but may instead be re-calculated each time new points are defined for a line until the segment is no longer among the last segments of the line.
The electronic device can apply any suitable transform to segments defined between adjacent points. The following discussion will describe a particular transform, though it will be understood that any other process by which a straight line segment can be replaced by a curved segment defined to resemble a line corresponding to a user input can be used.
Each of segments 503, 505 and 507 can be constructed by applying a transform to straight line segments 503′, 505′ and 507′, respectively. In some embodiments, a quadratic Bezier transform can be applied to each segment between adjacent points of the line drawn by the user. A quadratic Bezier transform can require four distinct points to serve as arguments to define a Bezier curve. End points for a segment can serve as two of the points used for the Bezier transform (e.g., start and end points of the Bezier curve). The remaining two points can be selected based on adjacent segments within the line, which can serve to define the curvature of the Bezier curve. In particular, the remaining two points can serve to determine the manner in which the curve extends from an end point (e.g., defines a tangent for the curve at the end point, and a distance from the end point by which the curve must extend before curving towards the opposite end point). In some embodiments, it may be desirable to define each the remaining two points on a line that is shared with the application of the transform to an adjacent segment so that the adjacent curved segments can be tangent to a single line at their interface, and thereby provide a smooth curve.
Segment 503 can be constructed using a quadratic Bezier transform. Points 502 and 504 can serve as end points for the Bezier transform, as this approach can ensure that Bezier transforms of adjacent segments form a continuous line. To determine the control points defining the curvature of the Bezier transform, the electronic device can identify attributes of the segments preceding and following segment 503. Because segment 503 can include a first segment of the line, first control point 510 can be selected to substantially be the same (or be the same) as point 502. In particular, first control point 510 can be selected to be on segment 503′, at a point along the segment that is substantially near or the same as point 502 (e.g., a point defined as a control value multiplied by the length of segment 503′, or as a control value times 0, the length of a non-existent segment preceding segment 503′).
The electronic device can define second control point 512 by defining a line that is substantially perpendicular to the line bisecting the angle between segments 503′ and 505′. In particular, the electronic device can construct control line 504′ by first defining line 504″ bisecting the angle between segments 503′ and 505′, and subsequently defining control line 504′ perpendicular to bisecting line 504″ and passing through point 504. The electronic device can then select point 512 along control line 504′, where point 512 is at a particular distance from end point 504. The electronic device can calculate the distance using any suitable approach including, for example, selecting a constant distance (e.g., a number of pixels along the control line), a distance related to the length of segment 505′ or of segment 503′, or a combination of these. In one implementation, the distance can be selected by multiplying a control value (e.g., the same control value as that selected for control point 510) and the length of segment 505′ following segment 503′. Point 512 can be positioned on any suitable portion of control line 504′ relative to point 504. In one implementation, point 512 can be placed on the portion of control line 504′ that extends towards from segment 503′ relative to line 504″ (e.g., the portion of control line 504′ that extends in the same direction as line 505′ extended away from point 506 and towards point 502).
In some embodiments, control line 504′ can instead or in addition be constructed by extending one or both of segments 503′ and 505′. For example, the electronic device can extend segment 505′ past point 504 and away from point 506 (e.g., towards point 502) to define extension 513. As another example, the electronic device can extend segment 503′ past point 504 and away from point 502 (e.g., towards point 506) to define extension 521. The angles between extension 513 and segment 503′, and between extension 521 and segment 505′ can be the same (e.g., by virtue of the construction of the extensions). In addition, if bisecting line 504″ divides the angle between segments 503′ and 505′, by construction, control line 504′ also bisects the angles between extension 513 and segment 503′, and between extension 521 and segment 505′ (e.g., control line 504′ creates half angles within the angles formed between the straight segments and the extensions). Therefore, the electronic device can define control line 504′ as the line for which the angles between control line 504′ and extension 513, between control line 504′ and line 503′, between control line 504′ and line 505′, and between control line 504′ and extension 521 are the same. By defining one or both of extension 513 and 521, the electronic device can therefore quickly define control line 504′.
Segment 505 can be constructed using a quadratic Bezier transform. Points 504 and 506 can serve as end points for the Bezier transform, as this approach can ensure that Bezier transforms of adjacent segments form a continuous line. Similar to the transform used for segment 503, the electronic device can identify attributes of the segments preceding and following segment 505 to determine control points to use in the Bezier transform. The electronic device can define first control point 520 by defining control line 504′ bisecting the angle between extension 521 of segment 503′ towards point 506 and away from point 502 and segment 505′. Similarly, the electronic device can define second control point 522 by defining control line 506′ bisecting the angle between extension 523 of segment 507′ (e.g., the following segment in the line) towards point 504 and away from point 508 and segment 505′. The electronic device can determine the position of the control points along each of the control lines using any suitable approach. In some embodiments, the electronic device can define a distance from the end points for each of the control points. The distance can be the same or different for each of control points 520 and 522. In some embodiments, the position control points can be defined from a control value (e.g., point 520 is positioned at a distance equal to the control value multiplied by the length of segment 503′, and point 522 is positioned at a distance equal to the control value multiplied by the length of segment 507′). In some embodiments, the control point distance can be selected based on the intersection of control lines 504′ and 506′. For example, the control point distance can be selected to be the point of intersection of the control lines, or a control value multiplied by the distance from points 504 and 506 to the point of intersection.
Segment 507 can be constructed using a quadratic Bezier transform. Points 506 and 508 can serve as end points for the Bezier transform, as this approach can ensure that Bezier transforms of adjacent segments form a continuous line. Similar to the transform used for segment 503, the electronic device can identify attributes of the segments preceding and following segment 507 to determine control points to use in the Bezier transform. The electronic device can define first control point 530 by defining control line 506′ bisecting the angle between extension 531 of segment 505′ towards point 508 and away from point 506 and segment 507′. The electronic device can determine the position of the control point along the control lines using any suitable approach. In some embodiments, the electronic device can define a distance from end point 506 for control point 530 (e.g., based on a control value multiplied by the length of segment 505′). Because segment 507 can include a last segment of the line, second control point 532 can be selected to substantially be the same (or be the same) as point 508. In particular, first control point 510 can be selected to be on segment 507′, at a point along the segment that is substantially near or the same as point 508 (e.g., a point defined as a control value multiplied by the length of segment 507′, or as a control value times 0, the length of a non-existent segment following segment 507′).
In some embodiments, a higher order Bezier transform can be used instead of or in addition to a second order (e.g., quadratic) Bezier function. For example, an electronic device can identify more than two successive or consecutive points in a sequence, and define a curved line between the end points of the more than two consecutive points. For example, the electronic device can select five consecutive points detected by the device to represent a line, and construct a curved segment between the first and last of the five points. The electronic device can define one or more control points, and use one or more of the intermediate points to determine the shape of the Bezier curve between the end points. In some embodiments, the control points can be defined using a control line that defines a tangent at a sampled point of the curve.
In some embodiments, a user can define a curve for which the user intends to have a sharp angle. In such cases, the electronic device may not apply a Bezier transform to segments preceding and following the sharp angle, or can instead or in addition revise the manner in which control points are defined in the vicinity of the sharp angle.
To determine whether an angle between adjacent segments corresponds to an intentionally sharp angle, the electronic device can calculate the angle between adjacent segments, and compare the angle to a threshold. In one implementation, the electronic device can identify the angles corresponding to points 704, 706 and 708, and compare the angles to a minimum angle size. Alternatively, the electronic device can compare pi minus the angle (or 180 degrees minus the angle) with a maximum threshold (e.g., to determine how close an angle is to a straight line). In some embodiments, the electronic device can consider an absolute value of an angle, if the angle is determined in a particular orientation (e.g., with a positive or negative value).
If the electronic device determines that the angle corresponds to an intentionally sharp angle, the electronic device can adjust control points in the vicinity of the angle. For example, the electronic device can merge the control points with the defined point corresponding to the peak of the angle. In the example of
In contrast, if the angle is determined to include an angle to be softened by transforms, the electronic device can define control lines and control points as described above in connection with the displays of
At step 808, the electronic device can define control lines perpendicular to lines bisecting the angles between adjacent segments at each end of the segment. For example, the electronic device can identify the angles at each end of the segment, and define a line bisecting the angles. The electronic device can then define a control line that is perpendicular to the bisecting line, and that goes through an end of the segment. In some embodiments, the electronic device can instead or in addition define an extension of one of the segment and of an adjacent segment, and define a control line that bisects an angle between the extension and the other of the segment and the adjacent segment. By constructing control lines in this manner, the control lines can provide tangents to the line segment at the segment end points. At step 810, the electronic device can identify control points on each of the control lines. For example, the electronic device can define a point on the control line that is at a particular distance from the end point of the segment (e.g., a distance determined from a control value multiplied by a segment length). At step 812, the electronic device can apply a Bezier transform between the end points using the control points. For example, the electronic device can apply a quadratic Bezier transform. Process 800 can then move to step 822 and end.
If, at step 808, the electronic device instead determines that there is a sharp angle at an end of the segment, process 800 can move to step 814. At step 814, the electronic device can extend control lines from segments defining sides of the sharp angle. For example, the electronic device can define extensions for each of the two segments forming the sharp angle, such that the extensions extend away from the opposite end of the segment. At step 816, the electronic device can identify control points on each of the control lines. For example, the electronic device can define a point on the control line that is at a particular distance from the end point of the segment (e.g., a distance determined from a control value multiplied by a segment length). In some embodiments, the electronic device can only extend a control line from an adjacent segment defining a side of the sharp angle, as the extension of the segment may not serve to provide a control point for the transform of the segment (it may instead serve for the transform of an adjacent segment).
In some embodiments, the electronic device can instead of or in addition to one or both of steps 814 and 816, identify a control point at the end point of the segment forming the peak of the sharp angle. For example, a control point and an end point can be merged in the vicinity of the sharp angle. If angles at both ends of the segment are sharp, the electronic device can identify corresponding control points for both ends of the segment, and move directly to step 812.
At step 818, the electronic device can define a control line perpendicular to a line bisecting a not-sharp angle between the segment and an adjacent segment. For example, if an angle at another end of the segment is not sharp, the electronic device can define a control line for the end such that the control line is substantially tangent to the line segments at the other end of the segment (e.g., as described in step 808). At step 820, the electronic device can identify a control point on the control line. For example, the electronic device can define a point on the control line that is at a particular distance from the end point of the segment (e.g., a distance determined from a control value multiplied by a segment length). Process 800 can then move to step 812, described above.
Although the preceding discussion described transforming segments between sampled points of a line, it will be understood that any other suitable approach can be used. In particular, the sampled points can instead or in addition serve as control points. In some embodiments, the electronic device can instead or in addition select center points or other points along a segment to serve as end points for a transformed line. Any portion of a defined point or segment can be used for a transform, so long as the transform can be applied and fixed for a portion of a line while the line is still being drawn.
Any suitable electronic device can be used to dynamically smooth a curve drawn by a user.
Electronic device 1000 can include a processor or control circuitry 1002, storage 1004, memory 1006, input/output circuitry 1008, and display 1010 as typically found in an electronic device of the type of electronic device 1000, and operative to enable any of the uses expected from an electronic device of the type of electronic device 1000 (e.g., connect to a host device for power or data transfers). In some embodiments, one or more of electronic device components 1000 can be combined or omitted (e.g., combine storage 1004 and memory 1006), electronic device 1000 can include other components not combined or included in those shown in
Control circuitry 1002 can include any processing circuitry or processor operative to control the operations and performance of electronic device 1000. Storage 1004 can include, for example, one or more storage mediums including a hard-drive, solid state drive, flash memory, permanent memory such as ROM, any other suitable type of storage component, or any combination thereof. Memory 1006 can include cache memory, semi-permanent memory such as RAM, and/or one or more different types of memory used for temporarily storing data. In some embodiments, memory 1006 and storage 1004 can be combined as a single storage medium. Input/output circuitry 1008 can be operative to convert (and encode/decode, if necessary) analog signals and other signals into digital data. Input/output circuitry 1008 can be coupled to or include any suitable input interface, such as for example, a button, keypad, dial, a click wheel, or a touch screen, as well as any suitable output circuitry associated with output devices (e.g., audio outputs or display circuitry or components).
Display 1010 can be operatively coupled to control circuitry 1002 for providing visual outputs to a user. Display 1010 can include any suitable type of display, including for example a liquid crystal display (LCD) (e.g., active matrix, passive matrix and the like), a monochrome display, color graphics adapter (CGA) display, enhanced graphics adapter (EGA) display, variable-graphics-array (VGA) display, super VGA display, cathode ray tube (CRT), a plasma display, a display implemented with electronic inks, or any other suitable display. Display 1010 can be configured to display a graphical user interface that can provide an easy to use interface between a user of the computer system and the operating system or application running on the system.
In some embodiments, electronic device 1000 can include a bus operative to provide a data transfer path for transferring data to, from, or between control processor 1002, storage 1004, memory 1006, input/output circuitry 1008, display 1010 and any other component included in the electronic device.
Although many of the embodiments of the present invention are described herein with respect to personal computing devices, it should be understood that the present invention is not limited to personal computing applications, but is generally applicable to other applications.
The invention is preferably implemented by software, but can also be implemented in hardware or a combination of hardware and software. The invention can also be embodied as computer readable code on a computer readable medium. The computer readable medium is any data storage device that can store data which can thereafter be read by a computer system. Examples of the computer readable medium include read-only memory, random-access memory, CD-ROMs, DVDs, magnetic tape, and optical data storage devices. The computer readable medium can also be distributed over network-coupled computer systems so that the computer readable code is stored and executed in a distributed fashion.
Insubstantial changes from the claimed subject matter as viewed by a person with ordinary skill in the art, now known or later devised, are expressly contemplated as being equivalently within the scope of the claims. Therefore, obvious substitutions now or later known to one with ordinary skill in the art are defined to be within the scope of the defined elements.
The above described embodiments of the invention are presented for purposes of illustration and not of limitation.