Как найти площадь квадрата или прямоугольника, если предположить, что пользователь ввел несколько точных точек, чтобы сформировать квадрат или прямоугольник?
Мне нужно рассчитать площадь внутри квадратного класса и класса прямоугольника соответственно.
У меня есть 2 вектора координат, координатыX и координаты.
Моя идея состоит в том, что когда либо 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);
}
это моя функция мутатора в моем классе. Квадрат наследуется от 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], затем отбросьте ее и используйте две другие вместо 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;
}
Это позволяет вашему прямоугольнику находиться в любой произвольной ориентации, а не по оси X-Y. Вам просто нужно поддерживать соглашение об индексах углов, как в моем примере диаграммы.