Пример #1
0
Vector3 Discretize(const Vector3& value,const Vector3& resolution,const Vector3& variance)
{
  Vector3 res;
  res.x = Discretize(value.x,resolution.x,variance.x);
  res.y = Discretize(value.y,resolution.y,variance.y);
  res.z = Discretize(value.z,resolution.z,variance.z);
  return res;
}
Пример #2
0
    // The core function that returns the answer of the problem (find the time to the ground)
    int GetTime() {
        // sort
        std::sort(segment_, segment_+size_, HeightCompare);

        // discretization:
        Discretize();
        Construct(1, 0, pos_num_);

        // dp, segment_[0] as ground
        for (int i=1; i<size_; ++i) {
            int l = GetSeg(1, segment_[i].l);
            int r = GetSeg(1, segment_[i].r);

            if (d_<segment_[i].y-segment_[l].y && d_<segment_[i].y-segment_[r].y) continue;

            if ((!(d_<segment_[i].y-segment_[l].y)) && (!(d_<segment_[i].y-segment_[r].y))) {
                segment_[i].t1 = GetTimeToSeg(segment_[i].x1, segment_[i].y, l);
                segment_[i].t2 = GetTimeToSeg(segment_[i].x2, segment_[i].y, r);
                segment_[i].t1 = std::min(segment_[i].t1, segment_[i].t2+segment_[i].x2-segment_[i].x1);
                segment_[i].t2 = std::min(segment_[i].t2, segment_[i].t1+segment_[i].x2-segment_[i].x1);
            } else if (!(d_<segment_[i].y-segment_[l].y)) {
                segment_[i].t1 = GetTimeToSeg(segment_[i].x1, segment_[i].y, l);
                segment_[i].t2 = segment_[i].t1+segment_[i].x2-segment_[i].x1;
            } else if (!(d_<segment_[i].y-segment_[r].y)) {
                segment_[i].t2 = GetTimeToSeg(segment_[i].x2, segment_[i].y, r);
                segment_[i].t1 = segment_[i].t2+segment_[i].x2-segment_[i].x1;
            }

            Update(1, segment_[i].l, segment_[i].r, i);
        }

        return GetTimeToSeg(x_, y_, GetSeg(1, pos_));
    }
Пример #3
0
std::vector<unsigned int> HashTable::FindNN(TVector2 position) {
  std::vector<unsigned int> results;
  std::vector<unsigned int> cell;
  TVector2 min = Discretize(position) - TVector2(_NG_H_,_NG_H_);
  TVector2 max = Discretize(position) + TVector2(_NG_H_,_NG_H_);

  for(TVector2 it(min); it.X() <= max.X() ; it.Set(it.X()+1,it.Y())) {
    for(it.Set(it.X(),min.Y());it.Y() <= max.Y(); it.Set(it.X(),it.Y()+1)) {
      cell.clear();
      cell = hashTable[GetHash(it)];
      results.insert(results.end(), cell.begin(), cell.end());
    }
  }

  return results;
}
Пример #4
0
//---------------------------------------------------------
bool CSG_mRMR::Set_Data(CSG_Table &Data, int ClassField, double Threshold)
{
    if( !Get_Memory(Data.Get_Field_Count(), Data.Get_Count()) )
    {
        return( false );
    }

    //-----------------------------------------------------
    if( ClassField < 0 || ClassField >= m_nVars )
    {
        ClassField	= 0;
    }

    Data.Set_Index(ClassField, TABLE_INDEX_Ascending);

    CSG_String	s;

    for(int iSample=0, Class=0; iSample<m_nSamples; iSample++)
    {
        double	*pData	= m_Samples[iSample] = m_Samples[0] + iSample * m_nVars;

        if( s.Cmp(Data[iSample].asString(ClassField)) )
        {
            s	= Data[iSample].asString(ClassField);

            Class++;
        }

        *pData++	= Class;

        for(int iVar=0; iVar<m_nVars; iVar++)
        {
            if( iVar != ClassField )
            {
                *pData++	= Data[iSample].asDouble(iVar);
            }
        }
    }

    Data.Del_Index();

    m_VarNames	+= Data.Get_Field_Name(ClassField);

    for(int iVar=0; iVar<m_nVars; iVar++)
    {
        if( iVar != ClassField )
        {
            m_VarNames	+= Data.Get_Field_Name(iVar);
        }
    }

    //-----------------------------------------------------
    if( Threshold >= 0.0 )	// discretization
    {
        Discretize(Threshold);
    }

    return( true );
}
Пример #5
0
//---------------------------------------------------------
bool CSG_mRMR::Set_Data(CSG_Matrix &Data, int ClassField, double Threshold)
{
    if( !Get_Memory(Data.Get_NCols(), Data.Get_NRows()) )
    {
        return( false );
    }

    //-----------------------------------------------------
    if( ClassField < 0 || ClassField >= m_nVars )
    {
        ClassField	= 0;
    }

    for(int iSample=0; iSample<m_nSamples; iSample++)
    {
        double	*pData	= m_Samples[iSample] = m_Samples[0] + iSample * m_nVars;

        *pData++	= Data[iSample][ClassField];

        for(int iVar=0; iVar<m_nVars; iVar++)
        {
            if( iVar != ClassField )
            {
                *pData++	= Data[iSample][iVar];
            }
        }
    }

    m_VarNames	+= "CLASS";

    for(int iVar=0; iVar<m_nVars; iVar++)
    {
        if( iVar != ClassField )
        {
            m_VarNames	+= CSG_String::Format(SG_T("FEATURE_%02d"), iVar);
        }
    }

    //-----------------------------------------------------
    if( Threshold >= 0.0 )	// discretization
    {
        Discretize(Threshold);
    }

    return( true );
}
Пример #6
0
void HashTable::Add(unsigned int i, TVector2 position) {
  position = Discretize(position);
  hashTable[GetHash(position)].push_back(i);
}