如何获得在重心坐标方面构成较小三角形的顶点?

时间:2019-05-28 02:26:42

标签: python math geometry

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

enter image description here

图(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

这是输出。

enter image description here

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

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

ps: 对不起fig_1与真实值不符。

2 个答案:

答案 0 :(得分: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,我们将获得方向相反的小三角形(相对于负数)

答案 1 :(得分:1)

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

ABC的质心为G := (A + B + C) / 3。我们想要执行一个uniform scaling的r使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。