Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
2-1257165542
Andrewtitoff
2009-11-02 15:39
2009.12.27
DBComboBox


15-1256681905
Германн
2009-10-28 01:18
2009.12.27
Мнемоника


15-1256481351
POOP
2009-10-25 17:35
2009.12.27
Погрешность решения


11-1209885307
SPeller
2008-05-04 11:15
2009.12.27
KOLTIFF.ImageAsBitmap экспортирует неправильный битмап


15-1256592610
Юрий
2009-10-27 00:30
2009.12.27
С днем рождения ! 27 октября 2009 вторник





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский