使用非均匀缩放的三次曲率变化曲线来增强曲线的制作方法

文档序号:11201384阅读:626来源:国知局
使用非均匀缩放的三次曲率变化曲线来增强曲线的制造方法与工艺

本公开的一个或多个实施例总体上涉及曲线编辑系统。更具体地,本公开的一个或多个实施例涉及用于通过使用非均匀缩放的三次曲率变化(cvc)曲线来增强曲线的系统和方法。



背景技术:

传统的曲线编辑系统使得用户能够出于诸如自由形式说明、工程设计或其他类型的技术或非技术绘图等目的来设计平滑的曲线。由这些传统的系统生成的曲线通常被称为“样条(spline)”。样条是由被称为“曲线基元(primitive)”(或简称为“曲线”)的较小的曲线元素组成的连续的曲线。曲线基元在样条中平滑地端对端连结,使得样条呈现为一个长的连续的曲线。传统的系统使用固定数量的参数来计算每个曲线基元作为紧凑的数学方程。例如,传统的系统通常使用五个参数定义二次曲线,使用六个参数定义二次贝塞尔曲线,使用八个参数定义三次贝塞尔曲线。

作为概述,传统的系统提供使得用户能够通过与显示器和输入设备交互来规定样条的用户界面。通常,传统的系统使得用户能够编辑(例如,创建和拖动)离散的点,这些离散的点又控制样条的形状。因此,这些离散的点被称为控制点。控制点可以包括内插的控制点和非内插的控制点。内插的控制点位于曲线上,并且直接约束曲线。非内插的控制点控制曲线的切线,并且与附近的内插的控制点相关联。移动非内插的控制点改变相关联的内插的控制点处的曲线的方向。如本文中所使用的,内插的控制点可以是端点或中间控制点。

较简单的传统的系统(仅使用内插的控制点的系统)的一个问题是,这样的系统必须提供控制点处的切线角。通常难以提供预期用户的期望的切线角,这导致这样的系统的一些缺点。一些传统的系统最近已经提高了绘制和创建曲线和样条的能力。例如,这些系统使用贝塞尔曲线尝试创建自然外观的曲线。在一些情况下,这些传统的系统使用二次贝塞尔曲线拟合来控制曲线内的点以实现更好外观的曲线。尽管有这些改进,这种传统的系统仍然存在很多缺点。

作为缺点的一个示例,这些传统的系统通常仅为样条提供g1连续性。“g1连续性”是指曲线平滑度的度量,其中两个曲线连接(通常在样条中),使得两个曲线的切线角在连接处匹配。然而,样条中的曲线可以实现g2连续性,其中曲率在样条中的不同曲线上也连续。更具体地,“g2连续性”是指曲线平滑度的量度,其中两个不同的曲线连接,使得两个曲线的切线角和曲率在连接处匹配。具有g2连续性的样条通常比仅具有g1连续性的样条具有更大的美学吸引力,因为g2连续性曲线的曲率趋向于逐渐变化。很多应用、包括一些工程应用需要很多传统的系统所不能提供的曲线的g2连续性。

作为缺点的另一示例,使用贝塞尔曲线的一些传统的系统将控制点放置在曲线基元的中心。因此,两个控制点之间的曲线由两个二次贝塞尔曲线的两个半部组成。这可能导致与现有系统的冲突,其需要在控制点之间有一个基元。因此,这个问题使得向后兼容性更加困难。

作为另一问题,使用贝塞尔曲线的传统的系统通常返回不合适的结果。特别地,每个三次贝塞尔曲线在理论上具有足够的自由度以设置两个端点处的切线和曲率。然而,实际上,在将端点和切线方向固定在贝塞尔曲线中之后,剩余自由度受到四次多项式方程的解的约束。这可能偶尔产生多于一个有效解,或者在一些情况下,没有有效解(例如,不是多项式的所有根都是实数,或者根不与曲线方向对准)。当被提供这些不适合的解中的一个解时,传统的系统常常中断或失效。

此外,即使当传统的系统得到曲线的正确结果时,曲线有时也不平整。如本文中所使用的,“平整”或“平整性”是指曲线的美学外观。“平整”的曲线看起来令人愉快和有美感。术语“圆度(roundness)”和“丰满度(fullness)”也可以用于描述曲线的平整性。平整性是通过使曲线中的曲率变化量最小化来实现的。术语“曲率”是指作为弧长的函数的曲线的切线角的变化率。例如,对于半径为r的圆,曲率恒定在1/r。直观地,某个点处的曲率越高,曲线在该点处越陡。注意,曲率可以是正的或负的。传统上,随着沿着曲线行进,其方向在逆时针方向上变化的曲线是正的,而其方向在顺时针方向上变化的曲线是负的。如上所述,传统的系统可以提供在高曲率曲线中不平整的三次曲线,因为曲率可能沿曲线过快地变化。换句话说,即使当传统的系统可以产生具有g2连续性的曲线时,传统的系统仍然可能产生在美学上令人不愉快的或不平整的曲线。

因此,存在关于创建和增强曲线的这些和其他问题。



技术实现要素:

本公开的实施例包括用于生成增强的曲线的系统和方法。更具体地,所公开的系统和方法通过使用非均匀缩放的三次曲率变化(cvc)曲线来产生增强的曲线。为了说明,在一个或多个实施例中,所公开的系统和方法检测定义样条中的曲线的点的用户输入。该系统和方法在单个方向上非均匀地缩放曲线以增强样条内的曲线的曲率。系统和方法然后计算与非均匀缩放的曲线相对应的多个cvc曲线。作为计算多个cvc曲线的部分,系统和方法基于非均匀缩放的曲线来识别新的端点约束。系统和方法然后在维持新的端点约束的同时下缩放非均匀缩放的曲线,以生成更丰满和更平整的增强的曲线。如果样条包括多个曲线,则系统和方法可以根据需要单独地增强样条中的每个曲线,以创建更丰富、更丰满和更平整的样条。

因此,所公开的系统和方法通过减小样条中的一个或多个曲线的曲率变化率来提供对样条中的曲线的改进的平整性。具体地,通过使用具有非均匀缩放的cvc曲线的新的曲线基元,系统和方法提高了样条中的曲线的平整性。另外,系统和方法可以针对样条中的增强的曲线的内部点(即,样条连接中的两个曲线)在两个端点处都实现g2连续性。

本公开的一个或多个实施例的附加的特征和优点将在下面的描述中阐述,并且部分地将从描述中变得容易理解,或者可以通过这样的示例实施例的实践来得知。

附图说明

将通过使用附图用附加的特征和细节来描述和解释各种实施例,在附图中:

图1a和图1b示出了根据一个或多个实施例的非增强的曲线和增强的曲线之间的示例比较;

图2a至图2i示出了根据一个或多个实施例的增强具有一个或多个曲线基元的样条中的曲线的示例过程;

图3a至图3d示出了根据一个或多个实施例的具有多个曲线的样条的示例,其中每个曲线在单独的标准坐标系中被非均匀地拉伸;

图4示出了根据一个或多个实施例的增强曲线的另一方法中的一系列动作的流程图;

图5示出了根据一个或多个实施例的增强曲线的方法中的一系列动作的流程图;

图6示出了根据一个或多个实施例的曲线增强系统的示例架构的示例示意图;以及

图7示出了根据一个或多个实施例的示例性计算设备的框图。

具体实施方式

本发明的一个或多个实施例包括改进弯曲的样条的平整性的曲线增强系统。更具体地,曲线增强系统的一个或多个实施例使用非均匀地缩放的三次曲率变化(cvc)曲线以在样条中生成增强的曲线。通过使用非均匀地缩放的cvc曲线,曲线增强系统生成更平整且更美观的曲线,这是由于曲线看起来适当地圆滑。

如下面进一步详细描述的,曲线增强系统基于两个控制点以及两个控制点的相应切线和曲率来生成更平整的曲线基元。在一个或多个实施例中,两个控制点是样条中的曲线的端点。在一些实施例中,两个控制点是样条中的相邻控制点,并且切线和曲率来自样条中的曲线的相应切线和曲率。

为了说明,在一个示例实施例中,曲线增强系统接收定义包括一个或多个曲线基元(即,曲线)的样条的至少部分的用户输入,或者至少接收曲线的内插控制点(例如,端点)的集合。曲线增强系统单独计算每个曲线的缩放因子。对于每个曲线,曲线增强系统基于相应的计算的缩放因子,诸如沿着为曲线创建的标准坐标系的y轴,在单个方向上非均匀地缩放曲线。对于每个非均匀地缩放的曲线,曲线增强系统计算cvc曲线并且从cvc曲线识别端点约束。然后,曲线增强系统在维持cvc曲线的相应识别的端点约束的同时对样条中的每个非均匀地缩放的曲线进行下缩放(其可与“下缩放”互换)。

曲线增强系统的各种实施例使用新的曲线基元来代替三次贝塞尔曲线以匹配样条中的输入曲线的切线角和曲率。特别地,曲线增强系统计算作为非均匀地缩放的cvc曲线的一个或多个新的曲线基元。cvc曲线使用三次多项式k(s)=a×s3+b×s2+c×s+d来定义,其中独立变量s是距曲线上的固定参考点的曲线的弧长,并且其中k(s)给出在距参考点的弧长为s的点处的曲率。cvc曲线包括形成cvc曲线的模板的四个参数(a、b、c和d)。这些参数可以垂直和水平地被平移、被旋转和被缩放以给出总共八个自由度——这是三次多项式所需要的自由度数——的cvc曲线。

另外注意,cvc曲线近似于曲率曲线(或“mvc曲线”)的最小变化,但是计算效率更高。mvc曲线具有被约束到给定的g2端点约束同时尽可能少地改变曲率的性质。特别地,在给定起始点,结束点、开始切线角和结束切线角的约束下,mvc曲线最小化曲率变化率的平方对弧长在曲线的整个长度上的积分。在数学上,mvc曲线使以下积分最小化:

其中s是弧长,k’(s)表示曲率关于s的导数。因为mvc曲线使曲率的变化最小化,所以mvc曲线倾向于产生平整、美观的曲线,并且因此是用于创建新的曲线基元的理想选择。然而,mvc曲线是计算密集型的并且难以精确地计算。因此,本文中的实施例使用cvc曲线作为mvc曲线的近似。应当理解,在一些情况下,根据本文中公开的实施例,使用mvc曲线来代替cvc曲线。

然而,mvc曲线和cvc近似曲线都没有被设计为适应在小距离上发生的曲率的大的变化(例如,从紧密弯曲到平缓弯曲的快速转变)。在紧密曲线的情况下,采用mvc曲线或cvc近似曲线,在所需要的曲率变化之间在曲线上添加不期望的长度。例如,对具有发夹弯的曲线应用mvc或cvc近似导致曲线被放大到大回路以减慢曲率的速率,这改变了曲线的基本形状。因此,本文中描述的一个或多个实施例增加了mvc或cvc曲线的柔性以适应紧密匝数而不显着改变基本曲线形状。例如,如下所述,一个或多个实施例采用非均匀缩放和/或下缩放来内插端点约束(例如,位置、角度和曲率),这产生比使用传统的贝塞尔曲线产生的更平整的曲线。

为了帮助处理与mvc和cvc曲线相关联的计算,曲线增强系统使用标准坐标系。特别地,曲线增强系统将样条中的每个曲线从原始坐标系分别移动到定制的标准坐标系。曲线增强系统将每个曲线定位为在标准坐标系的原点(例如,(0,0))处开始。此外,曲线增强系统旋转每个曲线,使得每个曲线的端点位于标准坐标系的水平轴(例如,x轴)上。此外,曲线增强系统缩放每个曲线以在原点与第一单位(例如,(1,0))之间拟合。然后,在标准坐标系内,曲线增强系统执行非均匀缩放并且计算cvc曲线。使用标准坐标系可以简化计算并且减少处理时间。减少的处理时间减少渲染增强的曲线时的延迟。

在一些实施例中,曲线增强系统将一个或多个贝塞尔曲线拟合到样条中的所生成的增强的曲线。一般来说,贝塞尔曲线在绘图和设计行业中比cvc曲线更常见。因此,设计应用程序可以容易地读取和渲染贝塞尔曲线。相比之下,cvc曲线并不常见,并且很多设计应用程序可能无法读取或渲染cvc曲线。因此,将贝塞尔曲线拟合到样条中的所生成的增强的曲线使得能够普遍地显示/使用增强的曲线。

在将贝塞尔曲线拟合到cvc曲线时,拟合的贝塞尔曲线可能没有极好地拟合增强的曲线,然而,贝塞尔曲线的拟合将是非常接近的近似。为了说明,曲线增强系统尝试匹配贝塞尔曲线的整体形状以适合更平整的cvc曲线基元,但没有明确要求曲率在端点处精确地匹配。特别地,曲线增强系统看到切线角匹配,使得能够维持g1连续性。此外,曲线增强系统维持近似g2连续性,但不需要精确的g2连续性。以这种方式,曲线增强系统产生更平整的样条,因为将下缩放的cvc的形状与贝塞尔曲线匹配趋向于使贝塞尔曲线近似匹配增强的曲线的曲率。此外,虽然不总是实现精确的g2连续性,但是当观察样条中的拟合曲线时,人眼可能不能区分近似的g2连续性与精确的或实际的g2连续性之间的差异。

下面参考附图来描述文档组织系统的一个或多个实施例的附加的特征和特性。图1a和图1b示出了根据一个或多个实施例的非增强的曲线100a-c和增强的曲线110a-c之间的示例比较。图1a和图1b中的线被示出为三次贝塞尔曲线。如上所述,三次贝塞尔曲线是使用八个自由度来定义曲线的参数的参数曲线。因此,三次贝塞尔曲线通常呈现为具有一个或多个曲线基元的样条。

图1a示出了三个非增强的曲线100a-c。在仔细检查时,三个非增强的曲线100a-c的端部出现畸形。为了说明,第一非增强的曲线100a具有第一端102a,非增强曲线100a在第一端102a处变平。第二非增强的曲线100b包括看起来略微变形的两个端部102b和102c。特别地,两个端部102b和102c在端点附近出现尖点并且在中心附近变平,这在接近端点处曲率变化太快的情况下发生。类似地,第三非增强曲线100c还包括看起来略微变形的两个端部102d和102e。

如上所述,当提供曲线的绘图应用与曲线中的最大曲率点稍微不对准并且使得曲线过渡过快时,发生曲线的失真。即使绘图应用在大多数时间正确地对准曲线的最大曲率点,使用绘图应用的艺术家仍然可能在每次绘图应用产生畸形曲线时感到沮丧。此外,在知道最终绘图应用将产生畸形曲线的情况下,艺术家承受对绘图应用的挫折。

与图1a中的三个畸形非增强的曲线100a-c相比,图1b示出了相应的三个增强的曲线110a-c。三个增强的曲线110a-c中的每个是使用本文中描述的曲线增强系统的实施例创建的曲线。如图所示,增强的曲线110a-c显得更圆、更丰满和更平整。例如,增强的曲线110a-c没有太快地过渡(即,曲线确实从圆形变为大部分平坦的形状并且回到圆形而没有足够的过渡),而是曲线增强系统使曲线的曲率最小化(即,曲率更缓慢地变化),以产生更美观的丰富且丰满的曲线。

图2a至图2i示出了根据一个或多个实施例的在样条中生成增强的曲线(即,曲线基元)的示例过程。更具体地,图2a至图2i示出了曲线增强系统用于创建作为样条的部分的增强的曲线的示例过程。图2a至图2i在视觉示出了创建增强的曲线的过程。根据中本文的公开内容,将理解,在使用中,曲线增强系统可以仅生成增强的曲线。因此,图2a至图2i中所示的中间步骤/曲线可以不是明确地生成的,而是可以仅是作为生成增强的曲线的过程的部分的数学计算。此外,图2a至图2i中所示的中间步骤/曲线仅用于说明目的,而不意味着限制任何特定实施例。

作为图2a至图2i的概述,曲线增强系统接收定义作为样条的部分的输入曲线的至少两个控制点的用户输入(图2a)。曲线增强系统旋转输入曲线并且将输入曲线从原始坐标系转换到标准坐标系(图2b)。使用标准坐标系,曲线增强系统识别输入曲线中的曲线基元(图2c),并且沿着一个方向非均匀地缩放输入曲线(图2e)以创建缩放的cvc曲线(图2f)。接下来,曲线增强系统在维持cvc曲线的端点约束的同时对非均匀地缩放的曲线进行下缩放(图2g)以生成增强的曲线(图2h)。曲线增强系统然后将增强的曲线旋转回到其原始定向并且在原始坐标系中渲染增强的曲线(或贝塞尔曲线拟合)(图2i)。

如简要地提及的,在图2a中,曲线增强系统接收定义输入曲线200的用户输入,输入曲线200在图2a所示的实施例中是抛物线曲线。在一些实施例中,输入是三次曲线。输入可以至少包括起始控制点和结束控制点,其可以用于形成曲线。例如,曲线200在第一端点p0处开始并且在第二端点p1处结束。两个端点p0和p1用作控制点,其提供关于曲线200的位置和方向以及关于端点的曲率的信息。出于说明的目的,将使用曲线作为用户输入来描述图2,然而,应当理解,曲线增强系统可以执行与结合图2描述的使用两个端点p0和p1以及相应的切线和曲率的现有曲线相同的功能。

在一个或多个实施例中,曲线增强系统可以是客户端设备上的绘图和/或设计应用内的部件,其使得用户能够提供用户输入以创建线、形状和设计。在其他实施例中,曲线增强系统可以与绘图和/或设计应用分离,并且驻留在同一客户端设备上或另一客户端计算上(例如,在服务器设备上)的别处。在一些实施例中,曲线增强系统可以是计算设备上的硬件部件。

在各种实施例中,曲线增强系统可以不向用户显示曲线200,直到曲线已经被增强和/或被添加到具有其他增强的曲线的样条。然而,增强样条中的曲线的过程可以足够快地发生,使得用户不会意识到曲线增强系统正在增强曲线。相反,用户提供定义曲线的输入,并且曲线增强系统向用户一致地提供如用户所预期的美观的曲线,而没有明显的延迟。

曲线增强系统向用户提供原始坐标系内的数字画布。如本文中所使用的,“原始坐标系”是指使用一个或多个数字或坐标来唯一地确定点或其他几何元素的位置的系统。原始坐标系的示例是具有在(0,0)处的原点的简单的双轴(x,y)笛卡尔坐标系。

在图2b中,曲线增强系统将曲线200定位在标准坐标系内。标准坐标系也是具有在(0,0)处的原点的简单的双轴(x,y)笛卡尔坐标系。然而,对于样条中的每个增强的曲线来定制标准坐标系。因此,当样条包括要增强的多个曲线时,曲线增强系统针对要增强的样条中的每个曲线生成新的且定制的标准坐标系。为了说明,在标准坐标系中,曲线的第一端点(即p0)对应于原点(0,0)。曲线的第二端点(即p1)对应于x轴上的(1,0),如下所述。通过针对每个曲线生成定制的标准坐标系,曲线增强系统可以相对于特定坐标系的y轴在单个方向上非均匀地拉伸曲线。

在将曲线(例如,曲线200)从原始坐标系移动到标准坐标系时,曲线增强系统将曲线平移-p0(例如,将第一端点p0移动到标准坐标系的原点(0,0))。此外,曲线增强系统旋转曲线,使得p1位于标准坐标系的x轴上并且在原点的右边。因此,曲线在标准坐标系的原点处开始,并且沿着正方向行进(即,到原点的右边)。

此外,作为移动曲线的部分,曲线增强系统将曲线缩放1/b,其中b是第一端点p0与第二端点p1之间的距离。换句话说,曲线增强系统将x坐标值设置为等于曲线的水平长度(从第一端点p0到第二端点p1测量的),使得曲线从原点(0,0)行进到第一x坐标(1,0)。如上所述,曲线增强系统针对具有一对相邻的控制点的每个曲线创建不同的标准坐标系。图2b示出了具有从图2a中的原始坐标系到标准坐标系定位曲线200的曲线增强系统。

如2c所示,使用标准坐标系,曲线增强系统识别曲线200的曲率。出于解释的目的,切角线206a和206b以及振荡圆208已经在视觉上被添加到图2c,以示出曲线200的曲率,特别是在第一端点p0处的曲率;然而,在一些实施例中,曲线增强系统可以确定曲率而不使用密切圆和/或切角线。换句话说,在各种实施例中,密切圆用作说明性辅助。如本文中所使用的,“密切圆”是指在曲线的端点处的圆,其在端点处与曲线相切。密切圆具有半径1/k(t),其中k(t)表示位置t处的曲线的曲率。因此,密切圆是在曲线的端点(例如,端点p0或p1)处最接近地近似曲线的圆,因为密切圆的切线角和曲率都与相应的曲线匹配。换句话说,密切圆在端点处在一阶导数(即角度)和二阶导数(即,曲率)两者中匹配曲线,因此是对应曲线的良好的局部g2近似。

曲线增强系统然后使用y缩放因子在标准坐标系的y方向上非均匀地缩放曲线200,以计算在端点p0、p1处具有期望的角度和曲率的曲线。曲线增强系统采用可变的y缩放比例因子,其中s根据x轴而变化。例如,曲线增强系统识别特定的x坐标(例如,曲线的起始点或结束点)的切线的角度,并且使用切线的角度来确定相应的y坐标的缩放因子s。例如,给定x坐标的切线角,曲线增强系统应用三角函数和/或三次方程来确定要应用于相应的y坐标的缩放因子s(或倒数缩放因子1/s)。在各种实施例中,标准坐标系还使用曲率值、基线值和/或常数值来确定y缩放比例因子。

图2d示出了曲线200的缩放因子s。曲线增强系统确定在0到1之间、或换句话说从第一端点p0到第二端点p1的x值的缩放因子的值。与第一端点p0和第二端点p1相关的缩放因子s在图2d中分别标记为ys0和ys1。在各种实施例中,缩放因子s例如使用平滑混合函数或如下所述的混合函数在ys0与ys1之间被混合。

在向曲线应用缩放因子之前,在一个或多个实施例中,曲线增强系统测试以确定是否使用非均匀缩放的cvc曲线将有益于生成更平整的曲线。例如,曲线增强系统将密切圆的半径与基线距离v(即,沿着相应曲线行进的距离)进行比较,以确定高矫正情况。例如,如果密切圆的半径小于基线(b)距离的六分之一,则曲线增强系统采用非均匀缩放的cvc曲线,并且下缩放以生成更美观的曲线。否则,曲线增强系统使用传统的cvc曲线来生成非增强的曲线。在一些实施例中,当测试是否采用非均匀缩放、cvc曲线和下缩放时,曲线增强系统使用距离的四分之一而不是距离的六分之一作为基线距离。

在一些实施例中,曲线增强系统聚焦在曲线(0,0)的第一端点p0附近和曲线(1,0)的第二端点p1附近的缩放因子s的值。例如,如图2d所示,缩放因子s在ys0处大约为2,而在曲线中间处x≈0.5,缩放因子s接近1,这表示没有缩放。在第二端点附近,缩放因子s变平。换句话说,曲线增强系统在曲线的端点处应用较大的缩放因子s,其中第一端点p0附近的缩放大于第二端点p1附近的缩放,与图2d所示的缩放因子s成比例。

图2e示出了缩放的曲线202,该缩放的曲线202基于图2d所示的缩放因子s在单个方向上非均匀地缩放。因为缩放的曲线202在本示例中在y方向上增加,所以缩放的曲线202看起来更高,并且因此在第一端点p0和第二端点p1附近比图2c中所示的曲线200更圆。为了说明,改变后的切角线206c和206b比图2c中所示的预缩放的曲线200的原始切角线206a和206b更垂直,其中更垂直的切角线表示曲线的曲率变化率减小,因此表示更平整的曲线。

图2f示出了基于图2e中的缩放的曲线202创建的cvc曲线210。图2f还示出了缩放的密切圆。特别地,曲线增强系统在非均匀地缩放曲线的情况下在y方向上非均匀地缩放密切圆208(图2c),以形成密切椭圆212。曲线增强系统然后舍入偏斜的密切圆或密切椭圆212以获取拉伸的密切圆214。以这种方式,曲线增强系统通过缩放和拉伸密切圆208(图2c)来减小靠近第一端点p0的曲线的曲率,以获得拉伸的密切圆214。

虽然未示出,但是在一些实施例中,曲线增强系统确定针对曲线的每个端点生成密切圆。在针对两个端点采用密切圆的情况下,曲线增强系统可以如以上关于密切圆208和偏斜的密切圆(例如,密切椭圆212)描述地拉伸第二拉伸的密切圆。此外,在采用两个密切圆的情况下,根据与密切圆所属的端点相对应的缩放因子对每个密切圆进行缩放和拉伸。这样,如果缩放因子s在ys0附近比在ys1附近更大,则与ys0相对应的第一密切圆的缩放将大于与ys1相对应的第二密切圆的缩放。

在一个或多个实施例中,曲线增强系统使用拉伸的密合圆来获得每个曲线的角度和曲率,并且在一些情况下,不知道实际的曲线。曲线增强系统然后可以使用这些“改变后的”角度(例如,改变后的切角线206c和206d)和拉伸的圆的曲率作为确定cvc曲线参数的输入。因此,当曲线被下缩放(如下所述)时,曲线将具有正确的输入角度和曲率。

如上所述,图2f示出了基于缩放的曲线202创建的cvc曲线210。通过根据缩放的曲线202计算一个或多个cvc曲线,曲线增强系统识别沿着cvc曲线的一系列点处的期望的角度和曲率(使用或不使用拉伸的密切圆),包括在曲线的端点处。具体地,端点包括使得曲线增强系统能够捕获cvc曲线的曲率和方向的端点约束(例如,起始方向、结束方向、起始曲率和结束曲率)。

在维持端点约束(即,应用端点约束)的情况下,曲线增强系统对缩放的曲线202进行下缩放。维持端点约束使得曲线增强系统能够在保留增强的曲率的同时对缩放的曲线202进行下缩放。曲线增强系统使用与缩放因子ys0和ys1成反比的逆缩放因子s-1(例如,增强的y缩放因子的倒数或1/ys0和1/ys1)来对缩放的曲线202进行下缩放。图2g示出了在用于曲线200的本示例中使用的缩放因子s-1。逆缩放因子s-1关于y=1与图2d所示的缩放因子s对称地呈现。注意,如图2g所示,在y轴上,倒数曲线在0.5和1.0之间。

在一些实施例中,当对缩放的曲线202下缩放时,曲线增强系统将逆缩放因子s-1分别应用于(0,0)和(1,0)处的增强的曲线的拉伸的密切圆。因此,在对密切圆下缩放时,曲线增强系统保持增强的曲线的增强的角度和曲率,因为将拉伸的密切圆的半径下缩放相应的逆缩放因子s-1不改变(或最小地改变)拉伸的密切圆的角度或曲率。因此,曲线增强系统使用下缩放的拉伸的密切圆来维持使用cvc曲线找到的端点约束。例如,曲线增强系统使用下缩放的拉伸的密切圆和逆缩放因子以同样基于对拉伸的密切圆下缩放来将非均匀地缩放的曲线下缩放为增强的曲线。作为注意并且如上所述,使用该方法,曲线增强系统可能不能实现实际的g2连续性,但是曲线增强系统可以实现近似的g2连续性,其中实际的g2连续性与近似的g2连续性之间的差异对于人眼是不可检测的。

为了说明,图2h示出了增强的曲线204,其是缩放的曲线202的下缩放的版本。增强的曲线204附着到下缩放的密切圆218,下缩放的密切圆218已经被下缩放逆缩放因子s-1(分别为1/ys0和1/ys1)并且具有拉伸的密切圆214的相同的角度和曲率。因为拉伸的密切圆214以及因此下缩放的密切圆218已经减小了曲线200的曲率,增强的曲线204将具有更丰满的、更圆的曲线,其对于用户来说更加平整和美观。或者,在一些实施例中,图2h可以表示已经被下缩放并且增强的一个或多个cvc曲线。在这些实施例中,曲线增强系统将一个或多个贝塞尔曲线拟合到下缩放的cvc曲线,如下所述。

图2i示出了将增强的曲线204旋转回其原始定向的曲线增强系统。例如,曲线增强系统通过在标准坐标系内将增强的曲线204移动+p0(来自图2a)来重新定位增强的曲线204。此外,在图2i中,曲线增强系统在原始坐标系中重新定位增强的曲线204。当将输入曲线200与增强的曲线204进行比较时,可以看出增强的曲线204更加平整。对很多人而言,增加的圆度使得增强的曲线204更美观。

在一个或多个实施例中,图2i中的增强的曲线204可以是贝塞尔曲线。例如,曲线增强系统可以在将增强的曲线204转换回原始坐标系之前,将一个或多个贝塞尔曲线拟合到下缩放的曲线202。或者,曲线增强系统可以将一个或多个贝塞尔曲线拟合到拉伸的曲线202(或直接拟合到cvc曲线210),并且向一个或多个贝塞尔曲线应用逆缩放(即下缩放)和旋转以生成增强的曲线204。下面提供关于将单个贝塞尔曲线或多个贝塞尔曲线拟合到拉伸的曲线202、下缩放的曲线204或cvc曲线210的附加细节。

图3a至图3d示出了根据一个或多个实施例的具有多个曲线的样条的示例,其中每个曲线在单独的标准坐标系中被非均匀地拉伸。如上所述,曲线增强系统可以增强样条中的多个曲线以创建更丰富和更丰满的样条。为了说明,图3a示出了样条300,其包括第一曲线302、第二曲线304和第三曲线306。

如上所述,曲线增强系统仅需要两个控制点来增强曲线。当多个曲线在样条中时,曲线增强系统可以使用中间控制点来增强每个曲线的曲线。一般来说,如果样条中有n个曲线,则曲线增强系统需要n+1个控制点来增强样条中的每个曲线。

如图所示,每个曲线304-306具有两个控制点。第一曲线302在控制点p0处开始并且在控制点p1处结束。第二曲线304在控制点p1处开始并且在控制点p2处结束。第三曲线306在控制点p2处开始并且在控制点p3处结束。注意,样条300中的每个曲线304-306与另一曲线共享至少一个控制点。

如上所述,曲线增强系统分别增强样条300中的每个曲线304-306。为了说明,曲线增强系统将第一曲线302平移并且旋转到图3b所示的第一定制的标准坐标系310中。曲线增强系统将第二曲线304平移并且旋转到图3c所示的第二定制的标准坐标系320中。同样,曲线增强系统将第三曲线306平移并且旋转到图3d所示的第三定制的标准坐标系330中。

因为每个曲线在定制的标准坐标系中,所以曲线增强系统可以关于曲线对应的定制的标准坐标系非均匀地缩放每个曲线304-306,如上所述。此外,使用定制的标准坐标系,曲线增强系统可以使用上述并且在下面进一步详细描述的系统和方法独立地增强每个曲线。在每个曲线被增强之后,曲线增强系统可以生成增强的样条或者具有增强的曲线的样条。

现在已经参考图2a至图2i和图3a至图3d提供了增强输入样条的过程的概述,这里在下面提供该过程的附加细节。

如上所述,曲线增强系统计算标准坐标系内的cvc曲线。在描述曲线增强系统如何计算cvc曲线之前,提供了计算cvc参数的高级描述。特别地,描述了曲线增强系统可以在一些实施例中采用的顶级算法。注意,算法的输出是一系列cvc曲线。此外,在该算法中,每个cvc曲线用具有十个字段的结构表示,这些字段给出在cvc曲线上构建点所需要的参数。这些参数总结在下表1中。在一些实施例中,表1中的字段被表示为浮点数。在其他实施例中,表1中的字段可以是另一种类型的数据。

表1

曲线增强系统采用一系列n个控制点p(1)、p(2)、...p(n)作为输入并且生成表示为c(1)、c(2)、...c(n-1)的一系列n-1个cvc曲线作为输出。具体地,计算变量a和k。变量a和k表示在n个控制点中的每个控制点处保持所需要的角度和曲率的阵列。曲线增强系统使用二次kcurve算法基于控制点(p)计算a和k,二次kcurve算法计算二次kappa曲线。例如,曲线增强系统实现如在美国专利公开no.2015/0062129中所描述的二次kcurve算法,其在此通过引用整体并入。在使用二次kcurve算法计算a和k之后,曲线增强系统使用cvc算法计算相邻的控制点之间的每个cvc曲线。如上所述,曲线增强系统关于标准坐标系使用cvc算法。cvc算法的一个实施例采用(p0,p1,a0,a1,k0,k1)作为输入并且提供输出(c)。如上所述,输入p0和p1是曲线开始(例如,第一结束点p0)和结束(例如,第二结束点p1)的控制点,输入a0和a1是曲线的开始和结束处的切线的角度,并且输入k0和k1是曲线的开始和结束处的曲率。

曲线增强系统使用以下距离算法来计算起始点与结束点之间的距离:b=sqrt((p1.x-p0.x)2+(p1.y-p0.y)2)。通常,符号“p.x”指代由变量p引用的点的x坐标。同样,“p.y”是由变量p引用的点的y坐标。另外,符号“a.b”指代a是结构,而b是该结构的字段名称。此外,“a.b”本身是字段的值。

曲线增强系统计算kmax,其为当前曲线的端点处的最大允许曲率,如kmax=h/b。曲线增强系统定义常数h,其用于确定曲线何时需要被非均匀地缩放以及缩放多少。常数h具有物理解释,其是当曲线端点之间的距离为1时cvc曲线的任一端处的最大允许曲率。例如,在一个或多个实施例中,曲线增强系统将h定义为4。在替代实施例中,曲线增强系统使用其它常数值。

曲线增强系统计算分别被应用于曲线的开始和结束的非均匀比例因子(1/ys0)和(1/ys1)的倒数。曲线增强系统然后将非均匀比例因子的倒数存储到结构c中。在很多情况下,与直接使用比例因子本身相比,使用比例因子的倒数的计算密集性要小。

为了计算非均匀比例因子(1/ys0)和(1/ys1),使用以下公式:1/ys0=syforkratio(k0/kmax,a0)和1/ysi=syforkratio(k1/kmax,a1)。其中如果abs(a)<1e-10,则函数sy为1。否则,sysq=-cot(a)2+

sysq=cot(a)2+(2×cos(π/6+(1/3)×asin(((3/2)×sqrt(3)×cr×cos(a)2×sin(a))))/(sin(a)3×sqrt(3)×cr)andsy=aqrt(sysq)。输入cr是所需要的曲率与最大允许曲率的比率。输入a是端点处的切线角。如图所示,曲线增强系统检查非常小的角度,因为在这种情况下主计算是数值不稳定的。曲线增强系统计算改变后的曲率的平方。该计算涉及求解三次方程并且取中间根。通过三角法对该三次方程直接求解。注意,此函数返回用于根据cvc曲线计算曲线的比例因子的倒数。

接下来,曲线增强系统计算改变后的角度和曲率。在计算改变后的角度和曲率时,假定标准坐标系已经通过c.ys0(c.ys0=1/invys0)与c.ys1(c.ysi=1/invysi)之间的混合从起始点到结束点被拉伸。第一改变后的角度计算为a0altered=atan2(invys0×sin(a0),cos(a0))。第二改变后的角度计算为a1altered=atan2(invys1×sin(a1),cos(a1))。

改变后的曲率(k0altered和k1altered)通常小于kmax。特别地,曲线增强系统如下计算改变后的角度和曲率:ksc=(sqrt(8)×k.×sy)/((1+sysq-(sysq-1)×cos(2×ang)).3/2)。输入k和ang是原始坐标系中的所需要的曲率和角度,输入sy是倒数缩放因子,其中sysq=sy×sy。上述函数返回在y方向上被缩放sy的在(0,0)处的密切圆的曲率。密切圆是半径为1/k并且经过(0,0)和角度ang的通过(0,0)的唯一的圆。

接着,曲线增强系统计算作为确定曲率的多项式的系数k(s)=a×s3+b×s2+c×s+d,并且因此使用a0altered、a1altered、b×k0altered、b×k1altered作为输入计算cvc曲线在标准坐标系中的形状。注意,标准坐标系比原始坐标系小b倍,因此曲率可以相应地放大,其中1/b是从起始点到结束点的曲线的长度。

曲线增强系统计算1/ys0和1/ys1的倒数,以将它们存储到要返回的cvc结构中。曲线增强系统然后计算从标准坐标系到原始坐标系所需要的平移、旋转和缩放作为c.tx=p0.x、c.ty=p0.y、c.r=atan2(p1.y-p0.y,p1.x-p0.x)和c.s=b。

将描述关于由曲线增强系统进行的拉伸和下缩放的附加细节。在一些情况下,用于缩放cvc曲线的变量y缩放可以是在cvc曲线上生成点的先决条件。如上所述,曲线增强系统的y缩放的量可以取决于标准坐标系中的x坐标。例如,中间点处的缩放量将由混合函数b(x)控制,给定x坐标指示要在点(x,y)处使用多少ys0和多少ys1。如前所述,混合函数使用给定的x坐标并且计算要在点(x,y)处使用的ys0和ys1的混合。

混合函数使用a=x/b和b=3×a2-2×a3。第一输入参数x是点的x坐标,第二参数b是基线长度。如图所示,当x=0时a为0,当x=b时a为1。在很多实施例中,曲线增强系统不使用简单的线性混合函数。其一个原因是,当x=0或当x=b时,混合函数应当关于x具有导数0。当使用变量y缩放时,这一属性允许曲率以可预测的方式改变。或者,在一些实施例中,曲线增强系统使用具有附加要求的简单的线性混合函数,附加要求为:当x=0时曲线增强系统返回0,当x=b时曲线增强系统返回1。

在一个或多个实施例中,为了实现更高的精度,曲线增强系统可以应用具有混合函数的变量y缩放,其以与ys0的均匀缩放将改变起始点处的曲率和ys1的均匀缩放将改变结束点处的曲率相同的方式来改变端点处的曲率。当在密切圆上使用固定的y缩放来计算上述cvc曲线中的改变后的角度和曲率时,这一点不是微不足道的。(注意,上述混合函数是在x=0处为0并且在x=1处为1的最简单并且在x=0和x=1处具有零导数的多项式)。

例如,曲线增强系统根据x、y、b、ys0、ys1来计算变量y缩放。特别地,s=(1-b)/ys0+b/ys1。还作为更复杂的混合函数ys=s×y和xs=x的部分,如上所述。如图所示,输入x是点的x坐标,输入b是基线长度,输入y是点的y坐标,输入ys0和ys1是左右y缩放因子。更复杂的混合函数返回点的y坐标的新值。该函数是旨在将y坐标减小到更接近基线并且增加端点处的曲率的向前y缩放。注意,该函数使用混合因子b来内插ys0和ys1的倒数以计算ys,然后将其用作逆缩放因子。为了反转或应用逆变量y缩放(例如,下缩放),曲线增强系统可以使用以下函数:s=(1-b)/ys0+b/ys1;ys=y/s;和xs=x。

通过对曲线增强系统的拉伸和下缩放的理解,现在将描述包括在cvc曲线上生成控制点的曲线增强系统的实施例。这些实施例假定曲线增强系统在标准坐标系内操作并且使用描述用于期望曲线的连续的cvc曲线的结构的阵列。

曲线增强系统的目的是通过在沿着该曲线的一系列紧密间隔的点之间绘制线来产生平滑曲线的错觉。因此,这个过程的有用输入参数是连续的这样的点之间的期望间隔。可以理解,给定用于为一个cvc曲线产生这样的点集的描述,同样可以产生样条中的附加cvc曲线的附加点集。因此,为了简单起见,仅描述了用于将一个cvc转换为原始坐标系中在点之间具有规定的间隔的一系列点的方法。

下面描述的在cvc曲线上生成控制点的方法假定理解针对标准坐标系中的cvc曲线生成点的序列。以这种方式,曲线增强系统仅需要执行以下功能:(a)根据原始坐标系中的期望间距估计标准坐标系中的点的间距,(b)应用变量y缩放以根据cvc曲线获得缩放的曲线,以及(c)将所生成的点转换到原始坐标系。

cvc曲线函数将c和所需要的点间距作为输入。曲线增强系统计算标准坐标系中的所需要的点间距作为cspc=spacing×c.s。曲线增强系统在标准坐标系中在下缩放之前计算cvc点作为[cx,cy,n]=pointsoncvc(c.a,c.b,c.c,c.d,cspc)。曲线增强系统预先计算用于从标准坐标系到原始坐标系的旋转和缩放的值作为scc=c.s×cos(c.r)和scs=c.s×sin(c.r)。曲线增强系统分配阵列以保存要返回的点的列表作为x=allocate(n)和y=allocate(n)。曲线增强系统然后根据上述函数执行变量y缩放(缩放),其中[xs、ys]=variableyscale(cx(i),cy(i),c.b,c.b,ys0,c.b.ys1)。曲线增强系统执行从标准坐标系到原点标准坐标系的转换作为x(i)=c.tx+scc×xs-scs×ys和y(i)=c.ty+scs×xs+scc×ys。

接下来,曲线增强系统可以将单个贝塞尔曲线或多个贝塞尔曲线拟合到一个或多个cvc曲线。为了简洁起见,下面的描述将贝塞尔曲线拟合到来自一个cvc曲线的点;可以从其外推将贝塞尔曲线拟合到附加的cvc曲线。此外,应当注意,不管点来自哪里,本文中描述的曲线增强系统的实施例可以使用任何可用的方法来执行曲线拟合。

在一个或多个实施例中,为了执行三次贝塞尔曲线拟合,曲线增强系统使用以下函数:该函数将与点的序列相对应的x和y坐标的阵列以及第一点和最后点的切线角作为输入,并且产生三次贝塞尔曲线的八个系数作为输出。三次贝塞尔曲线的八个系数应该尽可能接近地匹配第一点和最后点、以及给出从任何输入点到所计算的三次贝塞尔曲线的最大距离的误差项。

在一个或多个实施例中,该函数的调用形式是[p1,p2,maxerror]=fitcubicbezier(x,y,n,a0,a1),其中输入x和y给出要拟合的n个点的坐标,输入a0和a1分别给出在第一点和最后点处所需要的切线角。如上所述,三次贝塞尔曲线具有四个控制点,每个控制点具有x和y坐标,通常表示为p0、p1、p2和p3。第一控制点p0通常与x、y坐标列表中的第一点匹配(即,p0=(x(1),y(1)),并且通常不被返回。同样,最后的控制点p3应当等于列表中的最后点的位置(即,p3=(x(n),y(n)))并且也不被返回。因此,拟合例程仅需要返回中间的两个控制点p1和p2。

如上所述,在一些实施例中,曲线增强系统可以将单个三次贝塞尔曲线拟合到来自每个缩放的cvc曲线的点。在这些实施例中,曲线增强系统针对从每个单独的缩放的cvc曲线获得的点来调用上述曲线拟合函数。

曲线增强系统从二次曲线系统、诸如上述的二次曲线(或“qkc”)获得所需要的角度和曲率。曲线增强系统如上所述生成cvc参数。曲线增强系统分配阵列z,以将三次贝塞尔曲线的控制点保持为z=allocatepoints(3×(n-1)+1)。曲线增强系统将第一贝塞尔控制点设置为第一用户控制点p作为z(1)=p(1)。

然后曲线增强系统计算每个cvc曲线的连续的贝塞尔控制点。特别地,曲线增强系统将cvc曲线转换为一组精细采样的点。曲线增强系统将单个三次贝塞尔曲线拟合到这些点。注意,通信会话可以通过在一个曲线的结束处和下一曲线的开始处使用相同的角度来实施贝塞尔曲线之间的g1连续性。曲线增强系统将内部控制点p1和p2转移到阵列z作为z((i-1)×3+2)×p1和z((i-1)×3+3)=p2。曲线增强系统将曲线之间的用户控制点复制到阵列z作为z((i-1)×3+4)=p(i+1)。

如上所述,在一些实施例中,曲线增强系统可以在非均匀缩放和/或下缩放之前将单个三次贝塞尔曲线一次拟合到来自每个缩放的cvc曲线的点。在上述实施例中,曲线增强系统在拟合贝塞尔曲线之前对cvc曲线上的点应用非均匀变量y缩放。在当前描述的实施例中,交换了操作的顺序。也就是说,曲线增强系统在应用非均匀变量y缩放之前将贝塞尔曲线拟合到未缩放的cvc曲线上的点。

在实践中,该方法产生优于上述实施例的一些优点。例如,作为一个优点,贝塞尔曲线拟合通常在标准cvc曲线上工作更好。例如,贝塞尔曲线拟合是一个迭代过程,对于标准cvc曲线更快且更准确地收敛。作为另一示例,在一些情况下,如果贝塞尔曲线在非均匀缩放和下缩放之前优化到标准cvc曲线的拟合,则曲线增强系统可以实现稍微更好的视觉外观。

然而,一个缺点是,如果在贝塞尔曲线拟合之后缩放和下缩放点,则这些点可能不再形成贝塞尔曲线。当这种情况发生时,曲线增强系统需要应用另一轮贝塞尔曲线拟合。这个增加的循环可能使上述第一优点无效。

作为对该缺点的一种解决方案,曲线增强系统可以将非均匀缩放和下缩放操作应用于贝塞尔曲线以通过简单地修改贝塞尔曲线的控制点来拟合cvc曲线。在一些情况下,这给出了与中间控制点(例如,p1和p2(而非结束控制点p0和p3))的x坐标在标准坐标系中的1/3和2/3处的情况下相同的结果。

在其他情况下,曲线将不相同,但是视觉外观将仍然保持出现圆形和平整的期望属性,因为起始和结束切线将是正确的,曲率将近似正确,并且最终贝塞尔曲线通常仍然遵循增强的cvc曲线的形状。这通过曲线增强系统获得标准cvc曲线上的点来实现(注意点在标准坐标系中)。曲线增强系统将三次贝塞尔拟合到这些点,并且由于输入点在标准坐标系中,所以被返回的两个控制点q1和q2也将处于标准坐标系中。

曲线增强系统将通常应用非均匀变量y缩放的y缩放因子应用于控制点本身。其中ql.y=q1.y×c.ys0并且q2.y=q2.y×c.ys1。在对贝塞尔控制点的y坐标进行这种调整之后,它们的切线角将具有与增强的曲线所需要的相同的值,并且端点曲率将近似正确。

曲线增强系统将标准坐标中的控制点q1和q2转换为原始坐标中的控制点p1和p2,为p1.x=c.tx+c.s×cos(c.r)×q1.x-c.s×sin(c.r)×q1.y;p1.y=c.ty+c.s×sin(c.r)×q1.x+c.s×cos(c.r)×q1.y;.x=c.tx+c.s×cos(c.r)×q2.x-c.s×sin(c.r)×q2.y;以及p2.y=c.ty+c.s×sin(c.r)×q2.x+c.s×cos(c.r)×q2。

如上所述,在一些实施例中,曲线增强系统可以将多个三次贝塞尔曲线一次拟合到单个cvc曲线。具体地,上面讨论了涉及将多个三次贝塞尔曲线拟合到来自单个cvc曲线的点的实施例。在这些实施例中,曲线增强系统可以规定贝塞尔曲线与原点之间的最大容许误差。在这种情况下,曲线增强系统从每个cvc曲线获得最小数量的贝塞尔曲线和/或点,使得从每个曲线到其点的最大误差小于误差容限。

应当理解,可以容易地修改上述内容以实现该目的。例如,曲线增强系统可以尝试拟合点。如果返回的误差太大,则曲线增强系统可以将点集大致分成一半,并且再次尝试将贝塞尔曲线拟合到每个半部。如果再次尝试拟合曲线未能产生所需要的误差,则曲线增强系统可以将不合格的点集再次分成两半。曲线增强系统可以递归地重复该过程,直到所得到的点集足够小以准确地拟合所需要的误差。注意,如果点的数量为4或更少,则单个贝塞尔曲线可以精确地拟合到点。

在一个或多个实施例中,曲线拟合函数需要在每个端点处提供的角度。如果曲线增强系统试图拟合具有例如从j到k的索引的点序列。如果j不是1,则曲线增强系统提供第一点的角度。如果k不是n,则曲线增强系统提供最后点的角度。然而,这些角度可以从曲率多项式k(s)=a×s3+b×s2+c×s+d推导出。(从上面回忆,该多项式的系数存储在结构c(i)中)。因此,曲线增强系统可以通过对每个弧长的曲率进行积分来获得点之间的曲线的角度差。因此,曲线增强系统可以使用a×s4/4+b×s3/3+c×s2/2+d×s计算从参考点到任何其它点的角度差,其中s是到参考点的弧长。此外,如果在曲线的中间使用参考点,则曲线增强系统可以从索引j(或k)计算s作为(j-n/2)×间距/s。此外,然后将由曲线增强系统获得的角度(以弧度表示)应用于所有曲线旋转,以在原始坐标系中获得角度。应当理解,其他技术也可以适于将贝塞尔曲线拟合到由曲线增强系统生成的cvc曲线。

图1a-3d、相应的文本和示例提供了根据一个或多个实施例的用于生成增强的曲线和线的多个不同的系统和设备。除了前述之外,一个或多个实施例也可以在包括用于实现特定结果的方法中的动作和步骤的流程图的方面来描述。例如,图4和图5示出了根据一个或多个实施例的示例性方法的流程图。关于图3和图4描述的方法可以用更少或更多的步骤/动作来执行,或者步骤/动作可以以不同的顺序来执行。另外,本文中所描述的步骤/动作可以彼此并行地重复或执行,或者与相同或类似的步骤/动作的不同实例并行地重复或执行。

图4示出了根据本文中公开的一个或多个实施例的增强曲线的另一方法400中的一系列动作的流程图。在一个或多个实施例中,方法400在数字介质环境中实现,用于从用户接收输入并且基于用户输入来渲染基于样条的设计。此外,计算设备、诸如客户端设备400或计算设备600可以实现实现方法400的曲线增强系统。

方法400包括构造通过内插的控制点的集合的样条的动作410。可以规定在每个内插的控制点处的切线角和曲率。在一个或多个实施例中,动作410涉及使用二次kcurve算法来计算每个内插的控制点的切线角和曲率。具体地,动作410可以涉及使用三次曲率变化(cvc)曲线基元来使用给定的曲率和角度在每个相邻的点对之间构造cvc曲线。

如图4所示,还包括非均匀缩放曲率和角度以生成上缩放的cvc曲线的动作420。具体地,动作420可以涉及将每个内插的控制点的曲率和角度以非均匀缩放因子非均匀地缩放,以生成上缩放的cvc曲线202。例如,动作420可以涉及在单个方向上以缩放因子非均匀地缩放。例如,动作420可以包括使用变量y缩放的缩放。此外,在各种实施例中,缩放因子基于作为两个端点的函数的非线性混合函数,其中非线性混合函数基于曲线沿着标准坐标系统的水平轴的位置和基线长度。

方法400还包括从上缩放的cvc曲线识别端点约束的动作430。在一些实施例中,来自上缩放的cvc曲线的端点约束包括起始方向、结束方向、起始曲率和结束曲率。在一个或多个实施例中,端点约束可以对应于相应的密切圆的角度和曲率。此外,在另外的实施例中,来自多个cvc曲线的端点约束是曲率连续的,使得在多个cvc曲线的端点处开始的曲线基元的切线角和曲率在多个cvc曲线之间的连结点处匹配。

此外,方法400包括在维持端点约束的同时下缩放上缩放的cvc曲线的动作440。具体地,动作460可以涉及在维持端点约束的同时使用与非均匀缩放因子成反比的下缩放因子来下缩放上缩放的cvc曲线。在一些另外的实施例中,下缩放的动作440包括将上缩放的cvc曲线缩放逆变量y缩放因子。

方法400还包括在样条中渲染曲线基元的动作450。例如,动作450可以包括将下缩放的贝塞尔曲线基元渲染为增强的曲线204。另外,方法400可以包括将贝塞尔曲线拟合到下缩放的cvc曲线并且渲染拟合的贝塞尔曲线。或者,动作450可以包括在下缩放上缩放的cvc曲线之前将贝塞尔曲线拟合到上缩放的cvc曲线。

作为另一示例,方法400可以包括通过平移、旋转和缩放曲线将曲线变换到标准坐标系的另一动作。在一些实施例中,方法400可以包括如下动作:识别曲线的弧长,计算与曲线的端点中的端点相邻的切向振荡圆的半径,确定切向振荡圆的半径小于曲线的弧长的六分之一,并且基于上述确定来非均匀地缩放。

图5示出了根据本文中公开的一个或多个实施例的增强曲线的方法500中的一系列动作的流程图。在一个或多个实施例中,方法500在数字介质环境中实现,用于从用户接收输入并且基于用户输入来渲染基于曲线的设计。此外,计算设备、诸如客户端设备400或计算设备600可以实现实现方法500的曲线增强系统。

方法500包括检测样条的动作510。具体地,动作510可以涉及检测定义具有一个或多个曲线基元的样条的至少部分的用户输入。例如,检测用户输入的动作510可以包括检测触敏设备、诸如触笔或触摸屏上的笔划。在一个或多个实施例中,检测用户输入的动作510可以包括检测用户从第一端点到第二端点提供输入。

方法500还包括非均匀地缩放样条中的曲线的动作520。特别地,动作520可以涉及在单个方向上非均匀地缩放曲线基元。在一些实施例中,动作520涉及基于曲线沿着水平轴的垂直值来在单个方向上非均匀地缩放曲线。例如,动作520可以包括使用变量y缩放来非均匀地缩放曲线。此外,在各种实施例中,非均匀缩放可以在标准坐标系中发生。

方法500还包括识别端点约束的动作530。具体地,动作530可以包括从非均匀缩放的曲线202识别端点约束。在各种实施例中,动作530还可以涉及采用与每个端点相关联的振荡圆来识别端点约束。

另外,方法500包括计算多个三次曲率变化曲线的动作540。特别地,动作540可以涉及计算与端点约束相对应的多个三次曲率变化(cvc)曲线210。在一个或多个实施例中,该方法还可以包括确定曲线200关于参考点的弧长的动作,并且计算多个cvc曲线210可以包括基于曲线的弧长来计算多个cvc曲线。

方法500还包括下缩放多个cvc曲线以在样条中生成增强的曲线的动作550。特别地,动作550可以涉及在维持端点约束的同时下缩放多个cvc曲线以生成增强的曲线204。在一些附加实施例中,下缩放非均匀缩放的曲线202的动作550涉及与缩放非均匀曲线202成反比地下缩放非均匀缩放的曲线202。

方法500还可以包括附加动作。例如,方法500可以包括平移曲线的动作。在一些实施例中,平移曲线包括将曲线的起始点定位在标准坐标系的原点处,关于标准坐标系旋转曲线,使得曲线关于标准坐标系的水平轴水平,在标准坐标系内缩放曲线,使得曲线的结束点在沿着标准坐标系的水平轴的第一单位处。

作为另一示例,方法500可以包括将单个贝塞尔曲线拟合到增强的曲线的另一动作。在一些情况下,单贝塞尔曲线被拟合到增强的曲线,而不需要贝塞尔曲线的曲率精确地匹配增强的曲线的端点。此外,该附加动作可以涉及将单个贝塞尔曲线拟合到多个cvc曲线。在一些情况下,曲线形式具有内插的控制点的集合,其中针对内插的控制点的集合中的每个点规定了切线和曲率,并且其中计算多个cvc曲线包括使用曲线的曲线基元来在每个内插的控制点的集合之间构造多个cvc曲线。

图6示出了根据一个或多个实施例的曲线增强系统602的示例性示意性架构图。如图所示,计算设备600可以实现曲线增强系统602。计算设备600可以包括各种计算设备。例如,计算设备600可以是移动设备(例如,移动电话、智能电话、pda、平板电脑、膝上型计算机、相机、跟踪器、手表、可穿戴设备等)。在一些实施例中,计算设备600可以是非移动设备(例如,台式计算机或另一类型的客户端设备)。关于计算设备600的附加细节将在下面参考图6进行讨论。

如图6所示,曲线增强系统602可以包括用于执行本文中所描述的过程和特征的各种部件。例如,在图6所示的实施例中,曲线增强系统602包括输入检测器604、曲线变换器606、非均匀缩放器608、cvc曲线生成器610、曲线下缩放器610和贝塞尔曲线拟合器614。

曲线增强系统602的部件604-514可以包括软件、硬件或这两者。例如,部件604-514可以包括存储在计算机可读存储介质上并且由诸如客户端设备或服务器设备等一个或多个计算设备的处理器可执行的一个或多个指令。当由一个或多个处理器执行时,曲线增强系统602的计算机可执行指令可以引起计算设备执行本文中所描述的特征学习方法。或者,部件604-514可以包括硬件,诸如执行某一功能或一组功能的专用处理设备。或者,曲线增强系统602的部件604-514可以包括计算机可执行指令和硬件的组合。

如上所述,曲线增强系统602包括输入检测器604。在一个或多个实施例中,输入检测器604可以以任何合适的方式检测、接收和/或促进用户输入。在一些示例中,输入检测器604检测关于用户界面的一个或多个用户交互。如本文中所提及的,“用户交互”是指通过一个或多个输入设备从用户接收的单个交互或交互的组合。

例如,输入检测器604可以检测来自鼠标、触摸板、触摸屏、触控笔和/或任何其他输入设备的用户交互。在客户端设备600包括触摸屏的情况下,输入检测器604可以检测来自形成用户交互的用户的一个或多个触摸姿势(例如,滑动姿势、敲击姿势、捏合姿势或反向捏合姿势)或笔划。在一些示例中,用户提供涉及和/或指向用户界面的一个或多个图形对象或图形元素的触摸姿势。

曲线增强系统602响应于输入检测器604检测到用户输入和/或接收到其他数据来执行一个或多个功能。通常,用户可以通过提供被提供给曲线增强系统602的一个或多个用户输入来创建增强的曲线。例如,响应于输入检测器604检测到用户输入,诸如定义曲线的输入,曲线增强系统602的一个或多个部件渲染增强的曲线。

输入检测器604接收用户输入,诸如笔划。笔划可以定义形成样条的曲线。如本文中所使用的,术语“笔划”是指具有一个或多个曲线的样条的至少部分。例如,笔划可以包括由用户在此接合输入设备的起始点、用户在此脱离输入设备的结束点以及起始点与结束点之间的路径定义的整个样条。或者,笔划可以仅包括由用户在此接合输入设备的起始点、用户在此脱离输入设备的结束点以及起始点与结束点之间的路径定义的样条的部分。

曲线增强系统602还包括曲线变换器606。通常,曲线变换器606将输入曲线或样条从原始坐标系变换到标准坐标系。作为变换过程的部分,曲线变换器606在标准坐标系中定位并且旋转输入曲线。另外,曲线变换器606在标准坐标系中拟合输入曲线。如上所述,曲线变换器606可以针对输入样条的每个输入曲线或部分将曲线平移到定制的标准坐标系。

如前所述,曲线变换器606在标准坐标系中定位和旋转输入曲线作为变换过程的部分。特别地,曲线将输入的曲线移动到标准坐标系中,并且将曲线的起始点(例如,第一端点)定位在标准坐标系的原点(即,(0,0))。此外,曲线变换器606水平地旋转输入的曲线,使得曲线的端点位于标准坐标系的x轴上。

此外,曲线变换器606在标准坐标系中拟合或缩放输入曲线。利用x轴(或y轴)上的端点,曲线变换器606将曲线的最后端点(例如,第二端点)拟合到x轴(或y轴)的第一坐标,诸如在x=1。换句话说,曲线变换器606拟合该曲线以在原点(0,0)处开始并且在第一坐标(1,0)处结束。曲线变换器606可以重新定尺寸输入的曲线以在标准坐标系的第一坐标内拟合,或者重新定尺寸标准坐标系以拟合输入的曲线。此外,在拟合输入的曲线时,曲线变换器606均匀地重新定尺寸输入的曲线,使得输入的曲线在所有方向上均匀地增长或收缩。

如上所述,曲线增强系统602包括非均匀缩放器608。通过在标准坐标系内拟合并且定位的曲线,非均匀缩放器608将缩放因子应用于曲线。非均匀缩放器608在单个方向上非均匀地缩放曲线。一般来说,非均匀缩放器608垂直于曲线在其上开始和结束的标准坐标系的轴来缩放曲线。例如,如果曲线在x轴上开始和结束,则非均匀缩放器608将在y方向上缩放曲线。

在一个或多个实施例中,非均匀缩放器608基于缩放因子s来缩放曲线。特别地,曲线增强系统可以通过仅缩放y坐标来非均匀地缩放曲线中的点(x,y),从而对于缩放因子s<1,所得到的点是(x,s×y)。在一些实施例中,缩放因子是可变缩放因子并且取决于x坐标。换句话说,曲线增强系统可以针对曲线中的每个曲线基元和/或点应用不同的缩放因子。

cvc曲线生成器610通常基于非均匀缩放的曲线来生成cvc曲线。更具体地,cvc曲线生成器610基于非均匀缩放的曲线来生成cvc曲线和端点约束,这提供使得曲线增强系统602能够生成增强的曲线和线的条件。

在一个或多个实施例中,cvc曲线生成器610使用振荡圆来计算cvc曲线的端点约束。如上所述,可以沿着单个方向非均匀地缩放振荡圆连同曲线以形成非均匀缩放的椭圆,以获得增强的曲线的增强的角度和曲率。cvc曲线生成器610然后可以将非均匀缩放的椭圆拉伸或圆化回到拉伸的振荡圆,同时维持增强的曲线的增强的角度和曲率。因此,拉伸的振荡圆可以共享与期望的端点约束相似的参数,包括起始点(或结束点)、方向和曲率。

曲线下缩放器612对非均匀缩放的曲线下缩放。曲线下缩放器612将逆缩放因子应用于非均匀缩放的曲线。此外,在下缩放非均匀缩放的曲线的同时,曲线下缩放器612维持来自cvc曲线的端点约束。以这种方式,曲线下缩放器612生成具有增强的曲线的增强的曲线。

在一些实施例中,曲线下缩放器612计算逆缩放因子,其与用于非均匀地缩放曲线的缩放因子成反比。例如,如果缩放因子是ys0和ys1,则逆缩放因子是1/ys0和1/ys1。因此,逆缩放因子也可以基于x坐标是可变的,如前所述。

在一个或多个实施例中,在使用拉伸的振荡圆的情况下,曲线下缩放器612下缩放拉伸的振荡圆。例如,曲线下缩放器612将逆缩放因子应用于分别在(0,0)和(1,0)处的增强的曲线的拉伸的密切圆。在下缩放拉伸的密切圆的过程中,曲线下缩放器612保持增强的曲线的增强的角度和曲率,因为下缩放拉伸的密切圆的半径不会改变拉伸的密切圆的角度或曲率。这样,曲线下缩放器612可以使用下缩放的密切圆来维持使用cvc曲线找到的端点约束。特别地,曲线变换器606使用下缩放的密切圆和逆缩放因子来同样下缩放、非均匀地缩放曲线称为增强的曲线,同时基于下缩放的密切圆维持增强曲线。

在一些实施例中,上述的曲线变换器606将增强的曲线从标准坐标系重新变换回原始坐标系。例如,曲线变换器606可以旋转增强的曲线以匹配预增强的曲线的原始定向。因此,如果预增强的曲线处于47度角,则曲线变换器606可以将增强的曲线旋转到47度。此外,曲线变换器606可以确保增强的曲线的起始点(例如,第一端点)和结束点(例如,第二端点)与预增强的曲线的起始点和端点在原始坐标系中匹配。

如图6所示,曲线增强系统602包括贝塞尔曲线拟合器614。在一些实施例中,贝塞尔曲线拟合器614可以是可选的。例如,曲线增强系统生成增强的线,并且单独的系统可以执行贝塞尔曲线拟合。或者,曲线增强系统602可以直接向绘图应用或渲染程序提供一个或多个cvc曲线。此外,曲线增强系统602可以使用另一类型的曲线来表示增强的曲线。

如以上简要地描述的,并且如下面详细地描述的,贝塞尔曲线拟合器614可以将单个贝塞尔曲线或多个贝塞尔曲线拟合到cvc曲线。贝塞尔曲线拟合器614可以在下缩放之前或之后将一个或多个贝塞尔曲线拟合到cvc曲线。例如,在曲线下缩放器612下缩放拟合的贝塞尔曲线以生成增强的贝塞尔曲线之前,贝塞尔曲线拟合器614将贝塞尔曲线拟合到cvc曲线。或者,在曲线下缩放器612下缩放cvc曲线以产生增强的贝塞尔曲线之后,贝塞尔曲线拟合器614将贝塞尔曲线拟合到增强的cvc曲线。

如上所述,贝塞尔曲线是工业标准,并且因此在绘图和设计工业中比cvc曲线更常见。因此,设计应用程序通常读取和渲染贝塞尔曲线。相比之下,cvc曲线并不常见,并且很多设计应用可能无法正确地读取或渲染cvc曲线。因此,将贝塞尔曲线拟合到所生成的增强的曲线使得能够普遍地显示增强的曲线。以这种方式,贝塞尔曲线拟合器614使得能够通过绘图和设计应用来容易地渲染增强的曲线。

本公开的实施例可以包括或利用包括计算机硬件的专用或通用计算机,诸如例如一个或多个处理器和系统存储器,如下面更详细地讨论的。在本公开的范围内的实施例还包括用于携带或存储计算机可执行指令和/或数据结构的物理和其他计算机可读介质。具体地,本文中描述的过程中的一个或多个过程可以至少部分地实现为指令,这些指令在非瞬态计算机可读介质中实施并且由一个或多个计算设备(例如,本文中所描述的任何介质内容访问设备)可执行。通常,处理器(例如,微处理器)从非瞬态计算机可读介质(例如,存储器等)接收指令,并且执行这些指令,从而执行一个或多个处理,包括本文中所描述的处理中的一个或多个。

计算机可读介质可以是可以由通用或专用计算机系统访问的任何可用介质。存储计算机可执行指令的计算机可读介质是非瞬态计算机可读存储介质(设备)。携带计算机可执行指令的计算机可读介质是传输介质。因此,作为示例而非限制,本公开的实施例可以包括至少两种截然不同种类的计算机可读介质:非瞬态计算机可读存储介质(设备)和传输介质。

非瞬态计算机可读存储介质(设备)包括ram、rom、eeprom、cd-rom、固态驱动器(“ssd”)(例如基于ram)、闪存、相变存储器(“pcm”)、其他类型的存储器、其它光盘存储装置、磁盘存储装置或其它磁存储设备、或者可以用于以计算机可执行指令或数据结构的形式存储期望的程序代码装置并且可以由通用或专用计算机访问的任何其它介质。

如本文中所使用的术语“数字环境”通常指代如下环境:该环境被实现为例如独立的应用(例如,个人计算机或在计算设备上运行的移动应用)、应用的模块、应用的插件、可以由网络应用创建系统调用的库功能、和/或云计算系统。数字介质环境使得用户能够创建、查看和/或编辑包括增强的曲线和/或线的绘图和草图。

“网络”被定义为使得能够在计算机系统和/或模块和/或其他电子设备之间传输电子数据的一个或多个数据链路。当通过网络或另一通信连接(硬连线、无线或硬连线或无线的组合)向计算机传送或提供信息时,计算机将该连接正确地视为传输介质。传输介质可以包括可以用于以计算机可执行指令或数据结构的形式携带期望的程序代码装置并且可以由通用或专用计算机访问的网络和/或数据链路。上述的组合也应当被包括在计算机可读介质的范围内。

此外,在到达各种计算机系统部件时,计算机可执行指令或数据结构形式的程序代码装置可以从传输介质自动传输到非瞬态计算机可读存储介质(设备)(反之亦然)。例如,通过网络或数据链路接收的计算机可执行指令或数据结构可以缓存在网络接口模块(例如,“nic”)内的ram中,然后最终被传送到计算机系统ram和/或较不易失性计算机存储介质(设备)。因此,应当理解,非瞬态计算机可读存储介质(设备)可以被包括在也(或甚至主要地)利用传输介质的计算机系统部件中。

计算机可执行指令包括例如当在处理器处执行时引起通用计算机、专用计算机或专用处理设备执行某一功能或一组功能的指令和数据。在一些实施例中,在通用计算机上执行计算机可执行指令以将通用计算机转换为实现本公开的元件的专用计算机。计算机可执行指令可以是例如二进制中间格式指令,诸如汇编语言、或甚至源代码。尽管已经用特定于结构特征和/或方法动作的语言描述了主题,但是应当理解,所附权利要求中定义的主题不一定限于以上描述的特征或动作。相反,所描述的特征和动作被公开作为实现权利要求的示例形式。

本领域技术人员将理解,本公开可以在具有很多类型的计算机系统配置的网络计算环境中实践,包括个人计算机、台式计算机、膝上型计算机、消息处理器、手持设备、多处理器系统、基于微处理器或可编程消费电子产品、网络pc、小型计算机、大型计算机、移动电话、pda、平板、寻呼机、路由器、交换机等。本公开还可以在分布式系统环境中实施,其中通过网络被链接(通过硬连线数据链路、无线数据链路、或通过硬连线和无线数据链路的组合)的本地和远程计算机系统都执行任务。在分布式系统环境中,程序模块可以位于本地和远程存储器存储设备中。

本公开的实施例还可以在云计算环境中实现。在本描述中,“云计算”被定义为用于实现对可配置计算资源的共享池的按需网络访问的模型。例如,可以在市场中采用云计算来提供对可配置计算资源的共享池的普遍且方便的按需访问。可配置计算资源的共享池可以通过虚拟化来快速地供应,并且以低管理努力或服务提供商交互来释放,然后相应地被缩放。

云计算模型可以由各种特性组成,诸如例如按需自助服务、广泛网络接入、资源池、快速弹性、测量服务等。云计算模型还可以暴露各种服务模型,诸如例如软件即服务(“saas”)、平台即服务(“paas”)和基础设施即服务(“iaas”)。还可以使用诸如私有云、社区云、公共云、混合云等的不同的部署模型来部署云计算模型。在本说明书和权利要求书中,“云计算环境”是采用云计算的环境。

图7示出了可以被配置为执行上述处理中的一个或多个处理的示例性计算设备700的框图。将理解,诸如计算设备700等一个或多个计算设备可以托管曲线增强系统602。如图7所示,计算设备700可以包括处理器702、存储器704、存储设备706、i/o接口708和通信接口710,这些部件可以通过通信基础设施712通信地耦合。虽然图7中示出了示例性计算设备700,然而图7中图示的部件不旨在限制。在其他实施例中可以使用附加的或替代的部件。此外,在某些实施例中,计算设备700可以包括比图7所示的更少的部件。现在将更详细地描述图7中所示的计算设备700的部件。

在特定实施例中,处理器702包括用于执行指令的硬件,诸如组成计算机程序的指令。作为示例而非限制,为了执行指令,处理器702可以从内部寄存器、内部高速缓存、存储器704或存储设备706来检索(或获取)指令,并且对这些指令进行解码和执行。

计算设备700包括耦合到处理器702的存储器704。存储器704可以用于存储用于由处理器执行的数据、元数据和程序。存储器704可以包括易失性和非易失性存储器中的一个或多个,诸如随机存取存储器(“ram”)、只读存储器(“rom”)、固态盘(“ssd”)、闪存、存储器(“pcm”)或其它类型的数据存储器。存储器704可以是内部或分布式存储器。

计算设备700包括存储设备706,存储设备706包括用于存储数据或指令的存储器。作为示例而非限制,存储设备706可以包括上述非瞬态存储介质。存储设备706可以包括硬盘驱动器(hdd)、闪存、通用串行总线(usb)驱动器或者这些或其他存储设备的组合。

计算设备700还包括一个或多个输入或输出(“i/o”)设备/接口708,其被提供以使得用户能够向计算设备700提供输入(诸如用户笔划),从计算设备700接收输出,向和从计算设备700传送数据。这些i/o设备/接口708可以包括鼠标、小键盘或键盘、触摸屏、相机、光学扫描仪、网络接口、调制解调器、其它已知的i/o设备或这样的i/o设备/接口708的组合。触摸屏可以用指示笔或手指来激活。

i/o设备/接口708可以包括用于向用户呈现输出的一个或多个设备,包括但不限于图形引擎、显示器(例如,显示屏)、一个或多个输出驱动器(例如,显示驱动器)、一个或多个音频扬声器以及一个或多个音频驱动器。在某些实施例中,设备/接口708被配置为向显示器提供图形数据以呈现给用户。图形数据可以表示可以服务于特定实现的一个或多个图形用户界面和/或任何其他图形内容。

计算设备700还可以包括通信接口710。通信接口710可以包括硬件、软件或这两者。通信接口710可以提供用于计算设备与一个或多个其他计算设备700或一个或多个网络之间的通信(例如,基于分组的通信)的一个或多个接口。作为示例而非限制,通信接口710可以包括用于与以太网或其他基于有线的网络或无线nic(wnic)通信的网络接口控制器(nic)或网络适配器或者用于与无线网络、诸如wi-fi通信的无线适配器。计算设备700还可以包括总线712。总线712可以包括将计算设备700的部件彼此耦合的硬件、软件或这两者。

在上述说明书中,已经参考本发明的具体示例性实施例描述了本发明。参考本文中所讨论的细节描述本发明的各种实施例和方面,并且附图示出了各种实施例。上面的描述和附图是对本发明的说明,而不应当被解释为限制本发明。描述了很多具体细节以提供对本发明的各种实施例的透彻理解。

在不脱离本发明的精神或本质特征的情况下,本发明可以以其它具体形式来实施。所描述的实施例在所有方面都被认为仅是说明性的而不是限制性的。例如,本文中所描述的方法可以用更少或更多的步骤/动作来执行,或者步骤/动作可以按不同的顺序来执行。另外,本文中所描述的步骤/动作可以彼此并行地重复或执行,或者与相同或类似的步骤/动作的不同实例并行地重复或执行。因此,本发明的范围由所附权利要求书而不是由前面的描述来指示。在权利要求的等同物的含义和范围内的所有变化将被包括在权利要求的范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1