我正在尝试使用Surfaceview和画布绘制在Android中创建自定义组件。这些组件可以通过触摸来重新调整大小并且可以旋转。考虑创建一个图像视图,其顶部,右侧,底部和左侧边缘可通过触摸和拖动所需边缘进行扩展。我正在使用RectF
来保持组件的边界。对于旋转,我使用的是canvas.rotate(angle, bounds.centerX(),bounds.centerY())
方法。问题是在调整上边缘的大小时,Let,Right和Bottom边缘应该是固定的,如果旋转角度不是0度,我就无法修复它。我需要一个数学解决方案来找出相对于实际矩形边界的旋转矩形的x,y坐标。
我可以借助一些图片来解释它。 下图显示了两个矩形,其边界也是已知的并以相应的颜色显示。 将Green Rect视为组件的初始边界,即。旋转-45度,中心为(10,10)。现在重新调整矩形的上边缘,并在下面的图2中显示。
从图2可以看出,Y位置从6减小到4.旋转的矩形也以粉红色显示。请记住,当组件处于旋转角度-45度时,我正在调整大小,因此在拖动上边缘矩形的左,右和底部位置时不应更改。所以图2的粉红色矩形应该具有左,右和底坐标与图1的绿色矩形相同。获得的和预期的矩形的比较如图3所示。
在图3中,黄色矩形是预期/必需输出。与绿色旋转矩形相比,获得的矩形粉红色向上移动,这取决于旋转角度。
如何计算黄色矩形的边界/中心。这样我可以正确实现组件的大小调整吗?让我知道是否有任何数学可以应用?
图3中所需的点/坐标标记为红色圆圈。
答案 0 :(得分:0)
本回答中的所有颜色均参考您的图3.
如果我正确理解了您的问题,您就知道如何计算粉红色矩形以及绿色矩形的所有细节。因此,只需将粉红色矩形的一个角与绿色矩形的相应角之间的差异。将该差异(分别为两个元素的矢量,即 x 和 y 差异)添加到粉红色矩形的中心,将为您提供所需的黄色三角形中心。 / p>
如果您还需要计算粉红色矩形的尺寸,您可能希望在未旋转的坐标系中这样做。将绿色矩形与要扩展矩形的点的坐标一起,然后向后旋转+ 45°。然后你可以将矩形的高度扩展到你想要的值,这将为你提供蓝色矩形,并通过旋转粉红色矩形。