【问题标题】:C++ how to find area of square or rectangle with vector of coordinatesC ++如何使用坐标向量找到正方形或矩形的面积
【发布时间】:2025-12-28 16:55:12
【问题描述】:

假设用户输入了一些准确的点以形成正方形或矩形,我如何找到正方形或矩形的面积。

我需要分别计算正方形类和矩形类内的面积。

我有 2 个坐标向量,coordX 和 coordY。

我的想法是当 or x 或 y 具有相同的值时,它将是一条线,我可以找到距离 x2 但我不确定如何在代码中实现它。

double Square::computeArea() {

    double area;

    for (int x = 0; x < coordX.size; x++) {
        for (int y = 0; y < coordY.size; y++) {
            if (coordX[x] == coordY[y])
            {
                //....
            }   
        }
    }       
    return area;
}

这就是我用用户输入填充我的向量的方式

    Square Square;

    for ( int i = 1; i <= 4; i++) {

        cout << "Please enter x-coordinate of pt " << i << ": ";    

        cin >> x;

        Square.setXCoordinate(x);

        cout << "Please enter y-coordinate of pt " << i << ": ";    

        cin >> y;       

        Square.setYCoordinate(y);

    }

这是我在课堂上的 mutator 函数。 Square 继承自 ShapeTwoD

void ShapeTwoD::setXCoordinate(int x) {
    coordX.push_back(x);
}

void ShapeTwoD::setYCoordinate(int y) {
    coordY.push_back(y);
} 

【问题讨论】:

    标签: c++ vector coordinates area


    【解决方案1】:

    假设你的坐标是这样的

    //   3-----------2
    //   |           |
    //   |           |
    //   0-----------1
    

    那你就可以了

    #include <cmath>
    double distance(double x1, double x2, double y1, double y2)
    {
        return std::sqrt(std::pow(x2 - x1, 2) + std::pow(y2 - y1, 2));
    }
    
    double Square::computeArea() const
    {
        double length = distance(coordX[0], coordX[1], coordY[0], coordY[1]);
        double width = distance(coordX[0], coordX[3], coordY[0], coordY[3]);
        return length * width;
    }
    

    这允许您的矩形处于任意方向,而不是 x-y 轴对齐。您只需要保持角落索引的约定,就像在我的示例图中一样。

    【讨论】:

    • 也可以使用std::hypot(x2 - x1, y2 - y1)直接计算距离。
    • 但是我在编译后使用向量,它有一些迭代器错误。我认为我不能只使用 [0] 位置吗?
    • @TommyYap 你能编辑你的帖子来展示你是如何填充coordXcoordY的吗?
    • @Cyber​​ 当我输入 (1,2) (2,2) (2,1) (1,1) 并打印出 area 的值为 1.56251e-316 是否正常?
    【解决方案2】:

    不需要平方根。 从一个顶点取两条边,将一条边旋转90°,取点积。

    double dx1 = coordX[3] - coordX[0];
    double dy1 = coordY[3] - coordY[0];
    double dx2 = coordX[1] - coordX[0];
    double dy2 = coordY[1] - coordY[0];
    double area = abs(dx1*dy2 - dy1*dx2)
    

    作为奖励,这将计算所有平行四边形的正确面积,而不仅仅是矩形。

    这假设点是按顺时针或逆时针顺序输入的。如果不是这种情况,请找出与 point[0] 的距离最大的点,然后将其丢弃并使用其他两个代替上面的 13

    【讨论】:

    • 我假设 coordXcoordY 是大小为 4 的向量,包含矩形顶点的 x 和 y 坐标。如果不是这种情况,请澄清您的问题。
    • 这是交叉产品。或者更准确地说,是 X-Y 平面上两个向量叉积的 Z 分量的大小。
    • 是的,这是正确的做法。 @TommyYap,根据您的 OP,您的问题对我来说没有意义:“假设用户输入了一些准确的点来形成正方形或矩形。”