旋转点由其形式斧使自己移动到左上方
Rotating point by its form axe makes itself move to the left-top
首先,我需要旋转一行关于它自己的斧头在HTML5画布中呈现。
我实际上并没有旋转一条线,但是我在渲染它之前旋转了它的点坐标。
我有特定的边界,指的是在一条路径上绘制的总大小(例如,线),它们用于构建点B,这是路径的中心点。
form.bx = x + (w / 2);
form.by = y + (h / 2);
注:form
实际上是我的接口生成的路径,它包含了旋转角度等。
这两个函数都旋转点的坐标并返回它们。参数:
- x - x色。
- y - y颜色。
- c -角余弦(
Math.cos(angle)
)。 - s -角正弦(
Math.sin(angle)
)。 - Bx - x色。
- 按y键。
function rotatePointX(x, y, c, s, Bx, By) {
return Math.round(((Bx - x) * c) - ((By - y) * s));
}
function rotatePointY(x, y, c, s, Bx, By) {
return Math.round(((Bx - x) * s) + ((By - y) * c));
}
问题:旋转使我的线移动到画布的左上角。
小提琴
我的线应该在它的特定位置。我做错了什么?由于
旋转总是相对于原点发生的,如果你想相对于其他点旋转你必须
- 移动所有的空间,使新的原点是围绕 发生旋转的点
- 执行旋转
- 将所有空间移回原始位置
1)
x' = x - Bx
y' = y - By
2)
x'' = x' * cos(angle) - y' * sin(angle)
y'' = x' * sin(angle) + y' * cos(angle)
3)
x''' = x'' + Bx
y''' = y'' + By
要找到x''', y'''
的值,您必须替换3中的1和2
1 in 2:
x'' = (x - Bx) * cos(angle) - (y - By) * sin(angle)
y'' = (x - Bx) * sin(angle) + (y - By) * cos(angle)
2 in 3:
x''' = (x - Bx) * cos(angle) - (y - By) * sin(angle) + Bx
y''' = (x - Bx) * sin(angle) + (y - By) * cos(angle) + By
你可以通过执行变换来避免所有这些混乱,像这样做矩阵乘法
[x'''] = [1 0 Bx] [cos(angle) -sin(angle) 0] [1 0 -Bx] [x]
[y'''] [0 1 By] [sin(angle) cos(angle) 0] [0 1 -By] [y]
[1 ] [0 0 1] [ 0 0 1] [0 0 1] [1]
附加维度用于执行转换,因为转换是一个剪切映射
https://jsfiddle.net/hnv0dcs6/2/相关文章:
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- 正在SharePoint 2013母版页中添加JQuery移动文件
- 如何在android中使用phonegap将文件从一个文件夹移动/复制到另一个文件夹
- 如何使用phaser使html5游戏在移动设备浏览器上运行
- FabricJs-限制主对象内添加对象的移动区域
- 如何从画布上的某个移动事件中获取X和Y
- 触摸移动时切换到新元素
- 每当您在选择器内移动鼠标时,悬停功能就会重复
- 麻烦将coffee脚本片段移动到rails中自己的类中
- 如何将控制器配置移动到其自己的文件中
- 有没有办法让我的.js文件自毁,或重命名自己,或者在一次使用后将自己移动到新位置
- j查询移动加载脚本后提交表单给自己
- KineticJS - 如何制作自己的事件,或者在物体移动时如何做某事
- 将值从一个html表单移动到另一个,这样一个表单就可以提交自己和另一个表单的值
- 如何从HTML文件中取出脚本并将其移动到它自己的. js文件中
- jQuery -选择相同的元素并将它们移动到自己的父元素中
- 当将内联javascript移动到它自己的文件中时,页面不再正常工作
- 旋转点由其形式斧使自己移动到左上方
- 表单提交给自己:我如何创建一个反向链接,在移动设备上工作
- 按钮,移动它自己的容器