Реализуйте функцию, которая будет перебирать контейнер фигур размером n и суммировать их площадь с помощью JavaScript

#javascript #class #math

Вопрос:

В настоящее время я пытаюсь решить проблему следующим образом:

Реализуйте иерархию объектов, содержащую по крайней мере классы для прямоугольника, треугольника и круга. Реализуйте функцию float SumArea (), которая будет перебирать контейнер этих фигур размером n и суммировать их площадь. Также реализуйте функции void AddTriangle(поплавок b, поплавок h), void AddSquare(размер поплавка), void addCircle(радиус поплавка).

  • Примечание 1: Вам нужно написать только одну функцию для каждого класса (плюс конструктор).
  • Примечание 2: Требуется общая сумма областей, независимо от того, перекрываются ли фигуры.
  • Примечание 3. Постарайтесь сделать код итерации как можно более оптимальным.

До сих пор мне удавалось писать классы для фигур, а также метод для каждого из них для вычисления их площади (вопрос немного сбивает с толку, поскольку в нем говорится, что прямоугольник, но затем в классе ответов есть функция addsquare). Я также добавил области вместе в общую область, но немного не понимаю, как я могу рассчитать площадь, даже если фигуры перекрываются в контейнере?

Вот что у меня есть до сих пор:

 class Rectangle {
    constructor(size) {
        this.size = size;
    }
    area() {
        return this.size * this.size;
    }
}

class Triangle {
    constructor(base, height) {
        this.base = base;
        this.height = height;
    }
    area() {
        return this.base * this.height / 2;
    }
}

class Circle {
    constructor(radius) {
        this.radius = radius;
    }
    area() {
        return Math.PI * this.radius ** 2;
    }
}

class Answer {
    addTriangle(b, h) {
        const triangle = new Triangle(b, h);
        return triangle.area();
    }
    
    addSquare(size) {
        const rectangle = new Rectangle(size);
        return rectangle.area();
    }
    
    addCircle(radius) {
        const circle = new Circle(radius);
        return circle.area();
    }
    
    sumArea() {
        return Answer.addTriangle   Answer.addSquare   Answer.addCircle;
    }
}
 

Любая помощь будет очень признательна.

Комментарии:

1. «но я немного теряюсь в том, как я могу рассчитать площадь, даже если фигуры перекрываются в контейнере» — Примечание 2 говорит вам игнорировать это. Просто сложите отдельные области.

2. «контейнер» означает коллекцию (структуру данных) для хранения фигур. sumArea повторит один из них и вернет сумму областей. Ваша реализация этого не делает.

3. Чтобы расширить это ^ У вашего Answer класса должно быть container: [] свойство. Ваши add<Shape> функции должны поместить новую фигуру в этот массив. Затем sumArea следует повторить container и сложить все области ( reduce это то, что вы хотите там)

Ответ №1:

Ваша реализация не работает с контейнером, как предписывает вам задание. Для этого требуется сохранить список фигур, которые вы повторяете при вызове sumArea метода

Он-фрагмент, который поможет вам в правильном направлении:

 class Rectangle {
    constructor(size) { this.size = size; }
    area() { return this.size * this.size; }
}

class Triangle {
    constructor(base, height) { this.base = base; this.height = height; }
    area() { return this.base * this.height / 2; }
}

class Circle {
    constructor(radius) { this.radius = radius; }
    area() { return Math.PI * this.radius ** 2; }
}

class Answer {
    container = [];

    addTriangle(b, h) {
        this.container.push(new Triangle(b, h));
    }

    // Implement `addSquare` and `addCircle`
    
    sumArea() {
        // Iterate over `this.container` here, to add together all shapes'
        // areas in the container. Look into using `reduce` for that.
    }
}

const answer = new Answer();

answer.addTriangle(3, 5);
answer.addTriangle(4, 1);
// answer.addSquare(2, 4);
// answer.addCircle(6);

console.log(answer.sumArea());