任务描述:

1>制作一个手机端的手绘板
2>要求能有毛笔的笔锋
3>画线能有轻重感
4>能重播手写过程
5>能提交保存

现在,我们来着重解决第三个问题,画线能有轻重感,手指一接触触摸屏,js就会在相应的位置画上一个填充圆,然后缓慢的移动手指,会发现线条渐渐变粗,也就实现了重笔画的手写过程,手指仍然不要松开,现在我们突然加速,会发现,很突兀的一下,线条就变细了,经过多方的想法,最终我想到了一个办法。
两圆之间的公切线会让线条平滑。
但是两圆公切线怎么计算呢?
下面是初始计算公式:
如图:
A是圆1的圆心,AC是圆1的半径
B是圆2的圆心,BD是圆2的半径
C是圆1关于CD的切点,D是圆2关于CD的切点
那么有点到点的距离公式可以获得下面几个方程:
①(x1-x3)^2+(y1-y3)^2=AC^2
②(x2-x4)^2+(y2-y4)^2=BD^2
③(x1-x2)^2+(y1-y2)^2=AB^2
④(x2-x3)^2+(y2-y3)^2=BC^2
⑤(x1-x4)^2+(y1-y4)^2=AD^2
其中AC和BD已知,AB可以由两点之间的距离公式②算出。
过点A做BD的垂线,交点为E(x5,y5)
∵BE=BD-DE
    DE=AC
∴BD=BD-AC
根据勾股定理可以得到:
⑥AE^2=AB^2-BE^2
公式①和④推导出如下公式:
y3(4(y1-y2)^2-(4x2-x1)^2)-2y3((2(y1-y2)(r2^2-r1^2+ED^2-(x2+x1)^2+(y1-y2)^2))-y1(4x2+x1)^2)+(r2^2-r1^2+ED^2-(x2+x1)^2+(y1^2-y2^2))^2-y1^2(4x2+x1)^2=0
可以得到一元二次方程式中的a,b,c分别为如下
假设y1=startY,x1=startX,x2=endX,y2=endY,r1=startW,r2=endW;
则可以得到如下表达式
$a=4*sqr($startY-$endY)-sqr($startX-4*$endX);//sqr函数是求平方函数,自己动手写的。
$b=2*(2*($startY-$endY)*(sqr($endW)-sqr($startW)-sqr($endX+$startX)+$ED+sqr($startY-$endY))-$startY*sqr(4*$endX+$startX));
$c=sqr(sqr($endW)-sqr($startW)+$ED-sqr($endX+$startX)+sqr($startY)-sqr($endY))-sqr($startY)*sqr(4*$endX+$startX);
求解:
最后得到如下表达式:
<span style="white-space:pre">     </span>$x1=(-$b+ sqrt(sqr($b)-4*$b*$c))/(2*$a);$x2=(-$b- sqrt(sqr($b)-4*$b*$c))/(2*$a);$y1=sqrt(sqr($startW)-sqr($x1-$startX))+$startY;$y2=sqrt(sqr($startW)-sqr($x2-$startX))+$startY;

经过运算,此算法错误。详情请参照下篇文章。

关于canvas的学习心得(三)(计算错误)相关推荐

  1. BT源代码学习心得(三):种子文件的编码方式 -- 转贴自wolfenstein (NeverSayNever)

    BT源代码学习心得(三):种子文件的编码方式 author: wolfenstein BT的作者使用了一种比较简单易懂的编码方式来对设计种子文件.这种编码方式能够很简单得对python中的各种数据类型 ...

  2. c语言课程设计文献检索,文献检索课学习心得三篇(2)

    文献检索课学习心得 篇[3] 内容提要:通过本次文献信息检索课程的学习,有利于培养我们的信息意识.自学意识和知识创新能力,使我们养成了自主学习的习惯和独立获取信息的能力,了解了信息社会中文献信息检索的 ...

  3. 2020春季学期哈工大软件构造学习心得三

    Abstract Data Type (ADT) and ObjectOriented Programming (OOP) 前言 前两章回答了:什么是"高质量的软件". 如何从不同 ...

  4. MvvmLight学习心得三

    MvvmLight的抽象类ViewModelBase继承了ObservableObject这个类,我们来看看这个类: /// <summary>/// 一个基类,为了使它的对象属性必须具有 ...

  5. STM32学习心得三十五(上):VS1053实验之RAM测试及正弦测试

    记录一下,方便以后翻阅~ 主要内容: 1) 硬件连接: 2) VS1053简介: 3) 相关实验及其代码解读. 实验功能:程序开启后,系统先进行RAM测试,再进行正弦测试,可以接耳机听到所设的单频声音 ...

  6. STM32学习心得三十四:外部SRAM原理及实验代码解读

    记录一下,方便以后翻阅~ 主要内容: 1) IS62WV51216简介: 2) FSMC简介及相关寄存器介绍: 3) 相关实验代码解读. 参考手册: <STM32中文参考手册_V10>-第 ...

  7. Vue3学习笔记(三)——计算/监听/样式/自定义指令

    点击查看上一篇文章

  8. STM32学习心得十九:电容触摸按键实验及相关代码解读

    记录一下,方便以后翻阅~ 主要内容 1) 电容触摸按键原理: 2)部分实验代码解读. 实验内容 手触摸按键后,LED1灯翻转. 硬件原理图 上图,TPAD与STM_ADC用跳线帽相连,即TPAD与PA ...

  9. STM32学习心得二十一:实时时钟RTC和备份寄存器BKP特征、原理及相关实验代码解读

    记录一下,方便以后翻阅~ 主要内容 1) RTC特征与原理: 2) BKP备份寄存器特征与原理: 3) RTC常用寄存器+库函数介绍: 4) 相关实验代码解读. 实验内容: 因为没有买LCD屏,所以计 ...

最新文章

  1. 【经典书】线性代数与应用(附pdf)
  2. Fresco源码分析之Hierarchy
  3. SQL Server密码爆破工具SQLdict
  4. QThread: Destroyed while thread is still running
  5. Python开发【Part 4】:数据类型操作
  6. 武汉加油!总有那么一个声音让我们感动,总有那些英雄在为难时刻挺身而出,像英雄们致敬。陈老师《大国风范》演讲视频...
  7. hdu 2049 不容易系列之(4)——考新郎
  8. Spring mvc 内置编码过滤器原理解析
  9. drools 执行函数_Drools可执行模型还活着
  10. 前端学习(3111):react-hello-复习相关知识
  11. 40-400-044-运维-优化-MySQL order by 优化
  12. 【初赛】「程序填空」题答v1.0
  13. 第一次OllyDbg逆向记录(分析思路和注意点其他文章)
  14. python123货币转换器_python货币转换
  15. 提高APP冷启动速度小结
  16. 软件工程小项目~企业员工信息管理系统-需求分析~~
  17. 普通程序员如何转向人工智能方向?
  18. Qiyuan - 接小球游戏4.0
  19. 流量劫持是什么?常用方法有哪些?
  20. 存储故障时的ORA-7445错误

热门文章

  1. 《无声告白》这不是我想要的生活
  2. mailgun php 邮件发送 实例
  3. 算法学习 - 拼接成最大的数字
  4. 网红书店的“关门潮”与场景阅读的“科技浪”
  5. Chapter 6-Blurring Things Up之Using Alpha Channel
  6. 计算机处理io和cpu,虚拟化技术原理(CPU、内存、IO)
  7. Nodejs版本更新
  8. 第二课堂计算机记录,第二课堂计算机小结
  9. 1024 程序员节,拿个勋章
  10. 2022.10.27