首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何不使用数组来存储输入?

如何不使用数组来存储输入?
EN

Stack Overflow用户
提问于 2019-02-20 13:49:20
回答 1查看 165关注 0票数 0

为一组输入几何图形计算最小大小的AABB所需的问题。

几何形状的类型列示如下:

  1. 矩形,center_x,center_y,宽度,高度:R
  2. 圆,center_x,center_y,半径:C
  3. x_1,y_1,.,x_n,y_n :P n x_1 y_1 .x_n y_n
  4. #:指示输入的结束

示例情况如下:

投入:

R 0 0 3 2

产出:

0 0 3 2

投入:

3 -2 -1 4

C-0.5 3.2 1.6

3 3 3 5 3

R 0 0 3 2

产出:

1.45 1.4 7.1 6.8

我想知道示例案例2是如何运行的,因为有多个输入,我如何构造我的AABB?但是,如何避免变量被替换的情况呢?

例如,

R 0 0 3 2

R 1 2 4 5

我只是不知道如何避免替换center_x、center_y、w和h。

下面是我的代码,

代码语言:javascript
复制
#include <iostream>
#include <cstdlib>

using namespace std;
int main()
{
    int times, i;
    char geo;
    double center_x, center_y, w, h, r;
    double box_LX = 0, box_RX = 0, box_DY = 0, box_UY = 0;
    bool end;
    end = false;
    double LX, RX, UY, DY;


    while (!end) {
        cin >> geo;
        if (geo == 'R') {
            cin >> center_x >> center_y >> w >> h;
            LX = (center_x - w / 2);
            RX = (center_x + w / 2);
            DY = (center_y - h / 2);
            UY = (center_y + h / 2);
            if (RX > box_RX)
                box_RX = RX;
            if (LX < box_LX)
                box_LX = LX;
            if (UY > box_UY)
                box_UY = UY;
            if (DY < box_DY)
                box_DY = DY;
        }
        if (geo == 'C') {
            cin >> center_x >> center_y >> r;
            if (box_RX < (center_x + r))
                box_RX = center_x + r;
            if (box_LX > (center_x - r))
                box_LX = center_x - r;
            if (box_UY < (center_y + r))
                box_UY = center_y + r;
            if (box_DY < (center_y - r))
                box_DY = center_y - r;
        }
        if (geo == 'P') {
            cin >> times;
            i = 0;
            while (i != times) {
                cin >> center_x >> center_y;
                if (box_RX < center_x)
                    box_RX = center_x;
                if (box_LX > center_x)
                    box_LX = center_x;
                if (box_UY < center_y)
                    box_UY = center_y;
                if (box_DY > center_y)
                    box_DY = center_y;
                i++;
            }
        }
        if (geo == '#') {
            cout << (box_LX+box_RX)/2 << " " << (box_DY+box_UY)/2 << " " << abs(box_LX - box_RX) << " " << abs(box_UY - box_DY) << endl;
            end = true;
        }
    }
    return 0;
}

非常感谢!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-20 14:02:31

你不需要数组来完成这个任务。作为一个类推,假设您试图从一个int列表中找到最小int(这类似于您正在做的事情,但在一维而不是在两个维度中)。所有您需要跟踪的最小值是

  1. 所有以前值的当前最小值(current),以及
  2. 下一个值(value)。

从这两个值中,您可以计算下一个最小值-- min(current, value),然后获取下一个值,再计算最小值,以此类推。在输入的末尾打印出current。在任何时候,您都不需要同时存储所有的值。

对于您的问题,请将current替换为当前最小大小的AABB,将value替换为下一个形状,将min替换为返回包含这两个形状的最小大小AABB的函数。

在此图像中,您有两个需要计算的先前形状(两个黑匣子)、当前最小值(灰色框)、下一个形状(蓝色圆)和下一个最小值(红色框),其中包含灰色框和蓝色圆。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54787913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档