как сделать преобразование из барицентрических координат в декартовы? - PullRequest
2 голосов
/ 27 мая 2019

за вики , преобразование из барицентрических координат в декартовые координаты выглядит следующим образом

enter image description here

вот кусок кода, пришедший откуда-то еще

import numpy as np
import matplotlib.pyplot as plt
# from barycentric coordinates to Cartesian coordinates
a = np.array([0.  , 0.  , 1.  , 0.25, 0.25, 0.5 ])
b = np.array([0.  , 1.  , 0.  , 0.25, 0.5 , 0.25])
c = np.array([1.  , 0.  , 0.  , 0.5 , 0.25, 0.25])
x = 0.5 * ( 2.*b+c ) / ( a+b+c )
y = 0.5*np.sqrt(3) * c / (a+b+c)
plt.scatter(x,y)
plt.show()

Похоже, что фрагмент кода использует другую формулу, если это так, что это за формула?

enter image description here

предположим, что барицентрические координаты B равны (0,0,1), как вычислить его декартовы координаты? что лямбда_1, лямбда_2, лямбда_3, х_1, х_2, х_3, у_1, у_2, у_3 для точки B?

1 Ответ

1 голос
/ 27 мая 2019

Ваша формула верна.

Предполагая, что три угла треугольника закодированы как столбцы матрицы 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...