【问题标题】:how get the vertices that constitute a smaller triangle in terms of the barycentric coordinates?如何根据重心坐标获得构成较小三角形的顶点?
【发布时间】:2019-05-28 21:34:54
【问题描述】:

这个post 正在讨论从重心坐标到笛卡尔坐标的转换。

图(fig_1)好像只说明了3个点

B(0,0,1), A(0,1,0), C(1,0,0)

我正在尝试理解转换,这是我的代码

x_inner = np.array([0.375, 0.5  , 0.625, 0.375])
y_inner = np.array([0.21650635, 0.4330127 , 0.21650635, 0.21650635])
x_outer = np.array([0. , 0.5, 1. , 0. ])
y_outer = np.array([0.       , 0.8660254, 0.       , 0.       ])
plt.plot(x_outer,y_outer)
plt.plot(x_inner,y_inner,c='tab:orange')
plt.scatter(x_outer, y_outer)
plt.scatter(x_inner, y_inner)

构成坐标数组的值来自原始post

这是输出。

内部橙色三角形由 3 个顶点组成,分别对应于点 (1/4,1/4,1/2), (1/4,1/2,1/4), (1/2,1 /4,1/4) 在原始重心坐标中。

问题是,如何获得一个较小的三角形,如橙色的 1/10。

ps: 抱歉 fig_1 与真实值不符。

【问题讨论】:

    标签: python math geometry


    【解决方案1】:

    让我们想要构建一个类似于大三角形的小三角形,以相同的质心为中心。质心是中位数的交点,它按比例划分它们2:1,并有 公元前(重心坐标)(1/3, 1/3, 1/3)

    这样的小三角形在第一个中位数的顶点有 B.C.比如(g,f,f),其中g+f+f=1,在第二个中位数(f,g,f)(f,f,g) 在第三个中位数。我们可以看到,对于g=1/3,三角形大小为零(系数cf= 0),对于g=1,三角形等于大三角形(cf = 0)

    对于中间值,只需进行线性插值

     cf = (g - 1/3) * 3/2 = 3/2 * g - 1/2 = (3 * g - 1) / 2
     vice versa
     g = (cf + 1/2) * 2/3 = (2 * cf + 1) / 3
     f = (1 - g) / 2
    

    所以我们可以构建,例如,一半大小的三角形

    cf = 1/2
    g = 2/3
    f = 1/6
    (2/3, 1/6, 1/6)     (1/6, 2/3, 1/6)     (1/6, 1/6, 2/3)
    

    请注意,对于g<1/3,我们将得到倒置的小三角形(cf 负数)

    【讨论】:

    • 感谢您的回答。 f、g 和 c 分别代表什么?我猜 c 代表质心。
    • f和g是重心坐标的分量,CF是系数(小三角形的大小/大三角形的大小)
    • 感谢您对问题的评论,我有一个更清晰的问题,您太酷了。为什么系统有3个中位数?小三角形和大三角形的质心相同,这意味着只有一个中位数,我错过了什么?
    • 三角形有三个中线 - 它们是连接顶点和对边中线的线段en.wikipedia.org/wiki/Median_(geometry)
    【解决方案2】:

    考虑三角形 ABC 和比例因子 r > 0。

    ABC 的质心是G := (A + B + C) / 3。我们希望通过 r 执行 uniform scaling 以保持 G 固定。此转换由h(V) := G + (V - G) * r 给出。

    为了获得缩放的三角形 A'B'C',我们将 h 应用于 ABC 的每个顶点:

    A' := h(A) = A * (1+2*r)/3 + B * (1-r)/3   + C * (1-r)/3
    B' := h(B) = A * (1-r)/3   + B * (1+2*r)/3 + C * (1-r)/3
    C' := h(C) = A * (1-r)/3   + B * (1-r)/3   + C * (1+2*r)/3
    

    上面的系数是重心坐标。

    在你的内三角形 r = 1/4 的情况下。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多