繁体   English   中英

C ++如何使用坐标向量查找正方形或矩形区域

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

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

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

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

我的想法是,当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)

另外,这将计算所有平行四边形的正确面积,而不仅仅是矩形。

假定以顺时针或顺时针方向输入点。 如果不是这种情况,找出哪个点到point [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;
}

这使您的矩形可以处于任意方向,而不是xy轴对齐。 就像我的示例图中一样,您只需要保持拐角索引的约定即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM