Привет.
Наверняка всем доводилось быть свидетелями оценки на глазок степени сходства ребенка с родителями: что-нибудь типа «вылитый папа, но на маму тоже похож!!!»
![image](https://habrastorage.org/r/w780q1/getpro/habr/post_images/9b5/9f8/121/9b59f81219f5fcafbcc7ccd8c601446f.jpg)
(взято отсюда)
Как в примере на изображении, можно оценить степень похожести в процентах. Можно задействовать еще родственников, для более точного описания лица малыша в виде взвешенной суммы лиц родни…
И будет это выглядеть и восприниматься вполне естественно для «обычного» человека, не связанного с антропологией, или, например, криминалистикой. Для профессионала в области анализа и распознавания лиц, человеческое лицо представляется, скорее, набором параметров. То есть, точкой (набор координат) в некотором пространстве с базисом (оси, соответствующие параметрам). И если описывать лицо ребенка в сравнении с его родственниками, то скорее всего, точка, соответствующая лицу ребенка окажется в этом пространстве параметров внутри выпуклой оболочки облака точек, соответствующих лицам ближайших родственников (но это не точно).
Собственное, к чему я это все… Эти два подхода к описанию лиц соответствуют двум системам координат:
Пусть в
-мерном пространстве заданы
точка
с радиус-векторами
,
. Причем, ни одна из точек не лежит в линейной оболочке радиус-векторов остальных точек… Проще говоря, совсем просто: пусть эти точки образуют фигуру, которую нельзя полноценно представить в пространстве с размерностью меньше
.
В случае одномерного пространства (линия), нам необходимы 2 не совпадающие точки, случае двумерного пространства — невырожденный треугольник, в случае трехмерного — тетраэдр.
Тогда любая точка пространства
может быть представлена радиус-вектором
:
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/9c1/8f6/cd6/9c18f6cd62d5716341222c27009f5bb5.png)
Набор
и есть барицентрические координаты.
Пожалуй, начнем с относительных недостатков:
Отчасти первый недостаток компенсируется тем, что не смотря на необходимость использования
барицентрической координаты при описании точки в
-мерном пространстве, количество степеней не повышается. Барицентрические координаты, определенные в формуле (1), связаны соотношением:
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/a76/831/ee4/a76831ee4d23c36ad5d627e60ca461d0.png)
Что касается второго недостатка, если есть необходимость вычисления расстояния между точками, представленными барицентрически, то имеет смысл посчитать скалярные произведения
и использовать аналог расстояния Махаланобиса.
Каковы же бонусы от использования барицентрических координат?
Не сложнее, чем любое линейное преобразование системы координат. Потому что по сути вычисление барицентрических координат таковым преобразованием и является.
Перепишем радиус-вектора точек в следующем виде:
, где
— радус-вектора в системе координат с центром в точке
.
Тогда формулу (1) можно переписать в следующем виде:
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/92e/ad6/019/92ead6019108ab7ee42f157982c7135f.png)
Раскроем скобки в сумме:
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/62b/ca8/e2e/62bca8e2eef9e144532fde3187c721b1.png)
Согласно свойства (2):
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/850/a3f/f9e/850a3ff9eb6f0c5b3a5049e936d90880.png)
Соответственно:
,
где![image](https://habrastorage.org/getpro/habr/post_images/8f8/f9a/c32/8f8f9ac32507ac16f6ca28d73b8b7cca.svg)
Учитывая (2), ограничимся вычислением первых n барицентрических координат. Представим переход в барицентрические координаты как линейное преобразование:
,
где
— вектор n барицентрических координат (кроме последней),
— матрица преобразования.
Учитывая свойства барицентрического представления, если в качестве
подставить один из векторов
(
), то мы получим вектор с нулевыми компонентами, кроме одной i-й, которая будет равна 1.
Если матрицу
умножить на матрицу
, составленную по столбцам из
, то мы должны получить единичную матрицу (матрицу с единицами на главной диагонали и нулями в остальных элементах):
,
где
,
— единичная матрица (
— символ Кронекера: 1, если
, иначе — 0).
Из (10) находим
:
![image](https://habrastorage.org/getpro/habr/post_images/5b6/5aa/27c/5b65aa27c32a8ac319efcb4a4258e661.svg)
Таким образом, имея набор из точек с радиус-векторами
,
мы можем вычислить матрицу для преобразования в барицентрические координаты:
![image](https://habrastorage.org/getpro/habr/post_images/161/990/d82/161990d82f91c61716863b527ab9328f.svg)
Используя эту матрицу, мы можем получить первые
барицентрических координат точки
с радиус-вектором
:
![image](https://habrastorage.org/getpro/habr/post_images/4e9/2fb/1b7/4e92fb1b7df21c7760dba6d659b0b5e3.svg)
Вновь воспользовавшись соотношением (2), получим последнюю барицентрическую координату:
![image](https://habrastorage.org/getpro/habr/post_images/f48/35d/72a/f4835d72a5f948add70279d304a3667b.svg)
Может с первого взгляда барицентрика и кажется неуклюжей и сложной. Но на самом деле, это очень удобный и незаменимый во многих задачах инструмент, к которому довольно быстро привыкаешь. Потому, что тут нет никакой магии, это линейная алгебра в чистом виде!
Наверняка всем доводилось быть свидетелями оценки на глазок степени сходства ребенка с родителями: что-нибудь типа «вылитый папа, но на маму тоже похож!!!»
![image](https://habrastorage.org/getpro/habr/post_images/9b5/9f8/121/9b59f81219f5fcafbcc7ccd8c601446f.jpg)
(взято отсюда)
Как в примере на изображении, можно оценить степень похожести в процентах. Можно задействовать еще родственников, для более точного описания лица малыша в виде взвешенной суммы лиц родни…
И будет это выглядеть и восприниматься вполне естественно для «обычного» человека, не связанного с антропологией, или, например, криминалистикой. Для профессионала в области анализа и распознавания лиц, человеческое лицо представляется, скорее, набором параметров. То есть, точкой (набор координат) в некотором пространстве с базисом (оси, соответствующие параметрам). И если описывать лицо ребенка в сравнении с его родственниками, то скорее всего, точка, соответствующая лицу ребенка окажется в этом пространстве параметров внутри выпуклой оболочки облака точек, соответствующих лицам ближайших родственников (но это не точно).
Собственное, к чему я это все… Эти два подхода к описанию лиц соответствуют двум системам координат:
- барицентрической, описание точки в пространстве (в нашем примере: лица) через взвешенную смесь других точек;
- аффинной, описание точки в пространстве через координаты в некотором базисе.
Так что же такое барицентрические координаты?
Пусть в
![image](https://habrastorage.org/getpro/habr/post_images/65a/ec4/bb1/65aec4bb1bdf412ba56d3cd83501cc22.png)
![image](https://habrastorage.org/getpro/habr/post_images/214/829/644/2148296445a515cb4718f6449a3c87d7.png)
![image](https://habrastorage.org/getpro/habr/post_images/791/5c9/590/7915c95905271a9a0980f90a98e70d3b.png)
В случае одномерного пространства (линия), нам необходимы 2 не совпадающие точки, случае двумерного пространства — невырожденный треугольник, в случае трехмерного — тетраэдр.
Тогда любая точка пространства
![image](https://habrastorage.org/getpro/habr/post_images/654/2c4/375/6542c43754e0f477c8aa53ba6210ee0b.png)
![image](https://habrastorage.org/getpro/habr/post_images/2e2/7cc/969/2e27cc96972d38acc789b1af14320309.png)
![image](https://habrastorage.org/getpro/habr/post_images/9c1/8f6/cd6/9c18f6cd62d5716341222c27009f5bb5.png)
Набор
![image](https://habrastorage.org/getpro/habr/post_images/838/cfc/632/838cfc632711841cd7d1cc2fb4aaf643.png)
Чем барицентрические координаты лучше/хуже аффинных?
Пожалуй, начнем с относительных недостатков:
- в барицентрическом представлении нам необходимо на одну координату больше, чем в аффинном;
- расстояние между точками, заданными барицентрически, нельзя напрямую вычислять в этих координатах.
Отчасти первый недостаток компенсируется тем, что не смотря на необходимость использования
![image](https://habrastorage.org/getpro/habr/post_images/a76/831/ee4/a76831ee4d23c36ad5d627e60ca461d0.png)
Что касается второго недостатка, если есть необходимость вычисления расстояния между точками, представленными барицентрически, то имеет смысл посчитать скалярные произведения
![image](https://habrastorage.org/getpro/habr/post_images/214/829/644/2148296445a515cb4718f6449a3c87d7.png)
Каковы же бонусы от использования барицентрических координат?
- Барицентрические координаты инвариантны к аффинным преобразованиям пространства. Это свойство используется, например, для линейной интерполяции в компьютерной графике. Пусть в вершинах треугольного элемента поверхности определены текстурные координаты
и нормали
(
), тогда каждая точка этого участка поверхности будет обладать барицентрическими координатами
, ее текстурные координаты
и нормаль
могут быть вычислены как:
- По барицентрическим координатам легко определить, принадлежит ли точка
части пространства, ограниченной многогранником с вершинами
: это выполняется только в том случае, если
. Равенство i-й барицентрической координаты 1 означает, что точка
совпадает с
. Если несколько барицентричесих координат равны 0, то это означает, что точка принадлежит подпространству, натянутому на радиус-вектора остальных точек, соответствующие координаты которых больше 0.
Наверное, они очень сложно вычисляются?
Не сложнее, чем любое линейное преобразование системы координат. Потому что по сути вычисление барицентрических координат таковым преобразованием и является.
Перепишем радиус-вектора точек в следующем виде:
![image](https://habrastorage.org/getpro/habr/post_images/987/e3c/ffe/987e3cffe9b87fad93d23161d2a650ff.png)
![image](https://habrastorage.org/getpro/habr/post_images/9e1/b04/0ee/9e1b040ee46bd47ce127394d400311b3.png)
![image](https://habrastorage.org/getpro/habr/post_images/2bf/2be/61d/2bf2be61d55bec1ca0e93a0c9568d9b5.png)
Тогда формулу (1) можно переписать в следующем виде:
![image](https://habrastorage.org/getpro/habr/post_images/92e/ad6/019/92ead6019108ab7ee42f157982c7135f.png)
Раскроем скобки в сумме:
![image](https://habrastorage.org/getpro/habr/post_images/62b/ca8/e2e/62bca8e2eef9e144532fde3187c721b1.png)
Согласно свойства (2):
![image](https://habrastorage.org/getpro/habr/post_images/850/a3f/f9e/850a3ff9eb6f0c5b3a5049e936d90880.png)
Соответственно:
где
Учитывая (2), ограничимся вычислением первых n барицентрических координат. Представим переход в барицентрические координаты как линейное преобразование:
где
Учитывая свойства барицентрического представления, если в качестве
Если матрицу
где
Из (10) находим
Таким образом, имея набор из точек с радиус-векторами
![image](https://habrastorage.org/getpro/habr/post_images/214/829/644/2148296445a515cb4718f6449a3c87d7.png)
![image](https://habrastorage.org/getpro/habr/post_images/791/5c9/590/7915c95905271a9a0980f90a98e70d3b.png)
Используя эту матрицу, мы можем получить первые
Вновь воспользовавшись соотношением (2), получим последнюю барицентрическую координату:
Заключение
Может с первого взгляда барицентрика и кажется неуклюжей и сложной. Но на самом деле, это очень удобный и незаменимый во многих задачах инструмент, к которому довольно быстро привыкаешь. Потому, что тут нет никакой магии, это линейная алгебра в чистом виде!