Android 相对于旋转角度的矩形坐标
我正在尝试使用Surfaceview和canvas绘图在Android中创建自定义组件。组件可通过触摸重新调整尺寸和旋转。考虑创建图像视图,其顶部、右侧、底部和左侧边缘可通过触摸和拖动所需的边缘来缩放。我使用Android 相对于旋转角度的矩形坐标,android,math,game-physics,discrete-mathematics,Android,Math,Game Physics,Discrete Mathematics,我正在尝试使用Surfaceview和canvas绘图在Android中创建自定义组件。组件可通过触摸重新调整尺寸和旋转。考虑创建图像视图,其顶部、右侧、底部和左侧边缘可通过触摸和拖动所需的边缘来缩放。我使用RectF来保持组件的边界,对于旋转,我使用canvas.rotate(angle,bounds.centerX(),bounds.centerY())方法。问题是,在调整上边缘的大小时,左边缘、右边缘和下边缘应该是固定的,如果旋转角度不是0度,我无法固定它。我需要一个数学解来找出旋转矩形相
RectF
来保持组件的边界,对于旋转,我使用canvas.rotate(angle,bounds.centerX(),bounds.centerY())
方法。问题是,在调整上边缘的大小时,左边缘、右边缘和下边缘应该是固定的,如果旋转角度不是0度,我无法固定它。我需要一个数学解来找出旋转矩形相对于实际矩形边界的x,y坐标
我可以借助一些图片来解释它。
下图显示了两个矩形,它们的边界也是已知的,并以各自的颜色显示将绿色矩形视为组件的初始边界,即旋转-45度,中心为(10,10)。现在将重新调整矩形的上边缘的大小,并显示在下图2中
从图2可以看出,Y位置从6减少到4。旋转的矩形也以粉红色显示。请记住,当组件旋转角度为-45度时,我正在调整大小,因此在拖动上边缘时,不应更改矩形的左、右和底部位置。因此,图2的粉红色矩形应该具有左、右和底部坐标,与图1的绿色矩形相同。获得的矩形与预期矩形的比较如图3所示
在图3中,黄色矩形是预期/要求的输出。与绿色旋转的矩形相比,获得的矩形粉红色向上移动,并且随着旋转角度的变化而变化
- 我有旋转角度=-45度
- 实际(未重新调整大小)矩形的边界
- 旋转=-45度时实际(未重新调整大小)矩形的边界
- 重新调整大小的矩形的边界
- 旋转时重新调整大小的矩形的边界=-45度
在
[x,y]
以角度旋转的点a
将在[x*cos(a)-y*sin(a),x*sin(a)+y*cos(a)]
仅旋转点,基本公式为:x=x*cos(角度)-y*sin(角度);y=y*sin(角度)+y*cos(角度);