Maths101问题 - 有没有人知道如何计算将包围给定矩形的椭圆(宽度/高度).显然没有单个椭圆 - 我是在一个能给我各种宽度/高度组合的算法之后 - 或者也许是椭圆的最小区域?这是一个GUI,所以我正在寻找一个美观的高度/宽度比例.
提前致谢.
如果你给椭圆提供与矩形相同的纵横比,你可以根据你想要的是一个包围正方形的圆然后拉伸,就像你已经将正方形转换为所需的矩形一样.
对于半边长度= 1的正方形,圆的半径将为sqrt(2).
因此,从0到360' 扫描theta,椭圆的坐标点将是:
x = cos(theta)*sqrt(2)*rect.width + x.center;
y = sin(theta)*sqrt(2)*rect.height + y.center;
其中rect.width和rect.height是相关边的半宽.
椭圆公式为(x/A)^ 2 +(y/B)^ 2 = 1,其中A和B为椭圆的半径
矩形边是Rw和Rh
让我们假设我们想要与矩形具有相同比例的椭圆; 然后,如果我们将圆形(A = B,Rq = Rh)成像并挤压它,我们很好地保持椭圆A/B的比率与矩形边Rw/Rh的比率相同;
这导致我们遵循以下方程组:
(x/A)^ 2 +(y/B)^ 2 = 1
A/B = Rw/Rh
让我们解决它:A = B*(Rw/Rh)
(Rh/2B)^ 2 +(Rh/2B)^ 2 = 1
Rh = sqrt(2)*B
最终解决方案:
A = Rw/sqrt(2)
B = Rh/sqrt(2)
示例:
ellipse http://i55.tinypic.com/sxhlc0.gif
以原点为中心的椭圆方程为
(x/A)^2 + (y/B)^2 = 1
现在,如果你想用一个日食包围一个MxN矩形,你可以将它的中心移动到坐标原点.右上角的坐标是(M/2,N/2)
,在椭圆方程中替换你有一个公式,你可以用它来解A给定A(或给定的B).
如果你有一个4x2的矩形,那么右上角的坐标是(2,1),取而代之的是(2/A)^2 + (1/B)^2 = 1
,如果A=4
求解B则给出B=1/sqrt(1-(1/2)^2)
.