java 轨迹平滑算法_[源码阅读]基于Canvas+贝塞尔曲线算法的平滑手写板

signature_pad一个基于Canvas的平滑手写画板工具

介绍

实现手写有多种方式。

一种比较容易做出的是对鼠标移动轨迹画点,再将两点之间以直线相连,最后再进行平滑处理,这种方案不需要什么算法支持,但同样,它面对一个性能和美观的抉择,打的点多,密集,性能相对较低,但更加美观,视觉上更平滑;

此处用的另一种方案,画贝塞尔曲线。

由于canvas没有默认的画出贝塞尔曲线方法(感谢@madRain评论中更正)由于canvas并没有提供根据初始和结束点计算出贝塞尔曲线控制点的API,因此这里使用了贝塞尔曲线的一系列算法,包括求控制点,求长度,计算当前点的大小,最后用canvas画出每一个确定位置的点。

补充:个人认为,之所以不使用canvas提供的贝塞尔曲线API,是因为可以实时控制线条粗细(点的大小),在斜街的时候达到平滑的效果。

参数及配置介绍

提供的可配置参数如下

export interface IOptions {

// 点的大小(不是线条)

dotSize?: number | (() => number);

// 最粗的线条宽度

minWidth?: number;

// 最细的线条宽度

maxWidth?: number;

// 最小间隔距离(这个距离用贝塞尔曲线填充)

minDistance?: number;

// 背景色

backgroundColor?: string;

// 笔颜色

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值