gpt4 book ai didi

android - 相对于旋转角度的矩形坐标

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:13:05 24 4
gpt4 key购买 nike

我正在尝试使用 Surfaceview 和 Canvas 绘图在 Android 中创建自定义组件。组件可通过触摸调整大小和旋转。考虑创建一个 ImageView ,其顶部、右侧、底部和左侧边缘可通过触摸和拖动所需边缘进行缩放。我正在使用 RectF 来保持组件的边界,对于旋转,我正在使用 canvas.rotate(angle, bounds.centerX(),bounds.centerY()) 方法.问题是在调整顶部边缘大小时, Let 、 Right 和 Bottom 边缘应该是固定的,如果旋转角度不是 0 度,我无法修复它。我需要一个数学解决方案来找出旋转矩形相对于实际矩形边界的 x、y 坐标。

我可以借助一些图片来解释它。下图显示了两个矩形,它们的边界也是已知的,并以各自的颜色显示。 将绿色矩形视为组件的初始边界,即。旋转-45度,中心为(10,10)。现在要重新调整矩形的 Top edge 大小并显示在下一个图 2 中。

Figure 1

从图 2 可以看出,Y 位置从 6 减少到 4。旋转后的矩形也显示为粉红色。请记住,我正在调整组件的大小,而组件的旋转角度为 -45 度,因此在拖动 Top Edge 矩形时,不应更改其Left、Right 和 Bottom 位置。因此,图 2 的粉红色矩形 应具有与图 1 的绿色矩形 相同的左、右和底部坐标。得到的矩形与预期的矩形对比如图3所示。

Figure 2

在图 3 中,黄色矩形是 Expected/Required 输出。与绿色旋转矩形相比,获得的矩形粉红色向上移动,并且其变化取决于旋转角度

  • 我有旋转角度 = -45 度
  • 实际(未调整大小)矩形的边界。
  • 旋转 = -45 度时实际(未调整大小)矩形的边界。
  • 调整大小的矩形边界。
  • 在旋转 = -45 度时调整大小的矩形边界。

如何计算黄色矩形的边界/中心。这样我就可以正确地调整组件的大小了吗?请问有什么数学可以应用吗?

所需的点/坐标在图 3 中标记为红色圆圈。

Figure 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)]

关于android - 相对于旋转角度的矩形坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12934184/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com