Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.07.2009, 13:02   #1
ciaonataha
Форумчанин
 
Регистрация: 12.02.2009
Сообщений: 150
По умолчанию проблеммы с рекурсивной функцией.

Код:
  .                                                                    .
begin                                                              end
          .                                                      .
               .                                       .
                                .
                  самая удаленная точка
Помогите записать алгоритм рекурсивной функции. У меня не получается!
1)На этом кривом рисунке я хотела изобразить вектор begin,end. Для этого вектора, в случае 2D записываю уравнения прямой по координатам этого вектора, если вектор имеет координаты begin(x1,y1), end(x2,y2):
Код:
(x-x1)/(x2-x1)=(y-y1)/(y2-y1);
Поправьте, если ошибаюсь
2)Надо найти самую удаленную точку (x,y) от этой прямой begin,end.
Код:
d=|ax+by+c|/sqrt(a*a+b*b)
3)Вот здесь для меня начинается проблемма, потому что надо проводить расчет сразу для двух частей этого графика -левой и правой:
для левой части:
3а)записать уравнения, опять таки прымой для двух точек
3б)определить какие точки лежат выше этой прямой, а какие ниже
3в)исклучить точки, которые легат выше этой прямой и оставить точки, которые лежат ниже
3г)с учетом новых точек, нужно опять найти из новых точек самую удаленную от прямой
3д)и проделать операции 3а),3б),3в),3г)
для правой части все тоже самое

Как это записать как одно целое в while(true)
проблеммы с рекурсивной функцией.
ciaonataha вне форума Ответить с цитированием
Старый 21.07.2009, 13:05   #2
ciaonataha
Форумчанин
 
Регистрация: 12.02.2009
Сообщений: 150
По умолчанию

Может быть вот такой вариант:

Код:
                
                           
                       .   .    . 
 .                 .               .
begin          .                     .
       .       .                           .
            .                                      .      .
                                                         end
ciaonataha вне форума Ответить с цитированием
Старый 21.07.2009, 16:45   #3
ciaonataha
Форумчанин
 
Регистрация: 12.02.2009
Сообщений: 150
По умолчанию

Код:
class qhull
{
public:
  interface *func1;
  interface *func2;
  double (interface::*nrfuncv1)(double y);
  double (interface::*nrfuncv2)(double y);
public:
  qhull()
    {
     func1 = NULL;
     func2 = NULL;
    }
void discretization(int n, int el);
virtual int distance(int el,int begin,int ilo,std::vector < std::vector<double> > &y,std::vector <double> &G,std::vector <double> &a, std::vector <double> &b, std::vector <double> &c);
virtual void minimal(int n,std::vector < std::vector<double> > &G,std::vector <double> &Gmin,int *ilo);
virtual void hyperplane(int begin,int ilo,int el,std::vector < std::vector<double> > &y,std::vector <double> &G,std::vector <double> &a, std::vector <double> &b, std::vector <double> &c);
virtual void check(int begin, int end, int el,std::vector < std::vector<double> > &y,std::vector <double> &G,std::vector <double> &a, std::vector <double> &b, std::vector <double> &c);
}
Код:
//right
 int distance1 = 0, distance2 = 0;
 int dim1 = 0, dim2 = 0, ihi = 0;
 for (i = 0; i < n+1; i++)
  { 
    for (j = 0; j < size; j++)
     {
       site1[i][j]=site[i][j];
       site2[i][j]=site[i][j];
     } 
  }
 for (i = 0; i < n+1; i++)
  {
    Gmin1[i]=Gmin[i];
    Gmin2[i]=Gmin[i];
  }

 hyperplane(ilo,n,el,site,Gmin,a,b,c);
 ihi=distance(el,ilo,n,site,Gmin,a,b,c);
 distance1 = distance2 = ihi;


 //while (true)
 //{
   //if (ihi==ilo){printf("ihi==ilo\n");break}
   hyperplane(ilo,distance1,el,site1,Gmin1,a1,b1,c1);
   hyperplane(distance2,n,el,site2,Gmin2,a2,b2,c2);
   
   check(ilo,distance1,el,site1,Gmin1,a1,b1,c1);
   check(distance2,n,el,site2,Gmin2,a2,b2,c2);

   distance1=distance(el,ilo,distance1,site1,Gmin1,a1,b1,c1);
   Вот здесь новая самая удаленная точка от прымой расчитана, теперь надо расчитать
  hyperplane(ilo,distance1,el,site1,Gmin1,a1,b1,c1);
  hyperplane(distance1,distance1,el,site1,Gmin1,a1,b1,c1);
какой pointer наложить на distance, что бы это автоматичаски пересчитывалось

   distance2=distance(el,distance2,n,site1,Gmin1,a1,b1,c1);
   
 //}
ciaonataha вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Составление программ с использованием рекурсивной функции S@muel Общие вопросы C/C++ 0 06.04.2009 22:27
проблема с рекурсивной функцией world12_tk Помощь студентам 2 04.03.2009 20:57
Хотел бы задать вопрос по поводу рекурсивной программы GUnt Паскаль, Turbo Pascal, PascalABC.NET 1 27.12.2008 22:16
Проблеммы с массивом Almost_Famous Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 21.04.2008 21:25
Проблеммы функции MessageDlg Snake_ua Общие вопросы Delphi 4 01.11.2007 08:08