Как найти максимальную площадь четырехугольника

Improve Article

Save Article

Like Article

  • Read
  • Discuss
  • Improve Article

    Save Article

    Like Article

    Given four sides of quadrilateral a, b, c, d, find the maximum area of the quadrilateral possible from the given sides .
    Examples: 
     

    Input : 1 2 1 2
    Output : 2.00
    It is optimal to construct a rectangle for maximum area .

    According to Bretschneider’s formula, the area of a general quadrilateral is given by K={sqrt {(s-a)(s-b)(s-c)(s-d)-abcdcdot cos ^{2}left({frac {alpha +gamma }{2}}right)}}
    Here a, b, c, d are the sides of a quadrilateral, s is the semiperimeter of a quadrilateral and angles are two opposite angles. 
    So, this formula is maximized only when opposite angles sum to pi(180) then we can use a simplified form of Bretschneider’s formula to get the (maximum) area K. 
    K={sqrt {(s-a)(s-b)(s-c)(s-d)}}
    This formula is called as Brahmagupta’s formula
    Below is the implementation of given approach
     

    C++

    #include <iostream>

    #include <math.h>

    using namespace std;

    double maxArea(double a, double b,

                    double c, double d)

    {

        double semiperimeter = (a + b + c + d) / 2;

        return sqrt((semiperimeter - a) *

                    (semiperimeter - b) *

                    (semiperimeter - c) *

                    (semiperimeter - d));

    }

    int main()

    {

        double a = 1, b = 2, c= 1, d = 2;

       cout <<maxArea(a, b, c, d);

        return 0;

    }

    C

    #include <stdio.h>

    #include <math.h>

    double maxArea(double a, double b,

                    double c, double d)

    {

        double semiperimeter = (a + b + c + d) / 2;

        return sqrt((semiperimeter - a) *

                    (semiperimeter - b) *

                    (semiperimeter - c) *

                    (semiperimeter - d));

    }

    int main()

    {

        double a = 1, b = 2, c= 1, d = 2;

        printf("%.2fn",maxArea(a, b, c, d));

        return 0;

    }

    Java

    import java.io.*;

    class GFG

    {

        static double maxArea(double a, double b,

                               double c, double d)

        {

            double semiperimeter = (a + b + c + d) / 2;

            return Math.sqrt((semiperimeter - a) *

                             (semiperimeter - b) *

                             (semiperimeter - c) *

                             (semiperimeter - d));

        }

        public static void main (String[] args)

        {

            double a = 1, b = 2, c= 1, d = 2;

            System.out.println(maxArea(a, b, c, d));

        }

    }

    Python3

    import math

    def maxArea (a , b , c , d ):

        semiperimeter = (a + b + c + d) / 2

        return math.sqrt((semiperimeter - a) *

                        (semiperimeter - b) *

                        (semiperimeter - c) *

                        (semiperimeter - d))

    a = 1

    b = 2

    c = 1

    d = 2

    print("%.2f"%maxArea(a, b, c, d))

    C#

    using System;

    class GFG {

        static double maxArea(double a, double b,

                              double c, double d)

        {

            double semiperimeter = (a + b + c + d) / 2;

            return Math.Sqrt((semiperimeter - a) *

                             (semiperimeter - b) *

                             (semiperimeter - c) *

                             (semiperimeter - d));

        }

        public static void Main ()

        {

            double a = 1, b = 2, c= 1, d = 2;

            Console.WriteLine(maxArea(a, b, c, d));

        }

    }

    PHP

    <?php

    function maxArea( $a, $b, $c, $d)

    {

        $semiperimeter = ($a + $b + $c + $d) / 2;

        return sqrt(($semiperimeter - $a) *

                    ($semiperimeter - $b) *

                    ($semiperimeter - $c) *

                    ($semiperimeter - $d));

    }

    $a = 1; $b = 2; $c= 1; $d = 2;

    echo(maxArea($a, $b, $c, $d));

    ?>

    Javascript

    <script>

    function maxArea(a, b, c, d)

    {

        let semiperimeter = (a + b + c + d) / 2;

        return Math.sqrt((semiperimeter - a) *

                    (semiperimeter - b) *

                    (semiperimeter - c) *

                    (semiperimeter - d));

    }

        let a = 1, b = 2, c= 1, d = 2;

        document.write(maxArea(a, b, c, d));

    </script>

    Output:  

    2.00

    Time Complexity: O(logn) 
    Auxiliary Space: O(1)

    Please suggest if someone has a better solution which is more efficient in terms of space and time.
    This article is contributed by Aarti_Rathi. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above
     

    Last Updated :
    22 Jun, 2022

    Like Article

    Save Article

    Порядок следования сторон не влияет на площадь. Допустим, у нас имеется выпуклый четырёхугольник $%ABCD$% с основанием $%AD$%. Отрежем от него треугольник $%ABC$%, а потом приставим его к $%AC$% с разворотом. При этом порядок следования длин изменится — например, с $%3,4,5$% на $%4,3,5$%. Легко видеть, что при помощи таких действий можно получить любую из шести перестановок.

    Максимум площади четырёхугольника с заданными длинами наблюдается у вписанного четырёхугольника. Эта задача встречается во многих сборниках. Сама максимальная площадь $%S$% может быть вычислена по формуле $$S^2=(p-a)(p-b)(p-c)(p-d),$$ где $%p$% — полупериметр. Для случая длин $%3,4,5,6$% имеем $%p=9$%, а площадь равна $%S=6sqrt{10}$%.

    Сообщения без ответов | Активные темы | Избранное

     

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

    Сообщение05.11.2021, 20:10 


    29/07/08
    534

    Четырёхугольник имеет стороны длиной $a, b, c, d$.
    Пусть $a<b<c<d$.
    Какая может быть максимальная площадь четырёхугольника с такими сторонами?

    Профиль  

    мат-ламер 

    Re: Максимальная площадь четырехугольника

    Сообщение05.11.2021, 20:29 

    Заслуженный участник


    30/01/09
    5732

    (Оффтоп)

    Интересна физическая аналогия. Пусть мы внутрь четырёхугольника закачиваем газ. Одну сторону будем удерживать. Для остальных сторон рассмотреть условия их равновесия.

    Профиль  

    slavav 

     Re: Максимальная площадь четырехугольника

    Сообщение05.11.2021, 20:45 

    Заслуженный участник


    26/05/14
    978

    Интуиция подсказывает что четырехугольник будет вписан в окружность.

    — 05.11.2021, 20:55 —

    Ответ тут в комментарии.

    Профиль  

    zykov 

    Re: Максимальная площадь четырехугольника

    Сообщение05.11.2021, 21:00 


    18/09/21
    1472

    Вписанный четырёхугольник

    Цитата:

    Вписанный четырёхугольник имеет максимальную площадь среди всех четырёхугольников, имеющих ту же последовательность длин сторон.

    Профиль  

    lel0lel 

    Re: Максимальная площадь четырехугольника

    Сообщение05.11.2021, 21:29 


    20/04/10
    1697

    Не безынтересен вопрос — какая может быть минимальная площадь?

    Профиль  

    zykov 

    Re: Максимальная площадь четырехугольника

    Сообщение05.11.2021, 22:04 


    18/09/21
    1472

    какая может быть минимальная площадь?

    Если выпуклый, то вырождается в треугольник — одна из сторон равна сумме двух из этих 4 величин.
    Если не выпуклый, то тоже вырождается в треугольник — одна из строно равна разности двух из этих 4 величин.

    Профиль  

    vicvolf 

    Re: Максимальная площадь четырехугольника

    Сообщение05.11.2021, 22:06 


    23/02/12
    2894

    Не безынтересен вопрос — какая может быть минимальная площадь?

    $S=0$, когда $a=b+c+d$.

    Профиль  

    worm2 

     Re: Максимальная площадь четырехугольника

    Сообщение07.11.2021, 09:58 

    Заслуженный участник
    Аватара пользователя


    01/08/06
    2958
    Уфа

    какая может быть минимальная площадь?

    Если выпуклый, то вырождается в треугольник — одна из сторон равна сумме двух из этих 4 величин.
    Если не выпуклый, то тоже вырождается в треугольник — одна из сторон равна разности двух из этих 4 величин.

    Да, это следует из той же обобщённой формулы Брахмагупты. Сумма противоположных углов должна быть минимальна (соответственно, сумма двух других противоположных углов — максимальна). Два локальных минимума, из которых выбирается тот, что меньше.
    Правда, может быть ещё до 4 локальных минимумов, соответствующих самопересекающимся вариантам четырёхугольника. Если мы допускаем такие варианты, надо их тоже проверить (в этом случае получается, что противоположные углы должны быть по возможности равны, но противоположно ориентированы).

    Профиль  

    Модераторы: Модераторы Математики, Супермодераторы

    Кто сейчас на конференции

    Сейчас этот форум просматривают: нет зарегистрированных пользователей

    Вы не можете начинать темы
    Вы не можете отвечать на сообщения
    Вы не можете редактировать свои сообщения
    Вы не можете удалять свои сообщения
    Вы не можете добавлять вложения

    Задания Д27 C4 № 6906

    На плоскости дан набор точек с целочисленными координатами. Необходимо найти четырёхугольник наибольшей площади с вершинами в этих точках, две вершины которого лежат на оси Ox, а две оставшиеся – по разные стороны от оси Ox.

    Вам предлагается два задания с похожими условиями: задание А и задание Б. Вы можете решать оба задания или одно из них по своему выбору. Задание Б более сложное, его решение оценивается выше. Итоговая оценка выставляется как максимальная из оценок за задания А и Б.

    Задание А. Имеется набор данных, состоящий из 10 пар координат.

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

    Максимальная оценка за правильную программу – 2 балла.

    Задание Б. Имеется набор данных, состоящий из пар координат. Пар может быть много.

    Напишите программу для решения этой задачи.Постарайтесь сделать программу эффективной по времени и используемой памяти (или хотя бы по одной из этих характеристик).

    Программа считается эффективной по времени, если время работы программы пропорционально количеству пар чисел N, т. е. при увеличении N в k раз время работы программы должно увеличиваться не более чем в k раз.

    Программа считается эффективной по памяти, если размер памяти, использованной в программе для хранения данных, не зависит от числа N и не превышает 1 килобайта.

    Максимальная оценка за правильную программу, эффективную по времени и памяти,  — 4 балла.

    Максимальная оценка за правильную программу, эффективную по времени, но неэффективную по памяти,  — 3 балла.

    Перед текстом программы кратко опишите алгоритм решения задачи и укажите используемый язык программирования и его версию. Описание входных данных.

    В первой строке вводится одно целое положительное число  — количество точек N. Каждая из следующих N строк содержит два целых числа: сначала координата x, затем координата y очередной точки.

    Описание выходных данных.

    Программа должна вывести одно число  — максимальную площадь четырёхгольника, удовлетворяющего условиям задачи. Если такого четырёхугольника не существует, программа должна вывести ноль.

    Пример входных данных:

    6

    0 0

    2 0

    0 2

    3 -3

    5 -5

    6 6

    Пример выходных данных для приведённого выше примера входных данных:

    11

    Рассматривайте только четырёхугольники со сторонами лежащими не на оси Ox.

    Комментарий.

    В оригинальной формулировке задачи последнего условия нет, что создаёт дополнительные трудности при поиске необходимых четырёхугольников.

    Решение.

    Искомый четырёхугольник состоит из двух треугольников с общим основанием, лежащим на оси Ox, при этом один треугольник лежит выше этой оси, другой – ниже. Площадь четырёхугольника будет максимальной, если вершины на оси Ox будут расположены как можно дальше друг от друга, а вершины, не лежащие на этой оси,  — как можно дальше от неё. Программа читает исходные данные, не запоминая все точки в массиве. Для каждой точки проверяется её принадлежность оси Ox (условие y=0). Среди точек, лежащих на оси, необходимо найти наиболее далеко отстоящие друг от друга – они дадут наибольшее возможное общее основание двух треугольников. Это будут точки с наименьшим и наибольшим значением координаты x. Среди точек, не лежащих на оси Ox, надо найти две точки, расположенные по разные стороны от оси и как можно дальше от неё,  — они дадут наибольшие возможные значения высот треугольников. Это будут точки с наибольшим положительным и

    наименьшим отрицательным значением координаты y.

    Таким образом, задача сводится к нахождению максимального и минимального x среди точек, у которых y=0, максимального и минимального y среди остальных точек и нахождению площади четырёхугольника на основе этих данных.

    Перед выводом результата необходимо убедиться в существовании искомого четырёхугольника.

    Пример правильной и эффективной программы на языке Паскаль

    program c4;

    var

    n: integer;

    x, y: integer;

    xmin, xmax: integer;

    xsearch: boolean;

    ymin, ymax: integer;

    i: integer;

    s: real;

    begin

    xsearch := true;

    xmin := 0; xmax := 0;

    ymin:=0; ymax := 0;

    readln(n);

    for i:=1 to n do begin

    readln(x,y);

    if y=0 then begin

    if xsearch or (x < xmin) then xmin:=x;

    if xsearch or (x > xmax) then xmax:=x;

    xsearch:=false;

    end

    else if y < ymin then ymin:=y

    else if y > ymax then ymax:=y

    end;

    if (xmax>xmin) and (ymin<0) and (ymax>0)

    then s := (xmax-xmin)*(ymax-ymin)/2

    else s := 0;

    writeln(s);

    end.

    Пример правильной и эффективной программы на языке Бейсик

    DIM n AS INTEGER

    DIM x, y AS INTEGER

    DIM xmin, xmax AS INTEGER

    DIM xsearch AS INTEGER

    DIM ymin, ymax AS INTEGER

    DIM i AS INTEGER

    DIM s AS DOUBLE

    xsearch = 1

    xmin = 0: xmax = 0

    ymin = 0: ymax = 0

    INPUT n

    FOR i = 1 TO n

    INPUT x, y

    IF y = 0 THEN

    IF xsearch = 1 OR x < xmin THEN xmin = x

    IF xsearch = 1 OR x > xmax THEN xmax = x

    xsearch = 0

    ELSEIF y < ymin THEN ymin = y

    ELSEIF y > ymax THEN ymax = y

    END IF

    NEXT i

    IF xmax > xmin AND ymin < 0 AND ymax > 0 THEN

    s = (xmax — xmin) * (ymax – ymin) / 2

    ELSE

    s = 0

    END IF

    PRINT s

    Пример правильной и эффективной программы на Алгоритмическом языке

    алг c4

    нач

    цел n

    цел x,y

    цел xmin=0, xmax=0

    лог xsearch=да

    цел ymin=0, ymax=0

    цел i

    вещ s

    ввод n

    нц для i от 1 до n

    ввод x, y

    если y=0

    то

    если xsearch или xесли xsearch или x>xmax то xmax:=x все

    xsearch:=нет

    иначе

    если yесли y>ymax то ymax:=y все

    все

    кц

    если xmax > xmin и ymin < 0 и ymax > 0

    то s:=(xmax-xmin)*(ymax-ymin)/2

    иначе s:=0

    все

    вывод s

    кон

    Пример решения задачи А на языке Паскаль.

    var

    coord: array[1..10, 1..2] of integer; {исходные данные}

    x, y: integer; {координаты очередной точки}

    xminpos, xmaxpos, yminpos, ymaxpos: integer; {координаты точек четырёхугольника с наибольшей площадью}

    s: real; {площадь четырёхугольника}

    i, j: integer;

    begin

    xminpos := MaxInt; xmaxpos := -(MaxInt-1);

    yminpos := MaxInt; ymaxpos := -(MaxInt-1);

    for i := 1 to 10 do begin

    read(x, y);

    coord[i, 1] := x; coord[i, 2] := y;

    end;

    for i := 1 to 10 do begin

    if (coord[i, 2] = 0) and (coord[i, 1] < xminpos) then xminpos := coord[i, 1];

    if (coord[i, 2] = 0) and (coord[i, 1] > xmaxpos) then xmaxpos := coord[i, 1];

    if (coord[i, 2] <> 0) and (coord[i, 2] < yminpos) then yminpos := coord[i, 2];

    if (coord[i, 2] <> 0) and (coord[i, 2] > ymaxpos) then ymaxpos := coord[i, 2];

    end;

    if (xminpos = xmaxpos) or (yminpos = ymaxpos) or (xminpos = MaxInt) then

    s := 0

    else s := (xmaxpos - xminpos)*(ymaxpos-yminpos)/2;

    writeln(s);

    end.

    �������

    ����� ������������ ������� ����� ����� ����ң���������,
    ����� ������ �������� ����� 1, 4, 7, 8?

    �������

    ���������� ����ң���������, ��� �������� ������� ��������
    ����� 1 � 8. ����� ��� ������ �������� ������� ����� 4 � 7.
    ���� �������, ������ 1 � 8 ��������������, �� �����ģ� ���������
    � �������� ������������ ţ ����������� �������������� ����
    �� ��������� �������������. ����� �������, ������ 1 � 8 �����
    ���������, � ������� ����ң���������� �� ���������.

    ����� S — ������� ������� ����ң����������, α — ����
    ����� ��������� ���������, ������� 1 � 8, � ⠗ ���� �����
    ��������� ���������, ������� 4 � 7. �����

    S = · 1· 8 sin α +
    ·
    4· 7 sin β
    ·
    1· 8+· 4· 7
    =
    4+14 = 18.

    ������ ������, ��� ��� ������ �������� ���������� ����ң���������,
    ������� �������� ����� 18. �������������, ���������
    12+82=42+72 , ������� ������ ������������� ����ң���������,
    ������������ �� ���� ������������� ������������� � �������� 1, 8 �
    4, 7 � ����� �����������, ������ .

    �����

    18.

    ��������� � ���������� �������������

    web-����
    �������� ������� ����� �� ��������� �.�.�������
    URL http://zadachi.mccme.ru
    ������
    ����� 2581

    Понравилась статья? Поделить с друзьями:
  • Как составить схему к слову мыл
  • Как найти готовые описания
  • Как найти предложения с разными видами связи
  • Как найти цену товара если известен доход
  • Как найти любовника стихи