Точка внутри или над другими прямоугольниками, кроме себя - PullRequest
0 голосов
/ 02 мая 2020

Я надеюсь, у вас хороший день.

Мне нужно решить проблему с горизонтом тремя разными способами; Программирование грубой силы, D & C и Dynami c.

Проблема в грубой силе.

У меня есть координаты всех прямоугольников с четырьмя точками.

int arr[8][3] = {{5, 12, 0}, {7, 6, 1}, {6, 15, 4}, {10, 3, 15}, {4, 7, 12}, {7, 15, 23}, {2, 20, 20}, {5, 4, 24}};
  1. -> ширина 2. -> высота 3. -> начало

    int bruteForce (int arr [] [3], int n) {

    int coord[n*4][2];
    int rect = 0;
    
    for(int i = 0; i < n*4; i = i+4)
    {
        coord[i][0] = arr[rect][2]; // Sol Alt
        coord[i][1] = 0;
    
        coord[i+1][0] = arr[rect][2]; // Sol Üst
        coord[i+1][1] = arr[rect][1];
    
        coord[i+2][0] = arr[rect][2] + arr[rect][0]; // Sağ Üst
        coord[i+2][1] = arr[rect][1];
    
        coord[i+3][0] = arr[rect][2] + arr[rect][0]; // Sağ Alt
        coord[i+3][1] = 0;
    
        rect++;
    }
    

Я обнаружил точки перекрытия между двумя прямоугольниками, и теперь я пытаюсь найти те точки, которые не находятся внутри или над другими прямоугольниками, кроме как сами по себе.

для этого я сделал это

vector <int> outerX;
vector <int> outerY;

for(int i = 0; i < n*4; i++)
{
    outerX.push_back(coord[i][0]);
    outerY.push_back(coord[i][1]); 
}

int control = 0;

for(int i = outerX.size() - 1; i >= 0; i--)
{
    for(int j = 0; j < n*4 ; j = j+4)
    {
      if(control == 1)
        break;

      if(!(isPointSame(coord[j][0], coord[j][1], coord[j+2][0], coord[j+2][1], outerX[i], outerY[i])))
      {
          if(isAllInside(coord[j][0], coord[j][1], coord[j+2][0], coord[j+2][1], outerX[i], outerY[i]))
          {
              outerX.pop_back();
              outerY.pop_back();

              control = 1;
          }
      }
    }

    control = 0;
}

for(unsigned int i = 0; i < outerX.size(); i++)
{
    cout << outerX[i] << " " << outerY[i] << endl;
}

ordin [] [], externalX и externalY координаты true при запуске, я проверил их.

функций, которые я использовал

bool isAllInside(int x1, int y1, int x2, int y2, int x, int y) 
{                                                           
    if (x >= x1 and x <= x2 and y >= y1 and y <= y2) 
        return true; 

    return false; 
}

bool isPointSame(int x1, int y1, int x2, int y2, int x, int y)
{
    if((x == x1 && y == y1) || (x == x1 && y == y2) || (x == x2 && y == y2) || (x == x2 && y == y1))
        return true;

    return false;
}

, но, наконец, когда я печатаю externalX и outerY, я не могу получить желаемых результатов.

Заранее спасибо

...