相对于旋转角度的矩形坐标 [英] Rectangle Coordinates With Respect To The Rotation Angle
本文介绍了相对于旋转角度的矩形坐标的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试使用Surfaceview和画布绘图在Android中创建自定义组件。这些部件可以通过触摸来调整大小和旋转。考虑创建一个图像视图,它的上、右、下和左边缘可以通过触摸和拖动所需的边缘进行缩放。我使用RectF
来保持组件的边界,对于旋转,我使用canvas.rotate(angle, bounds.centerX(),bounds.centerY())
方法。问题是,当调整顶部边缘的大小时,字母、右侧和底部边缘应该是固定的,如果旋转角度不是0度,我就无法修复它。我需要一个数学解决方案来找出旋转矩形相对于实际矩形边界的x,y坐标。
我可以用一些图片来解释它。 下图显示了两个矩形,它们的边界也是已知的,并以各自的颜色显示。将Green RECT视为组件的初始边界,即。旋转-45度,中心为(10,10)。现在将调整矩形的上边缘的大小并显示在下一图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度
这样,您不必考虑它,并且您始终在未旋转的坐标下工作。
按a
角度旋转的[x, y]
点将以[x*cos(a) - y*sin(a), x*sin(a) + y*cos(a)]
结束
这篇关于相对于旋转角度的矩形坐标的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文