C 如何找到具有坐标载体的正方形或矩形区域

C++ how to find area of square or rectangle with vector of coordinates

本文关键字:正方形 区域 何找 坐标      更新时间:2023-10-16

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

我需要分别计算方形类和矩形类内部的区域。

我有2个坐标,坐标和坐标的向量。

我的想法是何时或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);
    }

这是我班上的突变器功能。Square从ShapetWod

继承
void ShapeTwoD::setXCoordinate(int x) {
    coordX.push_back(x);
}
void ShapeTwoD::setYCoordinate(int y) {
    coordY.push_back(y);
} 

无需平方根。从一个顶点取两个边缘,旋转一个乘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)

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

这是假设,这些点以顺时针或旋转顺序输入。如果不是这样,请找出哪个点最大的距离[0],然后将其丢弃并使用其他两个,而不是上面的13

假设您的坐标类似于

//   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轴。您只需要像我的示例图一样维护角落索引的约定。