Codebase list r-cran-spdep / fresh-snapshots/main src / relative.c
fresh-snapshots/main

Tree @fresh-snapshots/main (Download .tar.gz)

relative.c @fresh-snapshots/mainraw · history · blame

/* Copyright 2001 by Nicholas Lewin-Koh. */


#include "spdep.h"


static double distance(double x1, double y1, double x2, double y2){

  return(hypot(x1-x2,y1-y2));

}

void compute_relative(int *no_nodes, int *g1, int *g2, int *nogab,
      int *ngaballoc, double *nodes_xd, double *nodes_yd)
{
  int i,j,l, no_gab=0;
  double rad;

  for(i=0;i<*no_nodes;i++)
    {
      for(j=i+1;j<*no_nodes;j++)
	{
	  rad=distance(nodes_xd[i],nodes_yd[i],nodes_xd[j],nodes_yd[j]);
          /*Rprintf("hi \n");*/
	  for(l=0;l<*no_nodes;l++)
	    {
	      if((l!=i)&&(l!=j)&&
	      (distance(nodes_xd[i],nodes_yd[i],nodes_xd[l],nodes_yd[l])<rad)&&
              (distance(nodes_xd[j],nodes_yd[j],nodes_xd[l],nodes_yd[l])<rad))
		break;
	    }

/* bug Dan Putler 090121 */
	  if ((no_gab+1) > *ngaballoc) 
		error("number of neighbours overrun - increase nnmult");
	  if(l==*no_nodes)
	    {
	      g1[no_gab]=i+1; g2[no_gab++]=j+1;
	    }
	}
    }
  *nogab=no_gab;
  return;

}