C ++程序找到覆盖给定点的最佳拟合矩形

在本文中,我们将讨论一个程序,以找到覆盖给定点的最佳拟合矩形。

在这个问题中,我们得到一个点(x,y)的坐标以及长度/宽度的比率= 1 / b(例如)。我们必须找到包含给定点且其尺寸遵循给定比率的矩形的坐标。如果存在多个矩形,我们必须选择一个在其欧几里得中心与给定点之间距离最短的矩形。

为了解决这个问题,首先我们将比率l / b最小化。之后,我们发现min(n / l,m / b)值保持在(n,m)区域(允许2d空间)。首先,让我们假设(x,y)仅是矩形的中心。如果不是,我们将分别通过分别减去长度和宽度的值来找到原始坐标。

示例

#include <cmath>

#include <iostream>

using namespace std;

//最小化给定比率的值

int greatest_div(int l, int b) {

   if (l == 0)

      return b;

   else

      return greatest_div(b % l, l);

}

//计算坐标

void calc_coordinates(int n, int m, int x, int y, int l, int b) {

   int k, div1;

   int x1, y1, x2, y2;

   div1 = greatest_div(l, b);

   l /= div1;

   b /= div1;

   k = min(n / l, m / b);

   //找到给定点存在的范围

   x1 = x - (k * l - k * l / 2);

   x2 = x + k * l / 2;

   y1 = y - (k * b - k * b / 2);

   y2 = y + k * b / 2;

   //如果坐标超出范围

   if (x1 < 0){

      x2 -= x1;

      x1 = 0;

   }

   if (x2 > n){

      x1 -= x2 - n;

      x2 = n;

   }

   if (y1 < 0){

      y2 -= y1;

      y1 = 0;

   }

   if (y2 > m) {

      y1 -= y2 - m;

      y2 = m;

   }

   cout << "Coordinates : " << x1 << " " << y1 << " " << x2<< " " << y2 << endl;

}

int main() {

   int n = 50, m = 20, x = 10, y = 6, l = 4, b = 7;

   calc_coordinates(n, m, x, y, l, b);

   return 0;

}

输出结果

Coordinates : 6 0 14 14

以上是 C ++程序找到覆盖给定点的最佳拟合矩形 的全部内容, 来源链接: utcz.com/z/353473.html

回到顶部