C ++计算向量中两个元素之间的差异

时间:2015-10-30 18:50:45

标签: c++ vector elements difference

我有2个大小为4的向量来存储形状坐标(方形/矩形)。第一个矢量用于x,第二个用于y。为了找出形状的区域,我需要它们的长度差异。如何找到同一向量中2个元素之间的差异?以square为例:

vector<int> x(4);
vector<int> y(4);

double Square::computeArea()
{
    int length;
    double area;

    if (x[0] == x[1]) //x coordinates are the same
    {
        length = y[0] - y[1]; //difference in y coordinates to find the length, need help here
    }
    else if (x[1] == x[2]
    {
        length = y[1] - y[2];
    }
    else if ... //repeat

    area = length * length;
    if (area < 0) { area = -area; }
    setArea(area)
    return area;
}

2 个答案:

答案 0 :(得分:1)

如果矩形的边缘与轴平行,并且点顺时针(或逆时针)排序,则可以简单地使用数组的第一个和第三个元素:

int yedge, xedge;

xedge = abs(x[0] - x[2]);

if ( xedge == 0 ) //beware, this check works well only for ints!
     return area = 0.0;
else yedge = abs(y[0] - y[2]);

return area = xedge * yedge;

如果你有更多的一般凸四边形使用这样的东西:

int dx20 = x[2] - x[0];
int dy10 = y[1] - y[0];
int dy20 = y[2] - y[0];
int dx10 = x[1] - x[0];
int dy30 = y[3] - y[0];
int dx30 = x[3] - x[0];

area = 0.5*abs(dx20*dy10-dy20*dx10);
area += 0.5*abs(dx20*dy30-dy20*dx30);

答案 1 :(得分:0)

C ++和OOP的优点在于你可以在问题方面考虑更多,而不是如何编程。

如果我在你的位置,我会使用std :: pair来保存坐标。

并有一个代表矩形的类。

我使用点1和2之间的距离作为长度,点1和4作为宽度。它可能不是所有情况下的正确方法,但它应该表明你必须对你的函数进行编程。

using namespace std;

class Rectangle // Class Rectangle
{
public:
    Rectangle(vector<pair<double, double>> neWcoordinates);
    double computeArea();

private:
    vector<pair<double, double>> coordinates; 
};

double Rectangle::computeArea()
{
    double length = sqrt(pow(coordinates[0].first-coordinates[1].first,2)+pow(coordinates[0].second-coordinates[1].second,2)
        );
    double width = sqrt(pow(coordinates[0].first-coordinates[3].first,2)+pow(coordinates[0].second-coordinates[3].second,2));
    return length*width;
}