Math 包围矩形的椭圆

Math 包围矩形的椭圆,math,Math,数学101题-有人知道如何计算一个椭圆(宽度/高度),它将包围一个给定的矩形。很明显,没有单一的椭圆——我在寻找一种算法,它将给我各种宽度/高度组合——或者可能是椭圆的最小面积?这是一个图形用户界面,所以我想要的是一个美观的高宽比 提前感谢。如果您将椭圆的长宽比设置为与矩形相同的长宽比,那么您可以在这样的基础上工作:您想要的是一个包围正方形的圆,然后将其拉伸,就像您已将正方形转换为所需的矩形一样 对于一半边长=1的正方形,圆的半径为sqrt(2) 因此,从0-360'扫掠θ,椭圆的坐标点为:

数学101题-有人知道如何计算一个椭圆(宽度/高度),它将包围一个给定的矩形。很明显,没有单一的椭圆——我在寻找一种算法,它将给我各种宽度/高度组合——或者可能是椭圆的最小面积?这是一个图形用户界面,所以我想要的是一个美观的高宽比


提前感谢。

如果您将椭圆的长宽比设置为与矩形相同的长宽比,那么您可以在这样的基础上工作:您想要的是一个包围正方形的圆,然后将其拉伸,就像您已将正方形转换为所需的矩形一样

对于一半边长=1的正方形,圆的半径为sqrt(2)

因此,从0-360'扫掠θ,椭圆的坐标点为:

  • x=cos(θ)*sqrt(2)*矩形宽度+x中心
  • y=sin(θ)*sqrt(2)*直线高度+y中心

其中,rect.width和rect.height是相关边的一半宽度。

假设您指的是外切(比“封闭”更精确),您可以阅读。从那里,你可以把它拉伸成矩形,就像Alnitak说的那样。

以原点为中心的椭圆方程是

(x/A)^2 + (y/B)^2 = 1
现在,如果您想用eclipse将MxN矩形括起来,可以将其中心移动到坐标原点。右上角的坐标是
(M/2,N/2)
,在椭圆方程中,你可以使用一个公式来求解给定a(或给定B)的B


如果你有一个4x2的矩形,右上角的坐标是(2,1),替换为
(2/a)^2+(1/B)^2=1
,那么如果
a=4
求解B得到
B=1/sqrt(1-(1/2)^2)
,实验上,我发现由比内部矩形大的矩形定义的椭圆可以工作。因此,将sqrt(2)传递给此函数,您将得到相应的矩形:

RectangleF boundingEllipse=GetScaledRectangle(innerRect,Convert.ToSingle(Math.Sqrt(2d))

私有矩形F GetScaledRectangle(矩形F rect,浮动比例) { 浮动宽度=矩形宽度*比例; 浮动高度=垂直高度*刻度

float gap = width - rect.Width;
float left = rect.Left - (gap / 2f);

gap = height - rect.Height;
float top = rect.Top - (gap / 2f);

return new RectangleF(left, top, width, 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)

    示例:

    事实上,它还不太正确——我还在研究它……好的,我想数学现在确实正确了。我已经在Grapher.app上测试了公式,这是完美的。为了明确起见,只需将矩形的尺寸乘以sqrt(2)即可获得边界椭圆的尺寸。如果要更改纵横比,可以使用宽度'=sqrt(矩形宽度^2+比率^2*矩形高度^2)和高度'=宽度'/ratio,其中比率是请求的纵横比(宽度/高度)对于椭圆,我最近也遇到了同样的(编程)问题,在将问题发布到数学后,我发现了这个答案。如果还有人对此感兴趣,我认为我们有一个更普遍的解决方案,请参阅上面JeanMarie的答案,以便进行完整的讨论。请注意,您的“sqrt(2)答案”对应于我们的n=1案例。感谢您的解释-现在完全有意义了。蜥蜴比尔。数学和编程之间的界限充其量是模糊的,在这种情况下,这与编程完全相关。我需要画一个矩形内的渐变。最好的方法是确定椭圆上的点,椭圆外接我的矩形。砰。数学,很烂,和编程无关。回答这个问题的关键是从矩形定义坐标中获取椭圆定义坐标。这个问题的答案是一个数学公式,而不是一个算法。如果它与编程无关,为什么我突然想知道这个问题的答案,而我为什么只想在编程或数学课上知道这类问题的答案,为什么谷歌搜索这个问题的数学答案会让我最接近这个编程网站?在我看来,把这个话题划掉的决定是应用了一个过于字面的定义。