【问题标题】:Calculating new bounds after rotating a square旋转正方形后计算新边界
【发布时间】:2014-06-10 05:53:15
【问题描述】:

我正在尝试在旋转正方形后计算边界框的大小。我附上了一张图片,希望能描述我想要做什么。

旋转 x 度后,边界变大。给定原始正方形的角度和尺寸,有没有办法计算这个新尺寸?谢谢。

【问题讨论】:

  • 旋转正方形的目的是什么? (如果不清楚我在说什么,我很抱歉)。你是围绕它的中心旋转它吗?我想,这是Math.StackExchange 的问题。附言如果您只对新边界矩形的大小感兴趣,而不是位置感兴趣,那么旋转点并不重要,我只是想澄清一下。
  • 您可以使用 trig 获取新尺寸。如果您知道原始宽度,则可以将新宽度计算为第二张图像中形成的白色三角形的相邻边和相对边的总和。 newWidth = width*cos(angle) + width*sin(angle)
  • 如果那个正方形是 UIImageView 并且它是通过改变视图的transform 属性来旋转的,那么边界框就是视图的frame 属性。实际上,您在那里绘制的内容几乎就是frame 属性的定义。

标签: ios objective-c trigonometry


【解决方案1】:

这可以通过 Pythag 的 2 个应用程序来解决。

你的大方块的每一边都被你的小蓝色方块的一角分成两部分。让我们称这两个部分中较大的长度为 a,较小的长度 b(尽管如果 x > 45 度则 b 会更大),蓝色方块的边长为 l,黑色方块的边长为 L。

我们可以将第一个计算为:Cos(x) = a/l。 第二个为 Sin(x) = b/l

因此我们有 L = (Sin(x)+Cos(x))*l。

编辑:在这两种情况下,面积当然是边长的平方。

【讨论】:

  • 假设x 是一个角度(弧度),我们有L = (|sin(x)| + |cos(x)|)*l
【解决方案2】:

这只有在你有坐标的情况下才有效。如果你能得到四个顶点的坐标,那就太容易了。假设边界左上角的点是A。正方形的前两个顶点是 sq_a 和 sq_b。顶点A 的值将是(sq_a.x,sq_b.y)。然后通过对称性,边界和正方形之间形成的所有四个小三角形将具有相同的面积。计算在A、sq_a 和sq_b 之间形成的三角形的面积(这应该很容易......1/2 * breadth * height)。乘以 4,您将得到总面积。很抱歉无法发布详细的图片。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-11
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多