Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.86
alex_bojik
Заблокирован
#1

Определение максимальной площади - C++

02.11.2011, 11:00. Просмотров 3027. Ответов 21
Метки нет (Все метки)

Доброго все времени суток!
Есть 2 луча исходящие из одной точки, угол между ними 90. Есть также 2 отрезка a и b. Необходимо найти такое расположение этих отрезков, чтобы получился четырехугольник максимальной площади... причем положения находить необязательно достаточно вычислить площадь...
Задача взята отсюда
Если кто знает какие-нибудь теоремы на эту тему подскажите пожалста.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <math.h>
#include <iomanip>
 
using namespace std;
 
int main()
{
    int a,b;
    double max = 0,max1 = 0,PI = 3.141592653589793238462643383;
    cin>>a>>b;
    for(int i=0;i<=180;i++)
        for(int j=0;j<=180;j++)
        {
            double x=a*sin(i*PI/360);
            double y=b*sin(j*PI/360);
            double s= (2*x*y+sqrt(a*a-x*x)*x+sqrt(b*b-y*y)*y)/2;
            if (max<s)
                max=s;
        }
    cout<<setprecision(7)<<fixed<<max;
    return 0;
}
Это примерное решение... но так как перебором не совсем точно
Есть идея по поводу производной от функции площади... но там две переменные и с этим небольшие проблемы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2011, 11:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Определение максимальной площади (C++):

Найдите треугольник максимальной площади - C++
N треугольников плоскости заданы длинами своих сторон. Найдите треугольник максимальной площади. Напишите пожалуйста

Среди заданных треугольников найти треугольник максимальной площади - C++
N треугольников плоскости заданы длинами своих сторон. Найдите треугольник максимальной площади.

Определить треугольники минимальной и максимальной площади, которые можно построить из отрезков - C++
13. Известны длины отрезков a, b, c и d. Определить треугольники минимальной и максимальной площади, которые можно построить из этих...

Определить треугольники минимальной и максимальной площади, которые можно построить из отрезков - C++
Известны длины отрезков a. b. с и d. определить треугольники минимальной и максимальной площади, которые можно построить из этих отрезков. ...

Определение максимальной и минимальной цифры натурального числа - C++
Дано натуральное число: 1)Определить его максимальную и минимальную цифры 2)определить, на сколько его максимальная цифра превышает...

Определение площади и длины радиуса круга - C++
Помогитееее, срочно =) В первый ряд файла output.txt вывести площадь круга радиуса R. На второй строке вывести длину круга радиуса R. Тест...

21
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
02.11.2011, 23:10 #16
Предположим, что четырёхугольник ABCD максимальной площади уже построен, тогда прямоугольный треугольник BDA должен являться равнобедренным, так как из всех прямоугольных треугольников с данной гипотенузой наибольшую площадь имеет равнобедренный.
совершенно верно, но с чего ты взял, что в построенном ABCD второй прямоугольник окажется именно прямоугольным?

итак, BAD равнобедренный прямоугольный, без сомнения. его площадь можно выразить через гипотенузу, что ты и сделал в своих рассчетах, S=d^2/4.
треугольник BCD ты считаешь прямоугольным, а значит S=a*b/2. Замечу, что эта формула ТОЛЬКО для прямоугольных.
выражая d через a и b и записывая сумму площадей получаем: (a^2+b^2)/4+a*b/2=(a+b)^2/4.
Получаем твою формулу. т.е. она справедлива ТОЛЬКО для композиции двух прямоугольных треугольников, один из которых равнобедренный.

а теперь делаем простой фокус, не нарушая условие. и получаем гораздо большую площадь. она не максимальная, но уже больше той, что получается по твоей формуле.
2
Миниатюры
Определение максимальной площади  
alex_bojik
Заблокирован
02.11.2011, 23:16  [ТС] #17
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
ну что я могу сказать))) задача решена всем кто помогал огромное спасибо и конечно же +
talis - спасибо за попытки помочь!
Апострофф - спасибо, что помогли еще раз взглянуть с этой позиции, и найти правильный ответ
Cute - спасибо за ваши старания, очень все понятно и доступно!
Paporotnik - спасибо за доказательство насчет 8-угольника, и вообще за помощь!

Решение математически:
Определение максимальной площади

http://www.cyberforum.ru/cgi-bin/latex.cgi?{S}_{\Delta BCD}=\frac{1}{2}\cdot a\cdot b\cdot \sin \gamma = \frac{\sqrt{2}}{2}\cdot a\cdot b
http://www.cyberforum.ru/cgi-bin/latex.cgi?{S}_{\Delta ABD}=\frac{1}{2}\cdot {r}^{2}
http://www.cyberforum.ru/cgi-bin/latex.cgi?2\cdot {r}^{2}={c}^{2}
http://www.cyberforum.ru/cgi-bin/latex.cgi?{S}_{\Delta ABD}=\frac{1}{4}\cdot {c}^{2}
http://www.cyberforum.ru/cgi-bin/latex.cgi?{c}^{2}={a}^{2} + {b}^{2} - 2\cdot a\cdot b\cdot \cos \gamma
http://www.cyberforum.ru/cgi-bin/latex.cgi?{S}_{ABCD}=\frac{{a}^{2}+{b}^{2}}{4}+\frac{\sqrt{2}}{2}\cdot a\cdot b

Решение C++
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <math.h>
#include <iomanip>
 
using namespace std;
 
int main()
{
    double a,b;
    double max = 0;
    cin>>a>>b;
    max = (a*a+b*b)/4+sqrt(2)*a*b/2;
    cout<<setprecision(7)<<fixed<<max;
    return 0;
}
4
alex_bojik
Заблокирован
02.11.2011, 23:22  [ТС] #18
ах да, а как отметить что проблема решена?
не в смысле отпраздновать, а замочек повесить... или как тут вообще делается
0
Cute
1061 / 643 / 66
Регистрация: 10.02.2011
Сообщений: 518
03.11.2011, 00:01 #19
Цитата Сообщение от alex_bojik Посмотреть сообщение
ах да, а как отметить что проблема решена?
не в смысле отпраздновать, а замочек повесить... или как тут вообще делается
Рано-рано ещё закрывать тему, alex_bojik.

При расчёте площади треугольника BCD вы считаете, что sin(gamma)=sqrt(2).
Но sqrt(2)>1. А синус любого угла не может быть больше единицы.
0
alex_bojik
Заблокирован
03.11.2011, 00:13  [ТС] #20
там sqrt(2)/2 просто упрощение долго в LaTex набирать
0
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
03.11.2011, 01:07 #21
а откуда вообще это sqrt(2)/2? где там угол в 45градусов?
0
alex_bojik
Заблокирован
03.11.2011, 09:54  [ТС] #22
там угол в 135... но численное значения для синуса такое же как и для 45, а для косинуса со знаком минус

Добавлено через 3 минуты
гамма = альфа + бетта
360 = 90+ альфа + бетта + альфа + бетта
360 = 90 + 2*гамма
270 = 2*гамма
гамма = 135
sin(гамма) = sqrt(2)/2
cos(гамма) = - sqrt(2)/2
0
03.11.2011, 09:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2011, 09:54
Привет! Вот еще темы с ответами:

Определение максимальной и минимальной суммы двух соседних элементов массива - C++
дан массив целых чисел написать программу для определения максимальной и минимальной суммы двух соседних элементов массива

Определение площади заштрихованной фигуры методом Монте-Карло - C++
Составить программу для определения методом Монте-Карло пло- щади заштрихованой фигуры. Вычислить фактическую площадь и сравнить ее с...

Вывод максимальной дроби - C++
Проблема в том, что в выводе выводится первый элемент, как будто он не проверяет &quot;If&quot;. Вот код: #include &lt;iostream&gt; #include &lt;stdio.h&gt; ...

Поиск максимальной компоненты файла - C++
Написал программу, с помощью которой записываются данные в файл, а за тем производится поиск максимального числа. Вот код, он полностью...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru