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