zoukankan      html  css  js  c++  java
  • Bezier曲线原理—动态解释

    公式
    线性公式

    给定点P0、P1,线性贝兹曲线只是一条两点之间的直线。且其等同于线性插值。这条线由下式给出:


    一阶贝赛尔曲线上的由两个点确定 P0 和P1,当t在0--->1区间上递增时,根据
    此会得到多个点的坐标,其实这些的点就是一条直线上的点。
    B(t) = P0 + (P1-P0)*t
    B(t) = (1-t)P0 + tP1
    //=>
    B(t).x = (1-t)P0.x + tP1.x
    B(t).y = (1-t)P0.y + tP1.y

    二次方公式


    二次方贝兹曲线的路径由给定点P0、P1、P2的函数B(t)追踪:

    TrueType字型就运用了以贝兹样条组成的二次贝兹曲线。

    二阶贝赛尔曲线由`3`个点确定,它可以理解成是这样的一阶贝赛尔曲线:确定该`一阶贝赛尔曲线`的两个点是变化的。
    这两个点(设分别为Pm,Pn)是怎样变化的呢,这两个点又分别是(P0,P1)确定的`一阶贝赛尔曲线`和(P1,P2)确定的`一阶贝赛尔`
    曲线上的点。
    于是有了2阶贝赛尔曲线的公式

    Pm(t) = (1-t)P0 + tP1
    Pn(t) = (1-t)P1 + tP2
    B(t) = (1-t)Pm(t) + tPn(t) 
    = (1-t)^2 P0 + 2(1-t)tP1+ t^2P2

    三次方公式
    P0、P1、P2、P3四个点在平面或在三维空间中定义了三次方贝兹曲线。曲线起始于P0走向P1,并从P2的方向来到P3。一般不会经过P1或P2;这两个点只是在那里提供方向资讯。P0和P1之间的间距,决定了曲线在转而趋进P3之前,走向P2方向的“长度有多长”。


    曲线的参数形式为:
     
    现代的成象系统,如PostScript、Asymptote和Metafont,运用了以贝兹样条组成的三次贝兹曲线,用来描绘曲线轮廓。

    四次方图:


    一般参数公式
    阶贝兹曲线可如下推断。给定点P0、P1、…、Pn,其贝兹曲线即:


    如上公式可如下递归表达: 用表示由点P0、P1、…、Pn所决定的贝兹曲线。
    用平常话来说,阶的贝兹曲线,即双阶贝兹曲线之间的插值。

    公式说明
    1.开始于P0并结束于Pn的曲线,即所谓的端点插值法属性。
    2.曲线是直线的充分必要条件是所有的控制点都位在曲线上。同样的,贝塞尔曲线是直线的充分必要条件是控制点共线。
    3.曲线的起始点(结束点)相切于贝塞尔多边形的第一节(最后一节)。
    4.一条曲线可在任意点切割成两条或任意多条子曲线,每一条子曲线仍是贝塞尔曲线。
    5.一些看似简单的曲线(如圆)无法以贝塞尔曲线精确的描述,或分段成贝塞尔曲线(虽然当每个内部控制点对单位圆上的外部控制点水平或垂直的的距离为时,分成四段的贝兹曲线,可以小于千分之一的最大半径误差近似于圆)。
    6.位于固定偏移量的曲线(来自给定的贝塞尔曲线),又称作偏移曲线(假平行于原来的曲线,如两条铁轨之间的偏移)无法以贝兹曲线精确的形成(某些琐屑实例除外)。无论如何,现存的启发法通常可为实际用途中给出近似值。

  • 相关阅读:
    http参数传递方式
    Api接口管理工具推荐
    IntelliJ IDEA 插件推荐
    spring服务器接收参数格式
    SSM框架的常用注解整理
    Java map 详解
    遍历Map集合四中方法
    bean对应mapper.xml字段
    Java简历与面试
    SQL的case when then else end语句的用法
  • 原文地址:https://www.cnblogs.com/brainworld/p/7228034.html
Copyright © 2011-2022 走看看