【问题标题】:How to draw minimum ellipse that encloses the text of various lengths如何绘制包含各种长度文本的最小椭圆
【发布时间】:2021-12-30 14:37:56
【问题描述】:

请看下图。

请根据阴影矩形的坐标进行解释。 如果我有整个组的阴影矩形的坐标 center_x 和 center_y ,我怎样才能找到椭圆的 xradius 和 yradius 来绘制最后显示的椭圆?

【问题讨论】:

    标签: algorithm math graphics calculation ellipse


    【解决方案1】:

    所以你想要的可能是集合上的最小体积椭球。您的集合由文本框确定,而文本框本身完全由每个框的 4 个顶点确定。以 x1 为中心的椭圆可以由中心向量 mu 和 sym pos.def 形状矩阵 A 确定为

    Ell(mu,A) = {x 使得 (x-mu)'A(x-mu)

    min -log(Det(A)) 
    s.t. (v_i-mu)'*A*(v_i-mu)<=1 }
    

    其中 (v_i[0],v_i1) 是您的点的平面坐标(框的角)。 有一种方法可以将其嵌入到更高的维度中以摆脱 mu's

    min -log(Det(B)) 
    s.t. ([v_i,1])'*B*(v_i-mu)<=1 }
    

    而且这是一个凸问题,有多种算法可以解决,这里有一个基于椭球法的:

    【讨论】:

    • 对不起,我不明白,你能用外行的话详细说明吗?我不知道如何做矩阵数学,我可以摆脱 for 循环和 if 检查吗?
    • 好吧,如果您的文本总是排列整齐且对称,因此最优椭圆的轴与 xy 轴对齐,您可以将问题表述为 min (piab) 标准(v_i[0]-mu_0)^2/a^2 +(v_i[1]_-mu_0)^2/a^2
    • 感谢您的回答。它给了我关于如何解决我的问题的线索。我想我做到了,它回答了我自己的问题。
    【解决方案2】:

    我不知道这是否是理想的解决方案。但这似乎对我有用。 因为我的文字总是居中对齐。

    1. 我从一个适合图 2 中绘制的矩形内部的椭圆开始。(由 xradius 和 yradius = 矩形的一半宽度和一半高度组成)。
    2. 我遍历文本框并为每个文本框 (a) 找到一个角 使用这里找到的这个公式 radius length of ellipse at any angle 其中 a 和 b 只是我的大矩形的一半宽度和一半高度,中心只是当前椭圆的中心,θ 是从中心到文本框角的角度。我称之为椭圆半径。然后(b)我找到从中心到角落的长度,称之为 hyp(Hypotenuse 的缩写)(c)将 hyp 除以 ellipseRadius 以获得一个因子。这是我必须将 xradius 和 yradius 乘以的因子(称为因子),以包括保持与我开始的形状相同的纵横比的那个角。但我还没有乘它。 (d)我只是不断循环并寻找一个最大因子(称之为 maxFactor)。
    3. 完成循环后,我设置 xradius = xradius * maxFactor 和 yradius = yradius * maxFactor
    4. 使用步骤 3 中新设置的 xradius 和 yradius 绘制椭圆。 就是这样。

    这是它产生的示例(黑色标签与之前的浅绿色标签相比): 正如你所看到的,黑色标签围绕着文本,但没有像绿色标签那样太多的空间。这就是我想要实现的目标。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-05
      相关资源
      最近更新 更多