精华内容
下载资源
问答
  • 绘制二次贝塞尔曲线,cp1x,cp1y为个控制点,x,y为结束点。 bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) 绘制三次贝塞尔曲线,cp1x,cp1y为控制点,cp2x,cp2y为控制点二,x,y为结束点。 画个二次贝塞尔...

    方法说明

    quadraticCurveTo(cp1x, cp1y, x, y)
    绘制二次贝塞尔曲线,cp1x,cp1y为一个控制点,x,y为结束点。


    bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y)
    绘制三次贝塞尔曲线,cp1x,cp1y为控制点一,cp2x,cp2y为控制点二,x,y为结束点。

     

    画一个二次贝塞尔曲线

    	window.onload=function(){
    		var canvas = document.getElementById('canvas');
    		canvas.width='300';
    		canvas.height='300';
    		var ctx = canvas.getContext('2d');
    	    ctx.beginPath();
        	ctx.moveTo(100, 200);
    		ctx.quadraticCurveTo(100, 100, 230, 200);
    		ctx.stroke();
    	}

    画一个三次贝塞尔曲线

    
    	window.onload=function(){
    		var canvas = document.getElementById('canvas');
    		canvas.width='300';
    		canvas.height='300';
    		var ctx = canvas.getContext('2d');
    	    ctx.beginPath();
        	ctx.moveTo(50, 200);
    		ctx.bezierCurveTo(100, 100,150,150, 230, 200);
    		ctx.stroke();
    	}

    画一个爱心

    	
    	window.onload=function(){
    		var canvas = document.getElementById('canvas');
    		canvas.width='300';
    		canvas.height='300';
    		var ctx = canvas.getContext('2d');
    	    ctx.beginPath();
        	ctx.moveTo(150, 100);
    		ctx.bezierCurveTo(50,50,50,150, 150, 200);
    		ctx.moveTo(150, 100);
    		ctx.bezierCurveTo(250, 50,250,150, 150, 200);
    		ctx.fill();
    	}
    	

     

    展开全文
  • 首先是二次贝塞尔曲线! 函数是这样的 quadraticCurveTo(cpx,cpy,x,y); 其中cpx为贝塞尔控制点x; 其中cpy为贝塞尔控制点y; 其中x为结束点x坐标; 其中y为结束点y坐标。 这里隐藏了个开始点,一般用...

    此博文不研究其算法,只记录下其用法。

     

    首先是二次贝塞尔曲线!

    函数是这样的

    quadraticCurveTo(cpx, cpy, x, y);

    其中cpx为贝塞尔控制点x;

    其中cpy为贝塞尔控制点y;

    其中x为结束点x坐标;

    其中y为结束点y坐标。

     

    这里隐藏了一个开始点,一般用beginPath()和moveTo方法来定义开始点:

    源码如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    <canvas id="canvas" style="border: 1px solid #aaa; display: block; margin: 50px auto;">
        当前浏览器不支持canvas
    </canvas>
    
    <script>
    
        window.onload = function(){
    
            let canvas = document.getElementById("canvas");
            canvas.width = 800;
            canvas.height = 800;
            let context = canvas.getContext("2d");
    
            context.beginPath();
            context.moveTo(100, 100);
            context.quadraticCurveTo(100, 300, 400, 400);
            context.stroke();
        }
    
    
    </script>
    
    </body>
    </html>

    下面是三次贝塞尔曲线

    函数为bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y)

    其中cp1x为第一个贝塞尔控制点x轴坐标;

    其中cp1y为第一个贝塞尔控制的y轴坐标;

    其中cp2x为第二个贝塞尔控制的x轴坐标;

    其中cp2y为第二个贝塞尔控制的y轴坐标;

    其中x为结束点坐标;

    其中y为结束点坐标;

     

    同样这个函数也需要一个moveTo去增加一个开始点!

     

    程序运行截图如下:

    源码如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    <canvas id="canvas" style="border: 1px solid #aaa; display: block; margin: 50px auto;">
        当前浏览器不支持canvas
    </canvas>
    
    <script>
    
        window.onload = function(){
    
            let canvas = document.getElementById("canvas");
            canvas.width = 800;
            canvas.height = 800;
            let context = canvas.getContext("2d");
    
            context.beginPath();
            context.moveTo(20, 20);
            context.bezierCurveTo(20, 700, 200, 100, 700, 500);
            context.stroke();
        }
    
    
    </script>
    
    </body>
    </html>

     

     

     

    展开全文
  • 写在前面最初是想要把传统的柱状频谱图做成平滑曲线连接的,“呼吸”效果应该会更自然之前试过了最小...问题重述三次贝塞尔曲线需要2个控制点,如下图:3次bezier曲线(图中的P1, P2是控制点)通过Audio API可以获取...

    写在前面

    最初是想要把传统的柱状频谱图做成平滑曲线连接的,“呼吸”效果应该会更自然

    之前试过了最小二乘法曲线拟合,结论是最小二乘法曲线拟合不能解决这个问题:

    最小二乘法曲线拟合:可以求出一条直线/n次曲线,把所有散点均匀地分为两部分

    贝塞尔曲线:可以求出一条曲线平滑穿过各个散点

    一.问题重述

    三次贝塞尔曲线需要2个控制点,如下图:

    b7efbc3cd2c6cb6a8f163879b0249ca6.gif

    3次bezier曲线

    (图中的P1, P2是控制点)

    通过Audio API可以获取各个散点(柱状频谱图的各个柱子的顶端),而难点就是求2个控制点,随便定是肯定不行的,效果会非常差

    二.解决方案

    找到了一个基于经验实践的解决方案,没有严格的数学依据,但实际效果很完美,具体步骤如下:

    假设控制点在(x1,y1)和(x2,y2)之间,第一个点和最后一个点分别是曲线路径上的上一个点和下一个点

    求中点

    求各中点连线长度

    求中点连线长度比例(用来确定平移前p2, p3的位置)

    平移p2

    平移p3

    [可选]微调控制点与顶点之间的距离,越大曲线越平直

    三.JavaScript求三次贝塞尔曲线的控制点

    原版是Java实现,笔者做了简单修改封装,如下:

    window.Bezier = {

    /**

    * 获取控制点坐标

    * @param {Array} arr 4个点坐标数组

    * @param {Float} smooth_value [0, 1] 平滑度

    * p1 上一个点

    * p2 左端点

    * P3 右端点

    * p4 下一个点

    * @return {Array} 2个点坐标数组

    */

    getControlPoints: function(arr, smooth_value) {

    var x0 = arr[0].x, y0 = arr[0].y;

    var x1 = arr[1].x, y1 = arr[1].y;

    var x2 = arr[2].x, y2 = arr[2].y;

    var x3 = arr[3].x, y3 = arr[3].y;

    // Assume we need to calculate the control

    // points between (x1,y1) and (x2,y2).

    // Then x0,y0 - the previous vertex,

    // x3,y3 - the next one.

    // 1.假设控制点在(x1,y1)和(x2,y2)之间,第一个点和最后一个点分别是曲线路径上的上一个点和下一个点

    // 2.求中点

    var xc1 = (x0 + x1) / 2.0;

    var yc1 = (y0 + y1) / 2.0;

    var xc2 = (x1 + x2) / 2.0;

    var yc2 = (y1 + y2) / 2.0;

    var xc3 = (x2 + x3) / 2.0;

    var yc3 = (y2 + y3) / 2.0;

    // 3.求各中点连线长度

    var len1 = Math.sqrt((x1-x0) * (x1-x0) + (y1-y0) * (y1-y0));

    var len2 = Math.sqrt((x2-x1) * (x2-x1) + (y2-y1) * (y2-y1));

    var len3 = Math.sqrt((x3-x2) * (x3-x2) + (y3-y2) * (y3-y2));

    // 4.求中点连线长度比例(用来确定平移前p2, p3的位置)

    var k1 = len1 / (len1 + len2);

    var k2 = len2 / (len2 + len3);

    // 5.平移p2

    var xm1 = xc1 + (xc2 - xc1) * k1;

    var ym1 = yc1 + (yc2 - yc1) * k1;

    // 6.平移p3

    var xm2 = xc2 + (xc3 - xc2) * k2;

    var ym2 = yc2 + (yc3 - yc2) * k2;

    // Resulting control points. Here smooth_value is mentioned

    // above coefficient K whose value should be in range [0...1].

    // 7.微调控制点与顶点之间的距离,越大曲线越平直

    var ctrl1_x = xm1 + (xc2 - xm1) * smooth_value + x1 - xm1;

    var ctrl1_y = ym1 + (yc2 - ym1) * smooth_value + y1 - ym1;

    var ctrl2_x = xm2 + (xc2 - xm2) * smooth_value + x2 - xm2;

    var ctrl2_y = ym2 + (yc2 - ym2) * smooth_value + y2 - ym2;

    return [{x: ctrl1_x, y: ctrl1_y}, {x: ctrl2_x, y: ctrl2_y}];

    }

    };

    四.效果截图

    8368f9582a501254a90bdf1e9c89d2d5.png

    贝塞尔曲线效果

    平滑效果很不错,而且计算量小,能够满足实时绘图的需要(原项目是Android手写签名)

    参考资料

    展开全文
  • 1 贝塞尔曲线贝塞尔曲线(The Bézier Curves),是一种在计算机图形学中...接下来将从一次贝塞尔曲线开始(以下简称一次曲线. 类似的,N次贝塞尔曲线称为N次曲线),研究贝赛尔曲线的解析构造和原理。1.1 一次贝塞尔曲...

    1 贝塞尔曲线

    贝塞尔曲线(The Bézier Curves),是一种在计算机图形学中相当重要的参数曲线(三维空间中称为贝塞尔曲面). 贝塞尔曲线由法国工程师皮埃尔·贝塞尔(Pierre Bézier)于1962年发表,他运用贝塞尔曲线来为汽车的主体进行设计.

    接下来将从一次贝塞尔曲线开始(以下简称一次曲线. 类似的,N次贝塞尔曲线称为N次曲线),研究贝赛尔曲线的解析构造和原理。

    1.1 一次贝塞尔曲线

    给定两点P0、P1,一次曲线在几何上是一条连接这两点的直线,可以用下面的参数方程表示:

    其中,t∈[0,1].

    当参数t在定义域内变化时,曲线变化过程如下:

    一次贝塞尔曲线函数中,参数t会经过由P0和14P0P1的直线.

    1.2 二次贝塞尔曲线

    二次曲线的路径由给定点P0、P1、P2的函数B(t)确定:

    B(t)=(1−t)2P0+2t(1−t)P1+t2P2

    其中,t∈[0,1].

    为了生成二次曲线,可以借助于中间点Q0和Q1:

    由P0至P1的连续点Q0,描述一条一次曲线

    由P1至P2的连续点Q1,描述一条一次曲线

    由Q0至Q1的连续点B(t),描述一条二次曲线

    以t=0.25为例,二次曲线如图:

    当参数t在定义域内变化时,其变化过程如图:

    1.3 三次贝塞尔曲线

    为构造高次曲线,需要借助更多的中间点. 对于三次曲线,可由一次曲线描述的中间点Q0、Q1、Q2,以及由二次曲线描述的点R0、R1来生成.

    设P0、P1、P2、P3四个点定义了一条三次方贝塞尔曲线. 曲线从P0开始,至P3结束,其方向从P1到P2. 一般来说,曲线不会经过P1或P2. P0和P1之间的间距,决定了曲线在转而趋进P3之前,朝P2方向行走的长度.

    曲线的参数形式为:

    B(t)=P0(1−t)3+3P1t(1−t)2+3P2t2(1−t)+P3t3

    其中,t∈[0,1].

    以t=0.25为例,三次曲线如图:

    当参数t在定义域内变化时,其变化过程如图:

    1.4 高次曲线

    如果用BP0P1⋯Pn表示由P0P1⋯Pn决定的贝塞尔曲线,那么高次曲线可以表示为:

    2 实现

    2.1 计算机绘图

    要“画”出贝塞尔曲线,一般使用逐次逼近方式,需要进行较多的计算,然后绘制出来,类似这样:

    绘制的代码可以在各类计算机图形学书籍中找到.

    2.2 在GDI+中实现

    GDI+已经封装好了贝塞尔曲线的绘制代码,如果你想画出贝塞尔曲线,调用Graphics.DrawBezier方法:

    public void DrawBezier(Pen pen, Point pt1, Point ctrlPt1, Point pt2, Point ctrlPt2);

    1

    1

    这是一个三次贝塞尔曲线,其中4个点分别为:起点,起点控制点,终点,终点控制点. 绘制出来的效果如下:

    3 与鼠标交互

    怎么实现Photoshop里那样可以调整的贝塞尔曲线呢?两种方法:

    输入新参数生成曲线

    用鼠标交互调整曲线

    很显然第二种看起来比较好,那么就来试试看.

    例如想要获得是这样的效果:

    这是一条三次贝塞尔曲线,图中各点含义为:

    几个需要解决的问题:

    表示贝塞尔曲线的锚点和控制点

    绘制曲线和控制点/控制柄

    鼠标交互

    接下来分别解决。.

    3.1 锚点

    对于三次贝塞尔曲线而言,有两个锚点:起始点和结束点. 每个锚点有两个坐标:本身坐标和控制点坐标. 于是,可以用这样的类来描述:

    // Anchor

    public class AnchorPoint {

    public static AnchorPoint Empty { get; }

    public Point Point { get; set; }

    public Point ControlPoint { get; set; }

    }

    1

    2

    3

    4

    5

    6

    1

    2

    3

    4

    5

    6

    3.2 三次贝塞尔曲线

    三次曲线前面已经说过原理了,它的结构应该就是这样的:

    public class BezierSegment {

    public AnchorPoint Begin;

    public AnchorPoint End;

    }

    1

    2

    3

    4

    1

    2

    3

    4

    3.3 一个简单的渲染器

    为了简单,就用一个最基本的渲染器来画,代码如下:

    public class BezierRenderer {

    public void DrawSegment(Graphics g, BezierSegment seg, Color color) {

    using (Pen p = new Pen(color)) {

    g.DrawBezier(

    p,

    seg.Begin.Point,

    seg.Begin.ControlPoint,

    seg.End.Point,

    seg.End.ControlPoint);

    }

    public void DrawHandle(Graphics g, Point pt, bool solid, Color color) {

    if (solid)

    using (SolidBrush b = new SolidBrush(color))

    g.FillRectangle(b, pt.X - 2, pt.Y - 2, 4, 4);

    else

    using (Pen p = new Pen(color))

    g.DrawRectangle(b, pt.X - 2, pt.Y - 2, 4, 4);

    }

    public void DrawBar(Graphics g, Point pt1, Point pt2, Color color) {

    using (Pen p = new Pen(color))

    g.DrawLine(p, pt1, pt2);

    }

    }

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    绘制曲线和控制点及其手柄:

    // 画曲线

    renderer.DrawSegment(g, seg, Color.DimGray);

    // 画锚点

    renderer.DrawHandle(g, seg.Begin.Point, false, Color.DimGray);

    renderer.DrawHandle(g, seg.End.Point, false, Color.DimGray);

    // 画控制柄

    renderer.DrawBar(g, seg.Begin.Point, seg.Begin.ControlPoint, Color.Black);

    renderer.DrawHandle(g, seg.Begin.ControlPoint, false, Color.Black);

    renderer.DrawBar(g, seg.End.Point, seg.End.ControlPoint, Color.Black);

    renderer.DrawHandle(g, seg.End.ControlPoint, false, Color.Black);

    // 当前控制柄为实心

    if (target != null)

    renderer.DrawHandle(g, target.ControlPoint, true, Color.Black);

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    画出来的效果如下:

    3.4 鼠标交互

    和鼠标实际上是这样交互的:

    按下鼠标,如果落点在某个控制点上,就表示选中了该点,否则落空

    移动鼠标,如果选中了某个控制点,则调整控制点坐标至新坐标,否则忽略

    放开鼠标,取消任何选择

    看起来只需要处理MouseDown,MouseMove和MouseUp这三个事件就够了.

    先弄一个全局标记:

    // 热点检测区

    Rectangle rectBegin, rectEnd;

    // 激活标识

    AnchorPoint target = null;

    1

    2

    3

    4

    5

    1

    2

    3

    4

    5

    然后处理鼠标事件.

    3.4.1 MouseDown事件

    if (rectBegin.Contains(e.Location))

    target = seg.Begin;

    else if (rectEnd.Contains(e.Location))

    target = seg.End;

    refresh();

    1

    2

    3

    4

    5

    1

    2

    3

    4

    5

    3.4.2 MouseMove事件

    if (target == null) return;

    if (!this.ClientRectangle.Contains(e.Location)) return;

    target.ControlPoint = e.Location;

    refresh();

    1

    2

    3

    4

    1

    2

    3

    4

    3.4.3 MouseUp事件

    target =null;

    refresh();

    1

    2

    1

    2

    3.4.4 refresh()方法

    简便起见,refresh()方法只作简单的刷新:

    Invalidate();

    1

    1

    更高效的刷新应该只处理脏区.

    3.5 效果

    最后的效果如图:

    修改渲染器,可以得到更多的图像效果:

    4 扩展和优化

    要实现Photoshop那种曲线效果,需要多个锚点连接起来,用和本文类似的方法来画。上面的方法在效率上也还有可以提高的地方。

    (完)

    展开全文
  • 上篇讲了三hermite曲线,三cardinal曲线的绘制,都需要用约束矩阵来求解曲线的系数,而贝塞尔曲线直接给出显式公式来绘制,只要给出几个控制点即可,贝塞尔曲线其实就是种加权混合的多项式,随着参数值的增加...
  • 次贝塞尔曲线公式

    2016-11-09 12:33:00
    n个数据点构成(n-1)次贝塞尔曲线,三个数据点构成二次贝塞尔曲线,二次贝塞尔曲线参数方程(1 - t)^2 P0 + 2 t (1 - t) P1 + t^2 P2;曲线起点P0,终点P2,但一般不过P1点. 代入坐标后得到:参数方程:x = (...
  • 次贝塞尔曲线长度

    千次阅读 2016-08-03 11:06:07
    次贝塞尔曲线通常以如下方式构建,给定二维平面上的固定点P0,P1,P2,用B(t)表示该条曲线 用个动画来演示,可以更加清楚的表明这条曲线的构建过程 如果t变量本身线形变化的话,这条贝塞尔曲线本身的生成...
  • 1.点在多边形算法 2.散点生成光滑的3次贝塞尔曲线算法(多段闭合) (知乎里个帖子找到的个国外网站下的) 3.中国个省市json数据 4.247个国家的基本地理数据
  • 前段时间闲暇的时候看到贝塞尔曲线算法的文章,试着在小程序里去实现小程序的贝塞尔曲线算法,及其效果。 主要应用到的技术点: 1、小程序wxss布局,以及数据绑定 2、js二bezier曲线算法 核心算法,写在app.js...
  • 一次Bezier曲线公式: 一次Bezier曲线是由P0至P1的连续点,描述的一条线段 二次Bezier曲线公式: 二次Bezier曲线是 P0至P1 的连续点Q0和P1至P2 的连续点Q1组成的线段上的连续点B(t),描...
  • 应用贝塞尔曲线与NSTimer结合使用 制作动态进度条。 简单实用,易懂,易学习 贝塞尔一次二次曲线的简单绘制,应用。 供各位童鞋学习使用分享 Q:305814832 email:ioszhaoyi@163.com
  • 次贝塞尔曲线

    2011-12-20 10:20:00
    贝塞尔曲线的身影几乎在所有绘图软件中都有出现,下面的代码演示了如何用AS3.0画段简单的贝塞尔曲线(没有使用Document文档类,想测试的朋友,直接把下面的代码复制贴到第帧即可) ? 1 2 3 4 5 ...
  • 次贝塞尔曲线 在微信官方的二次贝塞尔曲线画法连接 画波浪 思路: 在屏幕左边画个波,然后让它一直向屏幕右边平移过去。其X的值由负数变为正数依次增大;然后一直重复此操作。 我画出来的波浪如下(感觉还是有...
  • 之前做的https://blog.csdn.net/derbi123123/article/details/105345888这个交互式绘制三次贝塞尔曲线只能选中四个控制点之后再把控制图形画出来,由于昨天实现了连续折线的绘制,所以我们可以边选取控制点,边画...
  • 贝塞尔曲线

    2020-06-05 18:01:24
    贝塞尔曲线包含三个控制点即 n = 3 称为二次贝塞尔曲线 贝塞尔曲线包含四个控制点即 n = 4,所以称为三次贝塞尔曲线。 线性的贝塞尔曲线 p0和p1两个点之间的线性插值的点p可以获得: p=p0+t∗(p1−p0)p=
  • 中有个利用贝塞尔曲线进行绘制圆的步骤,这个贝塞尔曲线理论挺复杂,特此单独说一下所知的和能用到的。 比方上个loadingView的项目中。要用到Path.cubic()来使用贝塞尔曲线个圆,那么首先要了解的是 ...
  • 【算法】-003 三次贝塞尔曲线的交点

    千次阅读 2018-09-26 14:37:20
      最近在工作中遇到个问题,想通过计算两条三次贝塞尔曲线的交点位置。尝试了枚举法之后觉得计算速度太慢,于是来找其他算法。 文章目录【算法】-003 三次贝塞尔曲线的交点1、 枚举法求贝塞尔曲线交点2、 一元三...
  • 鼠标操作贝塞尔曲线

    千次阅读 2017-05-16 15:56:37
    1 贝塞尔曲线 贝塞尔曲线(The Bézier Curves),是一种在计算机图形学中相当重要的...接下来将从一次贝塞尔曲线开始(以下简称一次曲线. 类似的,N次贝塞尔曲线称为N次曲线),研究贝赛尔曲线的解析构造和原理。 1.
  • 穿过已知点画平滑曲线(3次贝塞尔曲线) http://blog.csdn.net/microchenhong/article/details/6316332 为了把串点连成光滑的曲线,先研究贝塞尔曲线,又搞B样条插值。。。。都没有成功...
  • 方贝济埃曲线在数学的数值分析领域中,贝济埃曲线(Bézier curve)是电脑图形学中相当重要的参数曲线。更高维度的广泛化贝济埃曲线就称作贝济埃曲面,其中贝济埃三角是种特殊的实例。贝济埃曲线于1962年,由...
  • 文章目录前言一、基本简介二、一些特点三、一个例子四、公式推导1、一次贝塞尔曲线2、二次贝塞尔曲线3、三次贝塞尔曲线4、四次贝塞尔曲线5、五次贝塞尔曲线一般公式五、一些实例一些建议总结 前言 贝塞尔曲线一直是...
  • CSS3 Transition是CSS3的重要补充之。 它允许我们将过渡变化效果应用于CSS规则。 如果您已经熟悉语法 ,您将看到我们需要指定计时功能或转换速度。 我们可以使用四种预定义的计时功能,分别是ease , ease-in ...
  • 最近想做个类似曲线指示器的东西,搜了一下资料发现这个,记录一下。简介贝塞尔曲线(Bézier curve),又称...三阶以上我就不写了,写公式好麻烦实现话不多说,直接开始实现/// /// 计算二次贝塞尔曲线值/// /// ...
  • 3.4 贝塞尔曲线canvas提供了两个绘制贝塞尔曲线api:ctx.quadraticCurveTo(cpx, cpy, x, y);二次贝塞尔曲线,(cpx, cpy)控制点 (x, y)...三次贝塞尔曲线,(cp1x, cp1y)控制点, (cp2x, cp2y)控制点二, (x, y)终点题...
  • 前段时间闲暇的时候看到贝塞尔曲线算法的文章,试着在小程序里去实现小程序的贝塞尔曲线算法,及其效果。 主要应用到的技术点: 1、小程序wxss布局,以及数据绑定 2、js二bezier曲线算法 核心算法,写在app.js...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 577
精华内容 230
关键字:

一次贝塞尔曲线