Ваша формула верна.
Предполагая, что три угла треугольника закодированы как столбцы матрицы t
, вот простая реализация Python:
import numpy as np
def get_cartesian_from_barycentric(b, t):
return t.dot(b)
b = np.array([0.25,0.3,0.45]) # Barycentric coordinates
t = np.transpose(np.array([[0,0],[1,0],[0,1]])) # Triangle
c = get_cartesian_from_barycentric(b, t)
Найденная формула также вычисляет декартову по барицентрическим координатам, но использует предопределенный правильный треугольник со следующими координатами:
(x1,y1) = (0,0)
(x2,y2) = (1,0)
(x3,y3) = (1/2,sqrt(3)/2)
В этом расчете код считает, что каждый столбец - это точка, выраженная барицентрическимикоординаты.Таким образом, он рассчитывает 6 баллов одновременно.Кроме того, барицентрические координаты должны быть нормализованы, т.е. lambda1 + lamda2 + lambda3 = 1
.Этот код не предполагает нормализацию, поэтому для обеспечения этого свойства его необходимо разделить на сумму лямбда-выражений.Конечно, мы можем видеть, что сумма всегда равна 1 для всех 6 точек, но код можно использовать для лямбд, которые не суммируются с 1.
В последнем приведенном вами примере Bточка треугольника и не выражается барицентрическими координатами.P - это точка, выраженная барицентрическими координатами относительно точек A, B и C. Пусть A = (x1,y1)
, B = (x2,y2)
и C = (x3,y3)
, а P имеет барицентрические координаты (l1,l2,l3)
.Тогда декартовы координаты (xp,yp)
из P равны
xp = l1*x1 + l2*x2 + l3*x3
yp = l1*y1 + l2*y2 + l3*y3