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] ); }
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); }