У меня есть единичный прямоугольный треугольник и значение в каждой из трех вершин. Мне нужно интерполировать, чтобы найти значение в точке внутри треугольника. Часы поиска не дали ничего, что действительно подсказывало бы мне, как это сделать. Вот моя ближайшая попытка, которая на самом деле довольно близка, но не совсем верна -
result =
v1 * (1 - x) * (1 - y) +
v2 * x * (1 - y) +
v3 * x * y;
v1, v2 и v3 - значения в трех вершинах треугольника. (x, y) - это точка в треугольнике, значение которой вы пытаетесь найти.
Здесь мне поможет любой метод. Это не обязательно должен быть прямоугольный треугольник.
Обновленная информация:
У меня есть сетка из равномерно расположенных точек и значение в каждой точке.Я делаю треугольник из трех ближайших точек на сетке.
Вот картинка, чтобы проиллюстрировать это -
Поэтому мне нужно интерполировать между 5, 3 и 7, чтобы найти значение x.
Точка также может находиться внутри другого треугольника, что означает, что вы должны интерполировать между 5, 7 и значением нижнего левого угла квадрата.
В коде, который я показал, v1 = 5, v2 = 3, v3 = 7.
x - дробное расстояние (диапазон [0-1]) в направлении «x», а y - дробное расстояние в направлении «y».
В примере с картинкой x, вероятно, будет около 0,75, а y будет около 0,2
Вот мои самые близкие попытки -
Создано с использованием -
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;
И еще одна попытка -
Создано с использованием -
if (x > y)
return
(1 - x) * v1 + (x - y) * v2 + y * v3;
else
return
(1 - y) * v1 + (y - x) * v4 + x * v3;
Они ' оба близки к тому, что мне нужно, но явно не совсем то.