我正在尝试使用 Surfaceview 和画布绘图在 Android 中创建自定义组件。这些组件可以通过触摸来调整大小和旋转。考虑创建一个图像视图,其顶部、右侧、底部和左侧边缘可通过触摸并拖动所需边缘进行缩放。我在用RectF
为了保持组件的边界,我正在使用旋转canvas.rotate(angle, bounds.centerX(),bounds.centerY())
方法。问题是在调整顶部边缘大小时,应该修复 Let 、 Right 和 Bottom 边缘,如果旋转角度不是 0 度,我无法修复它。我需要一个数学解决方案来找出旋转矩形相对于实际矩形边界的 x,y 坐标。
我可以借助一些图像来解释它。
下图显示了两个矩形,其边界也是已知的并以各自的颜色显示。将绿色矩形视为组件的初始边界,即。旋转-45度,中心为(10,10)。现在要重新调整大小Top edge矩形的形状并显示在下图 2 中。
从图 2 可以看出,Y 位置从 6 个减少到 4 个。旋转后的矩形也以粉红色显示。请记住,我在组件旋转角度为 -45 度时调整大小,因此在拖动时Top Edge长方形的左、右和底部位置不应改变。所以图 2 的粉红色矩形应该有左、右、下坐标与...一样图 1 的绿色矩形。获得的矩形与预期矩形的比较如图 3 所示。
在图 3 中黄色矩形是预期/必需的输出。这获得矩形粉红色与绿色旋转矩形,其变化取决于旋转角度.
- 我的旋转角度=-45度
- 实际(未调整大小)矩形的边界。
- 旋转 = -45 度时的实际(未调整大小)矩形的边界。
- 调整大小的矩形的边界。
- 旋转 = -45 度时调整大小的矩形的边界。
如何计算黄色矩形的边界/中心。这样我就可以正确地调整组件的大小了?请问有什么数学可以应用吗?
所需的点/坐标在图 3 中标记为红色圆圈。
关键是:“如果旋转角度不是 0 度,我无法修复它。”
假设您的矩形旋转了 10 度。
1)将鼠标坐标绕屏幕上的某个点旋转-10度
2)将矩形中心旋转-10度
...现在您将问题简化为 0 度的矩形。矩形移动了,是的,鼠标移动了,但它们应该是相对的。
3)现在进行矩形操作。矩形中心将会移动。
4)将新矩形中心旋转10度
这样您就不必考虑它,并且始终在未旋转的坐标中工作。
指向[x, y]
旋转角度a
最终将在[x*cos(a) - y*sin(a), x*sin(a) + y*cos(a)]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)