Example #1
0
PathNode* Astar::findPath( INT a_iSx, INT a_iSy, INT a_iEx, INT a_iEy )
{
	PathNode* path = NULL;

	// 타겟 위치와 같은 위치면 탐색 중지
	if( a_iSx == a_iEx && a_iSy == a_iEy )
	{
		return NULL;
	}

	// 타겟 위치가 가지 못하는 곳이거나
	// 타겟 위치 기준 8방향이 가지 못하는 곳이면 탐색 중지
	if(  m_Map[a_iEx][a_iEy].map == 1 ||
	   ( m_Map[a_iEx+0][a_iEy-1].map == 1 &&
	     m_Map[a_iEx+1][a_iEy-1].map == 1 &&
		 m_Map[a_iEx+1][a_iEy+0].map == 1 &&
		 m_Map[a_iEx+1][a_iEy+1].map == 1 &&
		 m_Map[a_iEx+0][a_iEy+1].map == 1 &&
		 m_Map[a_iEx-1][a_iEy-1].map == 1 &&
		 m_Map[a_iEx-1][a_iEy+0].map == 1 &&
		 m_Map[a_iEx-1][a_iEy-1].map == 1 ) )
	{
		return NULL;
	}

	m_Start[0] = a_iSx;
	m_Start[1] = a_iSy;

	m_End[0] = a_iEx;
	m_End[1] = a_iEy;

	INT x = a_iSx;
	INT y = a_iSy;

	m_Map[x][y].visit = TRUE;

	m_Map[x][y].cameX = -1;
	m_Map[x][y].cameY = -1;
	m_Map[x][y].g = 0;
	m_Map[x][y].h = getDistH( x,y );
	m_Map[x][y].f = getDistF( x,y );
	insert( m_pOpen, createNode( x,y ) );

	INT v[2];
	while( getminimum( v ) )
	{
		x = v[0];
		y = v[1];
		m_Map[x][y].map = 4;
		if( x == m_End[0] && y == m_End[1] )
		{
			break;
		}

		for( INT i=0; i<8; ++i )
		{
			openMap( x, y, x + m_Dir[i][0], y + m_Dir[i][1] );
		}
	}

	m_Map[a_iSx][a_iSy].map = 10;
	m_Map[a_iEx][a_iEy].map = 20;

	removeTree( m_pOpen );
	m_pOpen->root = NULL;

	return getPath( m_Start[0], m_Start[1], m_End[0], m_End[1] );
}
Example #2
0
void RunStatsCommand(ProgramData *p, int lcindex, int threadindex, _Stats *s)
{
  int i, j, k, Npct;
  double *tmpdata = NULL, *tmpweight = NULL;
  if(p->NJD[threadindex] <= 0) {
    for(i=0, k=0; i < s->Nvar; i++) {
      for(j=0; j < s->Nstats; j++, k++) {
	s->statsout[threadindex][k] = 0.0;
      }
    }
    return;
  }
  if((tmpdata = (double *) malloc(p->NJD[threadindex]*sizeof(double))) == NULL) {
    error(ERR_MEMALLOC);
  }
  for(i = 0, k=0; i < s->Nvar; i++) {
    if(s->vars[i]->vectortype != VARTOOLS_VECTORTYPE_LC) {
      error(ERR_BADVARIABLETYPE_STATSCOMMAND);
    }
    for(j=0; j < p->NJD[threadindex]; j++) {
      tmpdata[j] = EvaluateVariable_Double(lcindex, threadindex, j, s->vars[i]);
    }
    Npct = 0;
    for(j = 0; j < s->Nstats; j++, k++) {
      switch(s->statstocalc[j]) {
      case VARTOOLS_STATSTYPE_MEAN:
	s->statsout[threadindex][k] = getmean(p->NJD[threadindex], tmpdata);
	break;
      case VARTOOLS_STATSTYPE_WEIGHTEDMEAN:
	s->statsout[threadindex][k] = getweightedmean(p->NJD[threadindex], tmpdata, p->sig[threadindex]);
	break;
      case VARTOOLS_STATSTYPE_MEDIAN:
	s->statsout[threadindex][k] = median(p->NJD[threadindex], tmpdata);
	break;
      case VARTOOLS_STATSTYPE_MEDIAN_WEIGHT:
	s->statsout[threadindex][k] = median_weight(p->NJD[threadindex], tmpdata, p->sig[threadindex]);
	break;
      case VARTOOLS_STATSTYPE_STDDEV:
	s->statsout[threadindex][k] = stddev(p->NJD[threadindex], tmpdata);
	break;
      case VARTOOLS_STATSTYPE_MEDDEV:
	s->statsout[threadindex][k] = meddev(p->NJD[threadindex], tmpdata);
	break;
      case VARTOOLS_STATSTYPE_MEDMEDDEV:
	s->statsout[threadindex][k] = medmeddev(p->NJD[threadindex], tmpdata);
	break;
      case VARTOOLS_STATSTYPE_MAD:
	s->statsout[threadindex][k] = MAD(p->NJD[threadindex], tmpdata);
	break;
      case VARTOOLS_STATSTYPE_KURTOSIS:
	s->statsout[threadindex][k] = kurtosis(p->NJD[threadindex], tmpdata);
	break;
      case VARTOOLS_STATSTYPE_SKEWNESS:
	s->statsout[threadindex][k] = skewness(p->NJD[threadindex], tmpdata);
	break;
      case VARTOOLS_STATSTYPE_PERCENTILE:
	s->statsout[threadindex][k] = percentile(p->NJD[threadindex], 
							tmpdata,
							s->pctval[Npct]);
	Npct++;
	break;
      case VARTOOLS_STATSTYPE_PERCENTILE_WEIGHT:
	s->statsout[threadindex][k] = percentile_weight(p->NJD[threadindex], 
							tmpdata,
							       p->sig[threadindex],
							s->pctval[Npct]);
	Npct++;
	break;
      case VARTOOLS_STATSTYPE_MAXIMUM:
	s->statsout[threadindex][k] = getmaximum(p->NJD[threadindex],tmpdata);
	break;
      case VARTOOLS_STATSTYPE_MINIMUM:
	s->statsout[threadindex][k] = getminimum(p->NJD[threadindex],tmpdata);
	break;
      case VARTOOLS_STATSTYPE_SUM:
	s->statsout[threadindex][k] = getsum(p->NJD[threadindex],tmpdata);
	break;
      default:
	error(ERR_CODEERROR);
      }
    }
  }
  if(tmpdata != NULL)
    free(tmpdata);
}