VECTOR PATH TRAJECTORY IMITATION
20250117989 ยท 2025-04-10
Assignee
Inventors
Cpc classification
G06V10/469
PHYSICS
International classification
Abstract
An example vector path trajectory imitation system is configured to create a new vector path or to extend an existing vector path based on a reference. In this manner, a user (e.g., artist, illustrator, or designer) does not need to tweak individual anchor points to align a trajectory of the new vector path with the trajectory of the reference. Instead, the user moves a position indicator (e.g., a mouse cursor) on a digital canvas in a freehand fashion while the vector path trajectory imitation system provides visual feedback to show the user how a resultant curve will look. When the user reaches a position on the digital canvas where a new vector path is to be drawn, the user can perform an action (e.g., releasing a mouse button) and the new vector path, which follows the trajectory of the reference, is created.
Claims
1. A method comprising: selecting, by a processing device, a reference curve from one or more vector paths; identifying, by the processing device, a current vector path; selecting, by the processing device, reference points along the reference curve; and calculating, by the processing device, a resultant curve based on the current vector path and the reference curve.
2. The method as described in claim 1, further comprising displaying, by the processing device, the one or more vector paths in a user interface.
3. The method as described in claim 2, wherein selecting the reference curve comprises selecting the reference curve from the one or more vector paths displayed in the user interface.
4. The method as described in claim 3, wherein identifying the current vector path comprises identifying a last anchor position as a first anchor point and a current anchor position of a position indicator as a second anchor point.
5. The method as described in claim 4, wherein selecting the reference points along the reference curve comprises: receiving the first anchor point and the second anchor point; finding a first reference point nearest the first anchor point; finding a second reference point nearest the second anchor point; defining a first distance between the first anchor point and the first reference point; and defining a second distance between the second anchor point and the second reference point.
6. The method as described in claim 5, wherein calculating the resultant curve comprises calculating, at least in part, the resultant curve using the first distance, the second distance, the first reference point, and the second reference point.
7. The method as described in claim 1, further comprising outputting the resultant curve in a user interface.
8. The method as described in claim 1, further comprising refining, by the processing device, the resultant curve.
9. The method as described in claim 8, wherein refining the resultant curve comprises refining the resultant curve to remove an unintentional loop artifact.
10. The method as described in claim 8, wherein refining the resultant curve comprises applying a corner handling algorithm to the resultant curve to create a refined resultant curve.
11. The method as described in claim 8, wherein refining the resultant curve comprises applying a nearest neighbor curve refining algorithm to the resultant curve to create a refined resultant curve.
12. The method as described in claim 11, wherein refining the resultant curve further comprises applying an intersection detection algorithm to the refined resultant curve to create a further refined resultant curve.
13. A system comprising: a reference curve selection module implemented by a processing device to select a reference curve from one or more vector paths; an anchor point detection module implemented by the processing device to identify a current vector path comprising a first anchor point associated with a last anchor position and a second anchor point associated with a current anchor position; a reference point selection module implemented by the processing device to select reference points along the reference curve; and a resultant curve determination module implemented by the processing device to calculate a resultant curve based on the current vector path and the reference curve.
14. The system as described in claim 13, wherein the reference curve selection module is configured to select the reference curve from one or more vector paths displayed in a user interface.
15. The system as described in claim 14, wherein the reference point selection module is configured to: receive the first anchor point and the second anchor point; find a first reference point nearest the first anchor point; find a second reference point nearest the second anchor point; define a first distance between the first anchor point and the first reference point; and define a second distance between the second anchor point and the second reference point.
16. The system as described in claim 13, further comprising: a corner handling module implemented by the processing device to apply a corner handling algorithm to the resultant curve to create a refined resultant curve.
17. The system as described in claim 13, further comprising: a nearest neighbor module implemented by the processing device to apply a nearest neighbor algorithm to the resultant curve to create a refined resultant curve.
18. The system as described in claim 17, further comprising: an intersection detection module implemented by the processing device to apply an intersection detection algorithm to the refined resultant curve to create a further refined resultant curve.
19. One or more computer-readable storage media storing instructions that, responsive to execution by a processing device, causes the processing device to perform operations comprising: displaying one or more vector paths in a user interface; selecting a reference curve from the one or more vector paths displayed in the user interface; identifying a current vector path comprising a first anchor point associated with a last anchor position and a second anchor point associated with a current anchor position of a position indicator in the user interface; selecting reference points along the reference curve; calculating a resultant curve based on the current vector path and the reference curve; and outputting the resultant curve in the user interface.
20. The one or more computer-readable storage media as described in claim 19, wherein the operations further comprise: refining the resultant curve to remove an unintentional loop artifact by applying one or more curve refining algorithms, wherein the one or more curve refining algorithms comprise a corner handling algorithm, a nearest neighbor algorithm, and an intersection detection algorithm.
Description
BRIEF DESCRIPTION OF THE DRAWINGS
[0006] The detailed description is described with reference to the accompanying figures. Entities represented in the figures are indicative of one or more entities and thus reference is made interchangeably to single or plural forms of the entities in the discussion.
[0007]
[0008]
[0009]
[0010]
[0011]
[0012]
[0013]
[0014]
[0015]
[0016]
[0017]
[0018]
[0019]
[0020]
[0021]
[0022]
[0023]
[0024]
[0025]
DETAILED DESCRIPTION
Overview
[0026] Vector graphics software provides tools to create and edit vector paths. One such tool enables a user (e.g., artist, designer, or illustrator) to automatically offset vector paths by a constant distance. This saves the user time and ensures consistent distances between vector paths, which supports precise and symmetrical artwork. Artwork, however, is rarely precise and symmetrical. Oftentimes, a desirable visual appearance of the artwork is achieved when different edges each have their own trajectories that correspond to other trajectories but not in an exacting fashion.
[0027] Conventional vector graphics software also provides anchor tools that allow users to manipulate vector paths to create precise cubic Bzier curves one at a time. However, manually creating a sequence of cubic Bzier curves and attempting to loosely match the trajectory of the cubic Bzier curves is an acquired skill that even experienced users find time-consuming. Newer users are often resistant to learning such skills, instead relying on software to provide faster and more intuitive solutions.
[0028] To address these and other technical challenges, a vector path trajectory imitation system is described that is configured to create a new vector path or to extend an existing vector path based on a reference, such as another vector path or a selected portion of another vector path. In this manner, a user (e.g., artist, illustrator, or designer) is not tasked with manually adjusting individual anchor points to align a trajectory of the new vector path with the trajectory of the reference. Instead, a position indicator (e.g., a mouse cursor) is moveable with respect to a digital canvas in a freehand fashion while the vector path trajectory imitation system provides visual feedback indicating how the resultant accumulation of Bzier curves will look. When a position on the digital canvas where the new vector path is to be drawn is reached, an input is received (e.g., releasing a mouse button) and the new vector path which follows the trajectory of the reference is created.
[0029] According to some examples, vector paths are displayed in a user interface (e.g., a digital canvas) of a content processing system. The vector path trajectory imitation system then detects an input to select a reference from the vector paths displayed in the user interface. The vector path trajectory imitation system also detects an input of two locations in the user interface between which the vector path trajectory imitation system is configured to imitate a reference trajectory of the reference. The first of these locations (referred to as point A) is the last anchor location of the vector path which is currently being drawn by the user. The second of these locations (referred to as point B) is the current location of a position indicator (e.g., a mouse cursor). The vector path trajectory imitation system executes a vector path trajectory imitation algorithm to imitate the trajectory of the selected reference. When the vector path trajectory imitation system detects a change in the position indicator (e.g., the mouse hover position changes), the vector path trajectory imitation system re-executes the vector path trajectory imitation algorithm.
[0030] The techniques described herein significantly reduces the time it takes to complete digital artwork, thereby improving operation of computing devices that implement these techniques, reducing power consumption, and improving user efficiency in navigating through tools supported by the system. The vector path trajectory imitation system can imitate trajectories of all lengths, efficiently creating any number of anchor points in a single mouse click or equivalent interaction as opposed to creating and tweaking each anchor point separately.
[0031] In the following discussion, an example environment is described that employs the techniques described herein. Example procedures are also described that are performable in the example environment as well as other environments. Consequently, performance of the example procedures is not limited to the example environment and the example environment is not limited to performance of the example procedures.
Vector Path Trajectory Imitation Environment
[0032]
[0033] The computing device 102, for instance, is configurable as a desktop computer, a laptop computer, a mobile device, and so forth. Thus, the computing device 102 ranges from full resource devices with substantial memory and processor resources (e.g., personal computers and game consoles) to a low-resource device with limited memory and/or processing resources (e.g., mobile devices). Additionally, although a single computing device 102 is shown, the computing device 102 is also representative of a plurality of different devices, such as multiple servers utilized by a business to perform operations over the cloud as described in
[0034] The computing device 102 is illustrated as including a content processing system 104. The content processing system 104 is implemented at least partially in hardware of the computing device 102 to process and transform digital content 106, which is illustrated as maintained in a storage device 108 of the computing device 102. Such processing includes creation of the digital content 106, modification of the digital content 106, and rendering of the digital content 106 in a user interface 110 for output, for example, by a display device 112. Examples of digital content 106 include digital documents, digital images, digital media, digital illustrations, and so forth. Although illustrated as implemented locally at the computing device 102, functionality of the content processing system 104 is also configurable in whole or part via functionality available via a network 114, such as part of a web service or in the cloud.
[0035] The digital content 106 can be or can include one or more vector graphics 116. For example, the digital content 106 can be artwork, such as a logo, that contains one or more vector graphics 116. The vector graphics 116 are created based on mathematical equations. In the illustrated example, the vector graphics 116 are created from one or more vector paths 118 that form one or more vector objects 120.
[0036] The vector paths 118 are sequences of points in a particular order connected by straight lines, curves (e.g., Bzier curves), or a combination of both. The vector paths 118 can be either open or closed. A vector object 120 may be formed by a single closed vector path 118, such as is the case for simple shapes. The vector paths 118 can have properties, such as stroke color, width, and pattern. A closed vector path 118 may also have a fill property. The vector paths 118, especially those with Bzier curves, offer immense flexibility in designing the digital content 106. The vector paths 118 allow for precision in shaping and manipulation, enabling users to create anything from simple geometric designs to intricate artwork.
[0037] The vector paths 118 are controlled by anchor points 122 and control points 124. The anchor points 122 represent the start and end points of the vector paths 118. The control points 124 determine the curvature of the vector paths 118 that form Bzier curves. The disclosed techniques are described in context of the vector paths 118 being formed, at least in part, from Bzier curves. More particularly, the vector paths 118 are formed from cubic Bzier curves which are controlled by two anchor points 122 and multiple control points 124.
[0038] The vector objects 120 are distinct, self-contained shapes or forms in the vector graphics 116. The vector objects 120 are created by enclosing a series of points with the vector paths 118. The vector objects 120 can have various properties, such as fill color, stroke color, stroke width, gradients, patterns, and the like. The vector objects 120 can be simple shapes such as circle or rectangle, or more complex freeform shapes that represent detailed illustrations or intricate designs of individual vector graphics 116 or the digital content 106 as a whole. The vector objects 120 can be scaled, rotated, skewed, transformed, or otherwise manipulated without any loss in clarity or quality.
[0039] In the illustrated example, the digital content 106 displayed in the user interface 110 includes two examples of the vector graphics 116. A first vector graphic 116A is a vector-based logo that includes an illustration of chili pepper and fire. A second vector graphic 116B is a freeform shape. Each of the vector graphics 116A, 116B is composed of multiple vector objects 120. For example, the first vector graphic 116A is composed of vector objects 120A-120E that together depict the fire and vector objects 120F-120G that together depict the chili pepper. The second vector graphic 116B is composed of a single vector object 120H. Each of the vector objects 120A-120H is composed of one or more vector paths 118. For example, the vector object 120H is composed of vector paths 118A, 118B. The vector paths 118 of the vector objects 120A-120H are numerous and not individually labeled for ease of reading.
[0040] Both of the vector graphics 116A, 116B can be created, at least in part, from a reference curve 126 that is already drawn in the user interface 110. The reference curve 126 can be one of the vector paths 118 or a selected portion of one of the vector paths 118. In the illustrated example, a candidate reference space 128 is shown in which candidate references 130, 130 (i.e., candidates to be selected as the reference curve 126) have been drawn. Specifically, the leftmost curve is shown as the candidate reference 130 and the upper curve is shown as the candidate reference 130. The candidate reference space 128 can be the entirety of the user interface 110 such that a user can select the reference curve 126 from any of the vector paths 118 currently displayed in the user interface 110. Alternatively, the candidate reference space 128 can be a portion of the user interface 110 such as shown in the illustrated example. Moreover, although the illustrated example shows the candidate reference space 128 as a dotted line to aid in visualizing the above concepts, in real-world implementations, the candidate reference space 128 may be hidden from the user or not utilized at all. It is contemplated that a dotted line or other way to visually differentiate between a portion of the user interface 110 that is considered the candidate reference space 128 from the remainder of the user interface 110 can be toggled on/off (e.g., on-the-fly by the user or automatically based on a preference).
[0041] Inside the illustrated candidate reference space 128, a user input is received via the user interface 110 as selecting the candidate reference 130 (i.e., the leftmost curve) as the reference curve 126. The candidate reference space 128 also depicts two locations in the user interface 110 between which a resultant curve 132 having a similar or the same trajectory as the reference curve 126 is created. These locations are shown as anchor point A 122A and anchor point B 122B. Anchor point A 122A is the last anchor location of the resultant curve 132 which is currently being drawn in the user interface 110. Anchor point B 122B is the current location of a position indicator 134. In the illustrated example, the position indicator 134 is a mouse cursor and the anchor point B 122B represents a current mouse hover position. The position indicator 134 may be a touch point or other indicator of the position of a user's interaction with the user interface 110. As the position indicator 134 moves around the user interface 110, the anchor point B 122B changes and the resultant curve 132 is recreated.
[0042] An example of functionality incorporated by the content processing system 104 to process the digital content 106 is illustrated as a vector path trajectory imitation system 136. The vector path trajectory imitation system 136 is configurable to execute one or more algorithms 138 to perform various operations described herein. For example, the algorithms 138 include a vector path trajectory imitation algorithm usable to create the resultant curve 132 from the reference curve 126, and one or more curve refining algorithms to refine the curvature of the resultant curve 132, such as to mitigate or eliminate undesirable characteristics of the resultant curve 132.
[0043] By implementing the vector path trajectory imitation system 136, user inputs may be avoided as involved in conventional systems that involve manual modifications to individual anchor points 122 (e.g., the anchor point A 122A and the anchor point B 122B) to align the trajectory of the resultant curve 132 with the trajectory of the reference curve 126. Instead, as introduced above, the user moves the position indicator 134 in the user interface 110 in a freehand fashion while the vector path trajectory imitation system 136 provides visual feedback to show how the resultant curve 132 will look.
[0044] When a position in the user interface 110 is reached, at which, a resultant curve 132 is to be drawn (e.g., an edge of a vector object 120), an action is performable (e.g., releasing a mouse button) and the resultant curve 132, which follows the trajectory of the reference curve 126, is created. Further discussion of these and other examples is included in the following sections and shown in corresponding figures.
[0045] In general, functionality, features, and concepts described in relation to the examples above and below are employed in the context of the example procedures described in this section. Further, functionality, features, and concepts described in relation to different figures and examples in this document are interchangeable among one another and are not limited to implementation in the context of a particular figure or procedure. Moreover, blocks associated with different representative procedures and corresponding figures herein are applicable together and/or combinable in different ways. Thus, individual functionality, features, and concepts described in relation to different example environments, devices, components, figures, and procedures herein are usable in any suitable combinations and are not limited to the particular combinations represented by the enumerated examples in this description.
Vector Path Trajectory Imitation
[0046] The following discussion describes vector path trajectory imitation techniques that are implementable utilizing the described systems and devices. Aspects of procedures are implemented in hardware, firmware, software, or a combination thereof. The procedures are shown as a set of blocks that specify operations performable by hardware and are not necessarily limited to the orders shown for performing the operations by the respective blocks. Blocks of the procedures, for instance, specify operations programmable by hardware (e.g., processor, microprocessor, controller, firmware) as instructions thereby creating a special purpose machine for carrying out one or more algorithm as illustrated by the flow diagrams. As a result, the instructions are storable on a computer-readable storage medium that causes the hardware to perform the algorithms. In portions of the following discussion, reference will be made in parallel among
[0047]
[0048] A reference selection module 202 is then employed to select a reference curve 126 from the candidate reference(s) 130 (block 304).
[0049] The reference selection module 202 calculates centroids of the vector paths 118 displayed in the user interface 110 or specifically within the candidate reference space 128 as the case may be (block 404). A centroid is the mean of the anchor points 122 for each of the vector paths 118. Equation 1 below can be used to calculate the centroids, where anchorPositions are the anchor points 122.
[0050] After calculating the centroids of the vector paths 118 displayed in the user interface 110, the reference selection module 202 calculates the Euclidean distances between the anchor point A 122A and the corresponding centroid for each of the centroids (block 404). Equation 2 below can be used to calculate these Euclidean distances (D.sub.i). The reference selection module 202 then sorts D.sub.i (block 408).
[0051] The user can cycle through the i.sup.th centroids in the order determined at block 408 and select one of the centroids (block 410). The reference selection module 202 then sets the selected centroid as a candidate reference (block 412). For example, a key or key combination can be used to cycle through the i.sup.th centroids, although other user input to perform this action is contemplated.
[0052] After the reference curve 126 has been selected, the reference selection module 202 determines whether a specific portion of the candidate reference has been selected (block 414). If so, the reference selection module 202 uses the specific portion of the candidate reference as the reference curve 126. If not, the reference selection module 202 uses the whole candidate reference as the reference curve 126 (block 418).
[0053] Returning to
[0054] The reference point selection module 202 selects reference points along the reference curve 126 (block 308).
[0055] The reference point selection module 206 also defines distances between the anchor points 122 and the reference points 208 (block 506). The distances can be defined as shown in Equation 3 and Equation 4 below.
[0056] Returning to
[0057] The resultant curve determination module 210 also defines a length of the reference curve 126 between the reference point R1 208A and the reference point R2 208B (block 604). This length can be defined as shown in Equation 5 below.
[0058] Using L and the distances D1, D2 defined above, the resultant curve determination module 210 can then define a step offset (block 606) and a step interval (block 608). The step offset can be defined as shown in Equation 6 below. The step interval can be defined as shown in Equation 7 below.
[0059] The resultant curve determination module 210 then executes a vector path trajectory imitation algorithm to calculate the resultant curve 132. Turning briefly to
[0060] Returning to
[0061] The resultant curve 132 as output from the resultant curve determination module 210 may be suitable for the user as-is. In some cases, however, the resultant curve 132 may exhibit characteristics that are undesirable to the user. For example, the resultant curve 132 may have undesirable curvatures that do not follow the trajectory of the reference curve 126 as closely as the user desires. The vector path trajectory imitation system 136 can implement one or more curve refinement algorithms to refine the curvature of the resultant curve 132 (block 314). These curve refinement algorithms will be described in greater detail with reference to
[0062]
[0063]
The corner offset distance can then be used in execution of the vector path trajectory imitation algorithm, such as the algorithm 700 shown in
[0064] Returning to
[0065] A nearest neighbor module 216 can receive the refined resultant curve 214A from the corner handling module 212. Alternatively, when no anchor points are on corners, the resultant curve 132 can be provided as-is to the nearest neighbor module 216 for further processing.
[0066]
[0067] As mentioned above, while collecting candidate curve points using the algorithm 700, unintentional loops can be created. An example of this is shown as the unintentional loop artifact 902 in
[0068] The nearest neighbor module 216 first identifies two sets of points-one set of curve points (c.sub.i) representing the resultant curve 132 (block 1002) and one set of reference points (r.sub.i) representing the reference curve 126 (block 1004). Additionally, indices, k and j, are initially set to 1.
[0069] For each point c.sub.k in the resultant curve 132, the nearest neighbor module 216 finds a point c.sub.j on the reference curve 126 that is nearest to c.sub.k in terms of the Euclidean distance (block 1006). This is repeated for all curve points c.sub.i in the resultant curve 132. The nearest neighbor module 216 then checks for a nearest neighbor mismatch (block 1008). In particular, if j is not equal to k+1, the nearest neighbor module 216 determines (block 1010) that c.sub.k+1 is not the closest point to c.sub.k and the algorithm 1000 continues in
[0070] Turning to
[0071] For each of the points in the resultant curve 132 between j and n, the nearest neighbor module 216 recalculates the distances and positions based on the new values of D1, R1 and the step offset (block 1020). This recalculation operates to shift these points closer to c.sub.k+1 on the reference curve 126.
[0072] Finally, the nearest neighbor module 216 discards each of the points in the resultant curve 132 that are between k+1 and j1. These points are no longer considered part of the resultant curve 132. The algorithm 700 returns to
[0073] This procedure enables the vector path trajectory imitation system 136 to iteratively adjust points in the resultant curve 132 to enforce a curvature of the resultant curve 132 that increasingly corresponds to a curvature of the reference curve 126.
[0074]
[0075] Although the nearest neighbor module 216 is configured to solve a variety of unintentional loop artifact, unintentional loop artifacts may still remain after refining the resultant curve 132 using a nearest neighbor operation. To refine the resultant curve 132 further, the vector path trajectory imitation system 136 can employ another curve refining algorithm, an example of which is described in the following discussion and shown in corresponding figures.
[0076]
[0077] The intersection detection module 218 first identifies two sets of points-one set of curve points c representing points along the refined resultant curve 214B (block 1202) and one set of reference points representing points along the reference curve 126 (r.sub.i) (block 1204) for each of 1in. The intersection detection module 218 also defines a line l.sub.i formed between c.sub.i and r.sub.i (block 1206).
[0078] For a given point c.sub.k, the intersection detection module 218 checks if the line segment / intersects with one or more of the line segments l.sub.j for each j<k (block 1208). The intersection detection module 218 iterates overs each of the line segments (1, . . . , n) and determines when an intersection is detected (block 1210). When an intersection is detected (block 1210), the intersection detection module 218 stores the lowest index with which the current line intersects (block 1212). The lowest index is defined as i.sub.low. The index of the current line is defined as m. The algorithm 1200 repeats block 1208 starting from index m+1 until the intersection detection module 218 detects a line segment which does not intersect one or more of the line segments before it (block 1210). The index of this non-intersecting line segment is defined as q. The algorithm 1200 then proceeds to
[0079] The intersection detection module 218 stores the length of the line segment l.sub.ilow. as the start distance D1 (block 1214). The intersection detection module 218 then recalculates the step offset (1216) according to Equation 9 below, where L is the remaining length of the reference curve 126 to be traversed.
[0080] The intersection detection module 218 sets r.sub.g as the new start point R1 (block 1218) and resets the indices i to one and n to the remaining points to be evaluated (block 1220). The intersection detection module 218 keeps the step interval the same to ensure that the resultant curve points are at the same step distance (block 1222). The intersection detection module 218 then deletes the points between i.sub.low and q1 (block 1224) and outputs the resultant curve points to further refine the refined resultant curve 214B (block 1226).
[0081] If normal lines are not intersecting but are near each other because of the curvature of the reference curve 126, unintentional looping artifacts can be observed. When used together, the nearest neighbor module 216 and the intersection detection module 218 complement each other to better imitate the trajectory of the reference curve 126.
[0082]
[0083] For cases where two given points lie on opposite sides of the reference curve 126, the resultant curve 132 should intersect the reference curve 126 at some point so that resultant curve 132 reaches from point A.fwdarw.B following the trajectory from R1.fwdarw.R2. In such cases, a relevant intersection point (IP) between the reference curve 126 and the resultant curve 132 can be determined and the vector path trajectory imitation algorithm (e.g., the algorithm 700) can be divided into two parts: (1) the offset distance from D1.fwdarw.0; and (2) the offset distance from 0.fwdarw.D2.
[0084] Referring to
[0085]
[0086]
[0087] Thus far, the vector path trajectory imitation system 136 obtains a set of points on the Euclidean plane through which the vector path trajectory imitation system 136 can fit, via a curve fitting module 222 (shown in
[0088] The techniques described herein provide the capability to extend a current path while maintaining different types of continuities, such as position continuity (G0) and tangential continuity (G1). In case a choice is made to maintain tangential (G1) continuity, the following procedure can be used. Suppose C={C.sub.1, C.sub.2, . . . , C.sub.n} are anchor points on the current curve and the algorithm has produced P={P.sub.1, P.sub.2, . . . , P.sub.k} resultant curve points. To achieve G1 continuity between ( and the curve to be obtained from P, the vector path trajectory imitation system 136, via a continuity module 224, prepends P with the in-tangent of anchor C.sub.n and position of anchor C.sub.n Thus, the final set of input points for curve fitting are:
{C.sub.n.intangent, C.sub.n.position, P.sub.1, P.sub.2, . . . , P.sub.k}.
[0089] The resultant curve obtained after curve fitting is then split at C.sub.n.position and the left portion is discarded. The right portion of the curve is appended to the current curve {C.sub.1, C.sub.2, . . . , C.sub.n}.
[0090]
Example System and Device
[0091]
[0092] The example computing device 1902 as illustrated includes a processing device 1904, one or more computer-readable media 1906, and one or more I/O interface 1908 that are communicatively coupled, one to another. Although not shown, the computing device 1902 further includes a system bus or other data and command transfer system that couples the various components, one to another. A system bus can include any one or combination of different bus structures, such as a memory bus or memory controller, a peripheral bus, a universal serial bus, and/or a processor or local bus that utilizes any of a variety of bus architectures. A variety of other examples are also contemplated, such as control and data lines.
[0093] The processing device 1904 is representative of functionality to perform one or more operations using hardware. Accordingly, the processing device 1904 is illustrated as including hardware element 1910 that is configurable as processors, functional blocks, and so forth. This includes implementation in hardware as an application specific integrated circuit or other logic device formed using one or more semiconductors. The hardware elements 1910 are not limited by the materials from which they are formed or the processing mechanisms employed therein. For example, processors are configurable as semiconductor(s) and/or transistors (e.g., electronic integrated circuits (ICs)). In such a context, processor-executable instructions are electronically executable instructions.
[0094] The computer-readable storage media 1906 is illustrated as including memory/storage 1912 that stores instructions that are executable to cause the processing device 1904 to perform operations. The memory/storage 1912 represents memory/storage capacity associated with one or more computer-readable media. The memory/storage 1912 includes volatile media (such as random access memory (RAM)) and/or nonvolatile media (such as read only memory (ROM), Flash memory, optical disks, magnetic disks, and so forth). The memory/storage 1912 includes fixed media (e.g., RAM, ROM, a fixed hard drive, and so on) as well as removable media (e.g., Flash memory, a removable hard drive, an optical disc, and so forth). The computer-readable media 1906 is configurable in a variety of other ways as further described below.
[0095] Input/output interface(s) 1908 are representative of functionality to allow a user to enter commands and information to computing device 1902, and also allow information to be presented to the user and/or other components or devices using various input/output devices. Examples of input devices include a keyboard, a cursor control device (e.g., a mouse), a microphone, a scanner, touch functionality (e.g., capacitive or other sensors that are configured to detect physical touch), a camera (e.g., employing visible or non-visible wavelengths such as infrared frequencies to recognize movement as gestures that do not involve touch), and so forth. Examples of output devices include a display device (e.g., a monitor or projector), speakers, a printer, a network card, tactile-response device, and so forth. Thus, the computing device 1902 is configurable in a variety of ways as further described below to support user interaction.
[0096] Various techniques are described herein in the general context of software, hardware elements, or program modules. Generally, such modules include routines, programs, objects, elements, components, data structures, and so forth that perform particular tasks or implement particular abstract data types. The terms module, functionality, and component as used herein generally represent software, firmware, hardware, or a combination thereof. The features of the techniques described herein are platform-independent, meaning that the techniques are configurable on a variety of commercial computing platforms having a variety of processors.
[0097] An implementation of the described modules and techniques is stored on or transmitted across some form of computer-readable media. The computer-readable media includes a variety of media that is accessed by the computing device 1902. By way of example, and not limitation, computer-readable media includes computer-readable storage media and computer-readable signal media.
[0098] Computer-readable storage media refers to media and/or devices that enable persistent and/or non-transitory storage of information (e.g., instructions are stored thereon that are executable by a processing device) in contrast to mere signal transmission, carrier waves, or signals per se. Thus, computer-readable storage media refers to non-signal bearing media. The computer-readable storage media includes hardware such as volatile and non-volatile, removable and non-removable media and/or storage devices implemented in a method or technology suitable for storage of information such as computer readable instructions, data structures, program modules, logic elements/circuits, or other data. Examples of computer-readable storage media include but are not limited to RAM, ROM, EEPROM, flash memory or other memory technology, CD-ROM, digital versatile disks (DVD) or other optical storage, hard disks, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or other storage device, tangible media, or article of manufacture suitable to store the desired information and are accessible by a computer.
[0099] Computer-readable signal media refers to a signal-bearing medium that is configured to transmit instructions to the hardware of the computing device 1902, such as via a network. Signal media typically embodies computer readable instructions, data structures, program modules, or other data in a modulated data signal, such as carrier waves, data signals, or other transport mechanism. Signal media also include any information delivery media. The term modulated data signal means a signal that has one or more of its characteristics set or changed in such a manner as to encode information in the signal. By way of example, and not limitation, communication media include wired media such as a wired network or direct-wired connection, and wireless media such as acoustic, RF, infrared, and other wireless media.
[0100] As previously described, hardware elements 1910 and computer-readable media 1906 are representative of modules, programmable device logic and/or fixed device logic implemented in a hardware form that are employed in some embodiments to implement at least some aspects of the techniques described herein, such as to perform one or more instructions. Hardware includes components of an integrated circuit or on-chip system, an application-specific integrated circuit (ASIC), a field-programmable gate array (FPGA), a complex programmable logic device (CPLD), and other implementations in silicon or other hardware. In this context, hardware operates as a processing device that performs program tasks defined by instructions and/or logic embodied by the hardware as well as a hardware utilized to store instructions for execution, e.g., the computer-readable storage media described previously.
[0101] Combinations of the foregoing are also be employed to implement various techniques described herein. Accordingly, software, hardware, or executable modules are implemented as one or more instructions and/or logic embodied on some form of computer-readable storage media and/or by one or more hardware elements 1910. The computing device 1902 is configured to implement particular instructions and/or functions corresponding to the software and/or hardware modules. Accordingly, implementation of a module that is executable by the computing device 1902 as software is achieved at least partially in hardware, e.g., through use of computer-readable storage media and/or hardware elements 1910 of the processing device 1904. The instructions and/or functions are executable/operable by one or more articles of manufacture (for example, one or more computing devices 1902 and/or processing devices 1904) to implement techniques, modules, and examples described herein.
[0102] The techniques described herein are supported by various configurations of the computing device 1902 and are not limited to the specific examples of the techniques described herein. This functionality is also implementable all or in part through use of a distributed system, such as over a cloud 1914 via a platform 1916 as described below.
[0103] The cloud 1914 includes and/or is representative of a platform 1916 for resources 1918. The platform 1916 abstracts underlying functionality of hardware (e.g., servers) and software resources of the cloud 1914. The resources 1918 include applications and/or data that can be utilized while computer processing is executed on servers that are remote from the computing device 1902. Resources 1918 can also include services provided over the Internet and/or through a subscriber network, such as a cellular or Wi-Fi network.
[0104] The platform 1916 abstracts resources and functions to connect the computing device 1902 with other computing devices. The platform 1916 also serves to abstract scaling of resources to provide a corresponding level of scale to encountered demand for the resources 1918 that are implemented via the platform 1916. Accordingly, in an interconnected device embodiment, implementation of functionality described herein is distributable throughout the system 1900. For example, the functionality is implementable in part on the computing device 1902 as well as via the platform 1916 that abstracts the functionality of the cloud 1914.
[0105] In implementations, the platform 1916 employs a machine-learning model that is configured to implement the techniques described herein. A machine-learning model refers to a computer representation that can be tuned (e.g., trained and retrained) based on inputs to approximate unknown functions. In particular, the term machine-learning model can include a model that utilizes algorithms to learn from, and make predictions on, known data by analyzing training data to learn and relearn to generate outputs that reflect patterns and attributes of the training data. Examples of machine-learning models include neural networks, convolutional neural networks (CNNs), long short-term memory (LSTM) neural networks, decision trees, and so forth.
[0106] Although the invention has been described in language specific to structural features and/or methodological acts, it is to be understood that the invention defined in the appended claims is not necessarily limited to the specific features or acts described. Rather, the specific features and acts are disclosed as example forms of implementing the claimed invention.