此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与真实值不符。
答案 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。