canvas - 基础知识 - 绘制三次贝塞尔曲线

公式:

逻辑代码:

var canvas = document.getElementById('canvas'),
    context = canvas.getContext('2d'),
    endPoints = [{x:130,y:70},{x:430,y:270}],
    controlPoints = [{x:130, y: 250}, {x:450, y:70}];

// functions  .....
function drawGrid(color, stepx, stepy) {
  context.strokeStyle = color;
  context.lineWidth = 0.5;

  for(var i = stepx + 0.5; i< context.canvas.width; i+= stepx) {
    context.beginPath();
    context.moveTo(i , 0);
    context.lineTo(i, context.canvas.height);
    context.stroke();
  }

  for(var i= stepy + 0.5; i<context.canvas.height; i += stepy) {
    context.beginPath();
    context.moveTo(0, i);
    context.lineTo(context.canvas.width, i);
    context.stroke();
  }  
}

function drawBezierCurve() {
  context.strokeStyle = 'blue';

  context.beginPath();
  context.moveTo(endPoints[0].x, endPoints[0].y);
  context.bezierCurveTo(controlPoints[0].x, controlPoints[0].y,
              controlPoints[1].x, controlPoints[1].y,
              endPoints[1].x, endPoints[1].y);
  context.stroke();
}

function drawEndPoints() {
  context.strokeStyle = 'blue';
  context.fillStyle = 'red';
  endPoints.forEach(function (point){
    context.beginPath();
    context.arc(point.x, point.y, 5, 0,Math.PI*2, false);
    context.stroke();
    context.fill();
  })
}

function drawControlPoints() {
  context.strokeStyle = 'yellow';
  context.fillStyle = 'blue';

  controlPoints.forEach(function (point) {
    context.beginPath();
    context.arc(point.x, point.y, 5, 0, Math.PI*2, false);
    context.stroke();
    context.fill();
  });
}

// Initialization..............

drawGrid('lightgray', 10, 10);

drawControlPoints();
drawEndPoints();
drawBezierCurve();

效果图如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值