gpt4 book ai didi

c++ - 最近盒子的面积

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:38:05 25 4
gpt4 key购买 nike

这个问题和我之前问的相似this question .但是我不想只返回最近的盒子的数量,而是想找到相应盒子的面积。

详细信息:假设我有一组像这样的盒子坐标-

#Rect    x1      y1          x2       y2         area

1 0.0000 0.0000 0.8147 0.1355 0.1104
2 0.8147 0.0000 1.0000 0.1355 0.0251
3 0.8147 0.1355 0.9058 0.8350 0.0637
4 0.0000 0.1355 0.1270 0.9689 0.1058
5 0.9058 0.1355 0.9134 0.2210 0.0006
6 0.9058 0.8350 1.0000 1.0000 0.0155
7 0.8147 0.8350 0.9058 1.0000 0.0150
8 0.1270 0.1355 0.6324 0.3082 0.0873
9 0.1270 0.9689 0.8147 1.0000 0.0214
10 0.0000 0.9689 0.1270 1.0000 0.0040
11 0.9134 0.1355 1.0000 0.2210 0.0074
12 0.9134 0.2210 1.0000 0.8350 0.0532
13 0.9058 0.2210 0.9134 0.8350 0.0047
14 0.6324 0.1355 0.8147 0.3082 0.0315
15 0.6324 0.3082 0.8147 0.9689 0.1205
16 0.1270 0.3082 0.6324 0.9689 0.3339

假设这些坐标将一个单位正方形分割成如下图所示的子矩形- enter image description here

现在这段代码返回最近的框的数量值,但它无法返回那些框的面积。这是我的代码-

#include <iostream>
#include <cstdlib>
#include <vector>
#include <stdio.h>

using namespace std;

class Rect {
public:
double x1, x2, y1, y2, area;

Rect(double X1, double Y1, double X2, double Y2, double Area) {
if (X1 < X2) {
x1 = X1; x2 = X2;
} else {
x2 = X1; x1 = X2;
}
if (Y1 < Y2) {
y1 = Y1; y2 = Y2;
} else {
y2 = Y1; y1 = Y2;
} Area =area;

}

bool NearestBox(Rect rect) {

//for x-axis
if (x1 == rect.x2 || x2 == rect.x1) {

if (y1 >= rect.y1 && y1 < rect.y2) {
return true;
}
if (y2 > rect.y1 && y2 <= rect.y2) {
return true;
}
}

// for y-axis

if (y1 == rect.y2 || y2 == rect.y1) {
if (x1 >= rect.x1 && x1 < rect.x2) {
return true;
}
if (x2 > rect.x1 && x2 <= rect.x2) {
return true;
}
}

return false;

}
};

int main() {

vector<Rect> rects;
//Rect( x1 , y1 , x2 , y2 , area)
rects.push_back(Rect(0.0000,0.0000, 0.8147,0.1355, 0.1104));
rects.push_back(Rect(0.8147,0.0000, 1.0000,0.1355, 0.0251));

rects.push_back(Rect(0.8147,0.1355, 0.9058,0.8350, 0.0637));
rects.push_back(Rect(0.0000,0.1355, 0.1270,0.9689, 0.1058 ));

rects.push_back(Rect(0.9058,0.1355, 0.9134,0.2210, 0.0006));
rects.push_back(Rect(0.9058,0.8350, 1.0000,1.0000, 0.0155));
rects.push_back(Rect(0.8147,0.8350, 0.9058,1.0000, 0.0150));



rects.push_back(Rect(0.1270,0.1355, 0.6324,0.3082, 0.0873));
rects.push_back(Rect(0.1270,0.9689, 0.8147,1.0000, 0.0214));
rects.push_back(Rect(0.0000,0.9689, 0.1270,1.0000, 0.0040));

rects.push_back(Rect(0.9134,0.1355, 1.0000,0.2210, 0.0074));
rects.push_back(Rect(0.9134,0.2210, 1.0000,0.8350, 0.0532));
rects.push_back(Rect(0.9058,0.2210, 0.9134,0.8350, 0.0047));


rects.push_back(Rect(0.6324,0.1355, 0.8147,0.3082, 0.0315));
rects.push_back(Rect(0.6324,0.3082, 0.8147,0.9689, 0.1205));
rects.push_back(Rect(0.1270,0.3082, 0.6324,0.9689, 0.3339));

int b=13;
int nearBox_count = 0;
//double area=0;
double TotalArea=0;

for (int x = 0; x < rects.size(); ++x) {

if (rects[b].NearestBox(rects[x])) {
if (x==b) {
continue; //this is our box , so do not count it.
}

nearBox_count++;
printf("box[%d] is nearest to box[%d] and has area %f \n", (b+1), (x+1), rects[x].area);

TotalArea +=rects[x].area;

}
}

printf("Total number of nearest box for box[%d] = %d, and the sum of area is= %f \n", (b+1), nearBox_count, TotalArea );

return 0;
}

它打印结果-

box[14] is nearest to box[1] and has area 0.000000 
box[14] is nearest to box[3] and has area 0.000000
box[14] is nearest to box[8] and has area 0.000000
box[14] is nearest to box[15] and has area 0.000000
Total number of nearest box for box[14] = 4, and the sum of area is= 0.000000

所以通过对比上图的结果可以看出,它返回的是最近的boxes的值,但是没有返回它们对应区域的值。

谁能帮我解决这个问题?

最佳答案

您实际上并没有使用 rect[x] 中的区域。您也不需要额外的 area 变量。只需执行以下操作:

printf("box[%d] is nearest to box[%d] and has area %f \n", (b+1), (x+1), rects[x].area);

TotalArea += rects[x].area;

此外,根据 masad 的评论,您没有在构造函数中分配 area。您需要添加一行:

area = Area;

关于c++ - 最近盒子的面积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18063443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com