Страниц: [1]
  Печать  
Автор Тема: Построение контура  (Прочитано 5437 раз)
LH
Full Member
***
Offline Offline

Сообщений: 128


Просмотр профиля
« : Мая 28, 2003, 08:16:00 am »

Встречался ли алгоритм построения контура. Имеется трехмерная область данных ( x, y, z ), нужно построить такие линии в плоскости
(x, y) , где значения z одинаковы.

Это похоже на карту гористой местности, где обозначаются высоты к-то горы замкнутыми кольцевыми линиями...
Записан
olej
QOR.Team
****
Offline Offline

Сообщений: 42



Просмотр профиля
« Ответ #1 : Мая 28, 2003, 06:01:00 pm »


LH пишет:
Это похоже на карту гористой местности, где обозначаются высоты к-то горы замкнутыми кольцевыми линиями...

"Линии уровня" - это, кажется, называлось - видел я что-то из алгоритмики в описаниях, есть там какие-то сложности ... но сейчас не вспомню где. Если ... ...
Записан
Evgeniy
Jr. Member
**
Offline Offline

Сообщений: 73


Просмотр профиля
« Ответ #2 : Мая 28, 2003, 09:22:00 pm »

Лет 7-8 назад издательство "Мир" выпустило такую книжку "Вычислительная геометрия" - весьма полную монографию по алгоритмам в геометрии. Там было много чего - я там смотрел алгоритмы триангуляции. Если не забуду - гдяну дома и дам полную ссылку
Записан
pmv
Участник
*
Offline Offline

Сообщений: 0


Просмотр профиля
« Ответ #3 : Июня 24, 2003, 04:11:00 pm »

Народ, на конкретные вопросы нужно всетаки давать соответствующие ответы, а не шапками бросаться...

Такая линия в геодезии называется ИЗОГИПСОЙ.
Могу предложить такую схему решения :

Имеем 3-х мерную матрицу  -  x, y, z .....
Линейная интерполяция  дает достаточно точный результат (если нужна более высокая точность - кубическим сплайном)....
Каждой  точке с координатвми  xy соответствует высота (или сигнал)-  z.
z  -задается извне, все  x  и  y соответствующие этому ПРОМЕЖУТОЧНОМУ  значению предстоит найти.
Дальше рассмотрим 2-х мерную модель y z , приняв пока что  x  просто является "индексом"  2-х мерных матриц...(ну забудем про него....)
где определенному значению  z  соответствует определенное значение   y ,
обозначим стационарные значения   z  через  V[j] , а  y  через W[j]

float z1,y1,z2,y2;  //промежуточные стационарные  значения
float Y; // искомое значение  y

for(i=1; i<i_max ;i++) {
//тогда для поступившего значения z необходимо сделать проверочку
// на условия,  
if(z < z_min || z>z_max)  // z_min ~ V[0] , z_max ~ V[i_max]
   return "значение z  вышло за границы рабочей зоны";
else {
                       j=1;
                       while(V[j]<z)
                                   j++;
                                   z2=V[j];
                                   y2=W[j];
                                   z1=V[j-1];
                                   y1=W[j-1];
      // функция (в математическом понимании) либо
               //линейно возрастает , либо убывает
      // если  y2==y1 то и считать нет смысла  "continue"
              if(y2>y1)
                         Y=(y2-y1)*( z - z1)/(z2-z1) + y1;
               else
                         Y=(y1-y2)*(z2 - z )/(z2-z1) + y2;
                                                           }
   }

Естественно, что тот-же алгоритм применим и к x , если есть необходимость.
Надеюсь, что помог
pmv
Записан
Страниц: [1]
  Печать  
 
Перейти в: