让咱们来看看如下这道题:css
已知点A(x1,y1)和点B(x2,y2),求两点求与圆点O(x0,y0)的夹角θ的角度:
∠θ=arctan[(y2-y0)/(x2-x0)]-arctan[(y1-y0)/(x1-x0)]
是否有股熟悉的味道?涉及的数学知识是初中便开始教的三角函数。在拖拽旋转图片的实现中,最符合的就是上面这题的状况,接下来好好说明一下。函数
定义:spa
a=y1-y0
和b=x1-x0
arctan(a/b)
a'=y2-y0
和b'=x2-x0
arctan(a'/b')
∠θ=∠A-∠B
得出的夹角即是咱们须要求得的弧度。这里不得不提的是反正切这类反三角函数:code
反正切函数(inverse tangent)是数学术语,反三角函数之一,指函数y=tanx的反函数。计算方法:设两锐角分别为A,B,则有下列表示:若tanA=1.9/5,则 A=arctan1.9/5;若tanB=5/1.9,则B=arctan5/1.9。若是求具体的角度能够查表或使用计算机计算。
通过按计算机推导出来的结论,反三角函数计算出来的结果是弧度,而一直使用的∠A角表示的实际上是角A的弧度。orm
弧度严格来讲已是这次拖拽须要的结果,相信不是css大牛的各位接触到的知识面还得提一下,像css关于旋转的单位包含:图片
直接使用弧度设置选择也是能够的transform: rotate(.5 rad)
,可是转为度(deg)能让数值更直观可读。ip
弧度(rad)换算成角度(deg):
x=∠A*(180/π)
这里说说你们都知道的拖拽流程:get
点击图像的时候采集所的点(设为点A),在移动鼠标时记录另外一个点(设为点B),这样手上就有两个点。拖拽围绕着图片的中心旋转,图片中心做为公式中的原点(设为点O)使用。数学
在处理上,在点击图像时就计算出∠A的弧度,而后在移动鼠标的过程再计算∠B的弧度,并用∠A减∠B得出实际拖拽中旋转了多少度,具体可看下面例子。it
https://codepen.io/packy1980/...
勾上[记录上次旋转的弧度]后即是一个完整的拖拽旋转例子