【问题标题】:Calculating smallest rotated rectangle that bounds another and maintains aspect计算限制另一个并保持纵横比的最小旋转矩形
【发布时间】:2014-11-11 01:28:29
【问题描述】:

我需要能够计算出rectangle 2

的大小

为了说明我的问题,这里有一张图表:

  • 我知道矩形1的width和height
  • 我知道rectangle 2 的纵横比以及最小值height 和width 总是大于rectangle 1
  • 我知道rotation 的来源,它始终是rectangle 1 的中心
  • 我知道rotation 的角度弧度
  • 矩形 1 必须始终完全位于 矩形 2 内

鉴于上述变量,我需要计算 rectangle 2 的最小尺寸,同时保持其纵横比和旋转原点。

这个出色的函数计算旋转的外部矩形内可能的最大矩形。

Calculate largest rectangle in a rotated rectangle

我尝试将它用作实现我需要的行为的基础,但到目前为止还没有运气。我会链接到它,以防它对数学知识比我更深的人有帮助。

任何帮助将不胜感激。

【问题讨论】:

  • 旋转角度是否在0到1/2弧度之间?该角度将出现在所有相邻的小三角形中,因此您可以轻松找到新矩形的顶点。
  • 角度可以是半圈内的任意位置,所以 0 - 1Pi 弧度。
  • 关于相邻三角形的想法,对你有用吗?这是一些三角问题,而不是编程。
  • @TimothyHa 确实这是一个三角问题。这就是我苦苦挣扎的原因,因为我对这种数学的掌握很差。

标签: javascript algorithm math geometry


【解决方案1】:

在cmets中你说这只是一个三角问题,所以我只写公式。

在您的图片中,右下角三角形将是您需要的较大矩形的一部分。

如果较小的角度是x(它等于旋转角度),并且内部矩形的边是a,那么三角形的边将是a * cos(x)和a * sin(x)。当我们移动到内部矩形的下一个边,较低的 b,我们将有 b * cos(x), b * sin(x)。

图片是对称的,所以大矩形的一侧是a * cos(x) + b * sin(x),另一侧是a * sin(x) + b * cos(x)。这些是您需要的尺寸。

您可以检查 x = 0(无旋转)、x = pi/2 或 pi 以查看这些情况下的特殊情况和大小。

【讨论】:

  • 我认为公式对 0 pi/2,我认为我们需要将 x 替换为 pi-x。
  • 这看起来很棒,谢谢...我会尽快用 javascript 写出来,并在我确认后将您的回答标记为正确。
  • @gordyr 你在这方面进展如何?
  • 对不起,伙计,完全忘了给你答案。再次感谢您的帮助,它让我准确地到达了我需要的地方。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-26
  • 2021-04-03
  • 2017-08-31
  • 1970-01-01
  • 2017-04-02
  • 1970-01-01
  • 2015-03-29
相关资源
最近更新 更多