[英]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]的距离最大,然后将其丢弃,并使用其他两个代替上面的1
和3
。
假设你的座标像
// 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.