Ejemplo n.º 1
0
Archivo: sd.c Proyecto: shizunge/XU_1
int main(int argc, char *argv[])
{
  params_t params;
  int rc = EXIT_SUCCESS;

  cmdline_parse(&params, argc, argv);

  printf("********************************************************************************\n");
  printf("sd (%d.%d.%d) Copyright 2011, GK.\n", VER_MAJOR, VER_MINOR, VER_SUBMINOR);
  printf("  nnbrs=%d, minsim=%.2f\n",
      params.nnbrs, params.minsim);

  gk_clearwctimer(params.timer_global);
  gk_clearwctimer(params.timer_1);
  gk_clearwctimer(params.timer_2);
  gk_clearwctimer(params.timer_3);
  gk_clearwctimer(params.timer_4);

  gk_startwctimer(params.timer_global);

  ComputeNeighbors(&params);

  gk_stopwctimer(params.timer_global);

  printf("    wclock: %.2lfs\n", gk_getwctimer(params.timer_global));
  printf("    timer1: %.2lfs\n", gk_getwctimer(params.timer_1));
  printf("    timer2: %.2lfs\n", gk_getwctimer(params.timer_2));
  printf("    timer3: %.2lfs\n", gk_getwctimer(params.timer_3));
  printf("    timer4: %.2lfs\n", gk_getwctimer(params.timer_4));
  printf("********************************************************************************\n");

  exit(rc);
}
Ejemplo n.º 2
0
void SpatialGraph::ComputeNeighbors( SpatialGraphKDNode* node )
{
	if( node->HasChildren() )
	{
		ComputeNeighbors(node->LHC);
		ComputeNeighbors(node->RHC);
		return;
	}

	Vector2 checkN = Vector2::UnitY * _smallestDimensions.Y;
	Vector2 checkS = Vector2::UnitY * -_smallestDimensions.Y;
	Vector2 checkE = Vector2::UnitX * _smallestDimensions.X;
	Vector2 checkW = Vector2::UnitX * -_smallestDimensions.X;

	/* Vector2 centroid = */ node->BBox.Centroid();

	Vector2List gridPoints;
	int xPoints, yPoints;
	node->GetGridPoints(gridPoints, xPoints, yPoints );

	//Check north neighbors
	for( int i = 0; i < xPoints; i++ )
	{
		AddNeighbor( node, gridPoints[GetColumnMajorIndex(i,0,xPoints)] + checkN );
	}

	//Check south neighbors
	for( int i = 0; i < xPoints; i++ )
	{
		AddNeighbor( node, gridPoints[GetColumnMajorIndex(i,yPoints-1,xPoints)] + checkS );
	}

	//Check east neighbors
	for( int i = 0; i < yPoints; i++ )
	{
		AddNeighbor( node, gridPoints[GetColumnMajorIndex(xPoints-1,i,xPoints)] + checkE );
	}

	//Check west neighbors
	for( int i = 0; i < yPoints; i++ )
	{
		AddNeighbor( node, gridPoints[GetColumnMajorIndex(0,i,xPoints)] + checkW );
	}

}
Ejemplo n.º 3
0
SpatialGraph::SpatialGraph(float entityWidth, const BoundingBox& startBox )
{
	_entityWidth = entityWidth;
	float maxDimension = MathUtil::Max( startBox.Max.Y - startBox.Min.Y, startBox.Max.X - startBox.Min.X );
	int depth = 0;
	while( maxDimension > _entityWidth )
	{
		maxDimension /= 2.0f;
		depth += 2;
	}
	_depth = MathUtil::Max(depth,1);
	if( _depth > 24 )
		_depth = 24;

	int depthMask = ~(0xFFFFFFFF << _depth);

	_dirMasks[0] = 0x1;
	_dirMasks[1] = 0x2;
	_dirMasks[2] = 0xaaaaaaaa & depthMask;
	_dirMasks[3] = _dirMasks[2] >> 1;

	_root = CreateTree(_depth+1, startBox, NULL);

	//Get smallest dimension
	_smallestDimensions = startBox.Max - startBox.Min;
	for( int i = 0; i < _depth; i++ )
	{
		if( i % 2 )
			_smallestDimensions.Y *= 0.5f;
		else
			_smallestDimensions.X *= 0.5f;
	}

	ComputeNeighbors( _root );
	ValidateNeighbors( _root );
}