Esempio n. 1
0
int BoxTreeInnerNode::divide(int p_depth)
{
  if (m_Boxes.empty()) return 0;
  Vector3D center;
  recalcBounds(center);
  int longest=createSons(center);
  BoxTreeInnerNode* f=static_cast<BoxTreeInnerNode*>(m_First);
  BoxTreeInnerNode* s=static_cast<BoxTreeInnerNode*>(m_Second);
  int depth=1;
  unsigned int bnum=m_Boxes.size();
#ifdef _DEBUG
  int fnum=0;
#endif
  for(unsigned i=0;i<bnum;i++)
  {
    BoxedTriangle* bt=m_Boxes[i];
    if (bt->center[longest]<center[longest])
    {
      f->m_Boxes.push_back(bt);
      #ifdef _DEBUG
        fnum++;
      #endif
    }
    else
    {
      s->m_Boxes.push_back(bt);
    }
  }
  
  int b1num=f->m_Boxes.size();
  int b2num=s->m_Boxes.size();
  if ((b1num==bnum  ||  b2num==bnum))// && p_depth>m_logdepth)
  {
    delete m_First;  m_First=NULL;
    delete m_Second; m_Second=NULL;
    return depth+1;
  }
  
  m_Boxes.clear();
  if (f->m_Boxes.empty()) { delete m_First; m_First=NULL; }
  else
  if (f->m_Boxes.size()==1)
  {
    BoxedTriangle* bt=f->m_Boxes.back();
    delete m_First;
    m_OwnFirst=false;
    m_First=bt;
  } else depth=f->divide(p_depth+1);
  if (s->m_Boxes.empty()) { delete m_Second; m_Second=NULL; }
  else
  if (s->m_Boxes.size()==1)
  {
    BoxedTriangle* bt=s->m_Boxes.back();
    delete m_Second;
    m_OwnSecond=false;
    m_Second=bt;
  } else depth=Max(depth,s->divide(p_depth+1));
  return depth+1;
}
Esempio n. 2
0
int main(int argc, char *argv[])
{
    arr = (int*)calloc(arrSIZE, sizeof(int));
    draws = (int*)calloc(2, sizeof(int));

    time_t t;
    srand((unsigned) time(&t));

    shmidArray = sharedMemoArr(arrSIZE, 'S');
    shmidDraws = sharedMemoDraws(2, 'T');
    shmidFlag = sharedMemoFlag('R');
    shmidOutPlayer1 = sharedMemoOutPlayer1(2, 'K');
    shmidOutPlayer2 = sharedMemoOutPlayer2(2, 'E');

//    freeSharedMemo();

    initializeBoard(arr);//Initialize board with players 1 and 2.
    printArray(arr, arrSIZE);
    createSons();

    freeSharedMemo();

    return 0;
}