Помогите дописать главную функцию.

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Epic_Monday
Сообщения: 1
Зарегистрирован: 27 мар 2014, 15:26

Код: Выделить всё

struct Nq {
	int x,y;
	unsigned int Q;
 };

double rs (Nq u1, Nq u2)
{ double uux=(double)u2.x - (double)u1.x;
  double uuy=(double)u2.y - (double)u1.y;
  return (sqrt(pow(uux,2)+pow(uuy,2)));
}

int tis (Nq *tp, unsigned int lk, double sh)
{
	unsigned int i,j,lio,j_min;
	double d,d_min,xs,ys,px,py;
	Nq Z,S,Y;
	unsigned int nkl=0;

	for (i=0;i < lk;i++)
	{ if (tp[i].Q) continue;
	Z=tp[i];nkl++;
	tp[i].Q=nkl;
	lio=1;

	xs=(double)Z.x;
	ys=(double)Z.y;
	for(;;)
	{
		 d_min=sh+1;
		  for (j=0;j<lk;j++)
		   {if (i==j || tp[j].Q)
		    continue;
		   d=rs(Z,tp[j]);
		 if(d<d_min) 
		{d_min=d;j_min=j;}
	}
	if (d_min <= sh)
	{
	tp[j_min].Q = nkl; lio++;
	 Y=tp[j_min];
	  xs+=Y.x; ys+=Y.y;
	   px=xs/lio;
	    py=ys/lio;
	   if (px>=0) Z.x=(int)(px+0.5);
	  else Z.x=(int)(px-0.5);
   if (py>=0) Z.y=(int)(py+0.5);
 else Z.y=(int)(py-0.5);
	continue;
	}
	else break;}}
	return 0;
}
Функция реализации алгоритма isodata. Не пойму, как реализовать перенос координат в функцию rs(если задам rand). Также, нужно вывести кол-во получившихся кластеров.
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Как хочешь, или в зависимости от задачи.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Ответить