Форум: "Прочее";
Текущий архив: 2009.12.27;
Скачать: [xml.tar.bz2];
ВнизКак линейно интерполировать значение между тремя точками. Найти похожие ветки
← →
Ьу (2009-10-27 16:45) [0]Есть три точки, задающие треугольник в 2D пространстве.
В каждой вершине задано числовое значение I1,I2,I3
Задана точка C внутри треугольника. у нее естественно тоже координаты известно.
Нужно среднее значения для I.
Есть некоторые задумки, но они сильно мне не нравятся....
← →
И. Павел © (2009-10-27 16:48) [1]Может быть подойдет так:
Сначала интерполированием I1 и I2 получить точку A. А потом интерполировать A и I3.
← →
Сергей М. © (2009-10-27 16:49) [2]
> В каждой вершине задано числовое значение I1,I2,I3
Что сие значит ?
Приведи конкретный пример ..
← →
Alx2 © (2009-10-27 17:05) [3]То есть нужно интерполировать значение в точке С (внутри треугольнка которая)?
← →
TUser © (2009-10-27 17:13) [4]Что известно о самой функции? В простейшем случае - строишь плоскость, содержащую указанный треугольник (только пространство уже трехмерное, ибо график ф. двух переменных).
Ax+By+Cf(x,y)=D - это уравнение плоскости, запиши такое для трехъ точек, будет система линейный уранвений их которых легко в явном виде найти f(x,y)=ax+by.
← →
oldman © (2009-10-27 17:16) [5]
> Нужно среднее значения для I.
>
> Есть некоторые задумки, но они сильно мне не нравятся...
> .
(I1+I2+I3+...+In)/n
При чем тут интерполяция?
← →
Sapersky (2009-10-27 17:20) [6]Закраска Гуро (Gouraud)?
См. Шикин, Боресков "Компьютерная графика. Полигональные модели".
← →
MBo © (2009-10-27 17:22) [7]вершины треугольника A, B, C, точка P
раскладываем вектор AP по векторам AB и AC, получаем коэффициенты интерполяции
AP = b* AB + c * AC
a = 1 - b - c
F(P) = a * F(A) + b * F(B) + c * F(B)
← →
MBo © (2009-10-27 17:23) [8]последнее слагаемое должно быть, конечно:
c * F(С)
← →
cwl © (2009-10-27 17:40) [9]> Сергей М. © (27.10.09 16:49) [2]
пример - контрольный объем, в узлах которого известны значение переменной -, скажем, давления. вполне реальная задача.
> Ьу (27.10.09 16:45)
посчитать растояние от этих трех точек до точки, значение в которой необходимо найти. далее - например, линейная комбинация .. навскидку такая (L1-L12)*(L1-L13)*I1/(L12*L13) + (L2-L12)*(L2-L23)*I2/(L12*L23) + (L3-L13)*(L3-L23)*I1/(L13*L23)
где Li - расстояние от i-й вершины до точки, Lij - расстояние между i-й и j-й точкой
← →
Ьу (2009-10-27 17:55) [10]> [1] И. Павел © (27.10.09 16:48)
А как получить значение для I1,I2? Это придется строить нормаль к грани из точке... Медленно будет...
> [2] Сергей М. © (27.10.09 16:49)
Direct3D. Три вершины. В каждой свой цвет.
Вот например:
http://www.mobileorchard.com/wp-content/uploads/2009/08/cube.jpg
> [3] Alx2 © (27.10.09 17:05)
Да.
> [4] TUser © (27.10.09 17:13)
О какой функции?
> [5] oldman © (27.10.09 17:16)
Своих детей учи правильно мысли выражать.
Ничего личного, просто достали такие как ты.
> [6] Sapersky (27.10.09 17:20)
Точно. Хороший пример использования билинейной интерполяции.
> [7] MBo © (27.10.09 17:22)
> [9] cwl © (27.10.09 17:40)
Ничего не поняла...
← →
ПостОвый терминатор © (2009-10-27 18:08) [11]> Ьу (27.10.09 16:45)
Спроецируй свои три точки и точку С на любую прямую вместе со значениями I (в качестве ординат). Ну, а затем интерпретируй или интерполируй в коорднатах точки С значение I.
Что-то подобное было у Лившица и Пугачева в "Вероятностные ...", к сожалению точного названия источника не помню:(
Слишком много времени (более 20 лет) прошло с момента защиты кfндидатской диссертации.
← →
Jeer © (2009-10-27 18:11) [12]
> Слишком много времени (более 20 лет) прошло с момента защиты
> кfндидатской диссертации.
Лившица ?
← →
Rule © (2009-10-27 18:16) [13]Афинные преобразования ?
http://www.compgraphics.info/2D/affine_transform.php
← →
MBo © (2009-10-27 18:27) [14]>Ничего не поняла...
Разложение вектора по неколлинеарным векторам в школе проходят...
← →
cwl © (2009-10-27 22:33) [15]> Ьу (27.10.09 17:55) [10]
интерполяционная формула. можно посмотреть в сторону многочленов .. навроде http://ru.wikipedia.org/wiki/Интерполяционный_многочлен_Лагранжа
← →
Sapersky (2009-10-27 22:45) [16]Афинные преобразования ?
http://www.compgraphics.info/2D/affine_transform.php
Скорее, это:
http://www.compgraphics.info/2D/triangle_rasterization.php
там без интерполяции, но добавить её несложно - сначала по вертикали, вдоль рёбер; потом по горизонтали, между найденными значениями.
← →
MBo © (2009-10-28 07:10) [17]
procedure TForm2.Button12Click(Sender: TObject);
var
A, B, C: TPoint;
AB, AC: TPoint;
CA, CB, CC, CP: TColor;
ra, rb, rc, ga, gb, gc, ba, bb, bc: Integer;
D, ta, tb, tc: Double;
px, py: Integer;
x, y: Integer;
begin
A := Point(0,0);
B := Point(0,200);
C := Point(200,200);
Canvas.Polygon([A, B, C]);
CA := clYellow;
CB := clBlue;
CC := clRed;
AB := Point(B.X - A.X, B.Y - A.Y);
AC := Point(C.X - A.X, C.Y - A.Y);
D := AB.X * AC.Y - AC.X * AB.Y;
ra := GetRValue(CA);
rb := GetRValue(CB);
rc := GetRValue(CC);
ga := GetGValue(CA);
gb := GetGValue(CB);
gc := GetGValue(CC);
ba := GetBValue(CA);
bb := GetBValue(CB);
bc := GetBValue(CC);
if D <> 0 then
D:= 1/D
else
Exit;
for y := 0 to 200 do begin
py := y - A.Y;
for x := 0 to y do begin
px := x - A.X;
tc := D * (py * AB.X - px * AB.Y);
tb := D * (-py * AC.X + px * AC.Y);
ta := 1 - tc - tb;
Memo1.Lines.Add(Format("%d %d %f %f %f", [y, x, ta, tb , tc]));
CP := RGB(Round(ta * ra + tb * rb + tc * rc), Round(ta * ga + tb * gb + tc * gc),
Round(ta * ba + tb * bb + tc * bc));
Canvas.Pixels[x, y] := CP;
end;
end;
end;
← →
@!!ex © (2009-10-28 09:06) [18]Интересная тема!!!!!
Я как раз сейчас откопал свои старые исходники софтверного растеризатора и у меня глючит текстурирование...
> [17] MBo © (28.10.09 07:10)
ИНтересный код!
← →
boa_kaa © (2009-10-28 09:10) [19]а я открыл свою программу по рисованию изолиний, всплакнул...
давно уже не удавалось графикой заниматься...
← →
123 (2009-10-28 12:17) [20]курите Barycentric coords, google вам в помощь!
← →
Alx2 © (2009-10-28 12:23) [21]>123 [20]
Не удержался: в русскоязычной лит-ре используется термин "Барицентрические координаты". Раздражает, когда устоявшимся локализованным понятиям предпочитают нелокализованные :)
← →
KSergey © (2009-10-28 14:06) [22]> Ьу (27.10.09 17:55) [10]
> Своих детей учи правильно мысли выражать.
и после этого еще что-то отвечают?
забавно.
← →
SergP © (2009-10-28 20:37) [23]Если координаты точки с (x4,y4), то если я ничего не напутал - то должно быть так:
i4=(i1*y2*x4+y1*x4*i3+x4*i2*y3-x4*y2*i3-y1*i2*x4-x4*y3*i1+x1*i2*y4+i1*y4*x3+x2*i3*y4-y4*i2*x3-y4*i1*x2-y4*i3*x1+x1*y2*i3+y1*i2*x3+i1*y3*x2-i1*y2*x3-x1*i2*y3-i3*y1*x2)/(x1*y2+y1*x3+x2*y3-y2*x3-y1*x2-y3*x1)
← →
MBo © (2009-10-29 06:25) [24]несколько подходов к решению одной задачи :)
http://rsdn.ru/forum/etude/3564102.1.aspx
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2009.12.27;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.007 c