Интерполяция треугольника

У меня есть единичный прямоугольный треугольник и значение в каждой из трех вершин. Мне нужно интерполировать, чтобы найти значение в точке внутри треугольника. Часы поиска не дали ничего, что действительно подсказывало бы мне, как это сделать. Вот моя ближайшая попытка, которая на самом деле довольно близка, но не совсем верна -

                result = 
                v1 * (1 - x) * (1 - y) +
                v2 * x * (1 - y) +
                v3 * x * y;

v1, v2 и v3 - значения в трех вершинах треугольника. (x, y) - это точка в треугольнике, значение которой вы пытаетесь найти.

Здесь мне поможет любой метод. Это не обязательно должен быть прямоугольный треугольник.

Обновленная информация: У меня есть сетка из равномерно расположенных точек и значение в каждой точке.Я делаю треугольник из трех ближайших точек на сетке. Вот картинка, чтобы проиллюстрировать это - enter image description here
Поэтому мне нужно интерполировать между 5, 3 и 7, чтобы найти значение x. Точка также может находиться внутри другого треугольника, что означает, что вы должны интерполировать между 5, 7 и значением нижнего левого угла квадрата.

В коде, который я показал, v1 = 5, v2 = 3, v3 = 7.
x - дробное расстояние (диапазон [0-1]) в направлении «x», а y - дробное расстояние в направлении «y».
В примере с картинкой x, вероятно, будет около 0,75, а y будет около 0,2

Вот мои самые близкие попытки -
enter image description here
Создано с использованием -

        if (x > y) //if x > y then the point is in the upper right triangle
            return
                v1 * (1 - x) * (1 - y) +
                v2 * x * (1 - y) +
                v3 * x * y;
        else //bottom left triangle
            return
                v1 * (1 - x) * (1 - y) +
                v4 * (1 - x) * y +
                v3 * x * y;

И еще одна попытка -
enter image description here
Создано с использованием -

if (x > y)
            return
                (1 - x) * v1 + (x - y) * v2 + y * v3;
        else
            return
                (1 - y) * v1 + (y - x) * v4 + x * v3;

Они ' оба близки к тому, что мне нужно, но явно не совсем то.

13
задан user1118321 2 March 2015 в 05:38
поделиться