Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.12.27;
Скачать: CL | DM;

Вниз

Как линейно интерполировать значение между тремя точками.   Найти похожие ветки 

 
Ьу   (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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.01 c
2-1257779059
Jaroslight
2009-11-09 18:04
2009.12.27
Среднее значение показателей типа TTime


11-1201519573
Татьяна
2008-01-28 14:26
2009.12.27
Программирование многооконного приложения для WinCE


3-1232433164
Matveih1
2009-01-20 09:32
2009.12.27
Данные не обновляются


1-1229953346
tipman
2008-12-22 16:42
2009.12.27
Использование общих переменных в различных потоках


2-1257871099
vtur
2009-11-10 19:38
2009.12.27
Создание приложений с использованием DLL