C ++, как найти площадь квадрата или прямоугольника с вектором координат

Как найти площадь квадрата или прямоугольника, если предположить, что пользователь ввел несколько точных точек, чтобы сформировать квадрат или прямоугольник?

Мне нужно рассчитать площадь внутри квадратного класса и класса прямоугольника соответственно.

У меня есть 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);
}

0

Решение

Нет необходимости в квадратном корне.
Возьмите два ребра из одной вершины, поверните один на 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 выше.

4

Другие решения

Предполагая, что ваши координаты что-то вроде

//   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. Вам просто нужно поддерживать соглашение об индексах углов, как в моем примере диаграммы.

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector