• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Задача На Прямоугольники

  • Автор темы KOMPNET
  • Дата начала
K

KOMPNET

Даны положительные действительные числа a,b,c,d. Выяснить, можно ли один из прямоугольников целиком поместить внутри другого прямоугольника. Числа a,b определяют стороны 1 прямоугольника, а c и d второго прямоугольника, при условии, что прямоугольник можно поместить в другой прямоугольник под некоторым углом, хотя ширина его может быть больше, чем у другого. Вот тут как быть?
 
R

rrrFer

щас набросал чето такое.
даны прямоугольники АхБ, ВхГ.

сначала надо упорядочить стороны так, чтобы было А меньше Б, В меньше Г.

а дальше такая формула получилась:

А = Г * синус( Ж ) + В * косинус( И )
Б = Г * косинус( Ж ) + В * синус( И )
Ж + И = 90

вот если возможно подобрать такие Ж и И - то прямоугольник ВхГ входит в АхБ.

Собственно надо написать функцию кототрая вот это проверяет и вызвать ее так, чтобы она сначала попыталась засунуть АхБ в ВхГ, а потом наоборот.

Решение не проверял, и не на 100% в нем уверен.
 
K

KOMPNET

С точки зрения математики я сделал, но ват как это написать на Си?
 
K

KOMPNET

Код:
#include <stdio.h>
#include <math.h>
#include <conio.h>
int main()
{float a,b,c,d,x,y;
x=2;
printf("Введите размеры 1 прямоугольника: а=");
scanf("%f", &a);
printf("в=");
scanf("%f", &b);
printf("Введите размеры 2 прямоугольника: c=");
scanf("%f", &c);
printf("d=");
scanf("%f", &d);
if ((a<c && b<d) || (a<d && b<c) || (b*sqrt(x)/2+a*sqrt(x)/2<=c))
printf("1 прямоугольник поместиться во 2");
else
if ((c<a && d<b) || (c<b && d<a) || (d*sqrt(x)/2+c*sqrt(x)/2<=a))
printf("2 прямоугольник поместиться во 1"); 
else
printf("Ничего не поместиться");
getch();			 
}
Но здесь работает только если вписывать под углом в квадрат, а для прямоугольника не знаю...
 
R

rrrFer

че-то ерунда какая-то. не понимаю как вы к такому пришли.
если вписываете в квадрат - то зачем 4 стороны вводите?
Код:
 (b*sqrt(x)/2+a*sqrt(x)/2<=c)
тут что за х. На этот момент х не присвоено значение, вы используете неинициализированную переменную, а значит утверждение:
Но здесь работает только если вписывать под углом в квадрат
не верно, т.к. это ваще не работает. В переменой Х на этот момент мусор, но и нормальный компилятор предупредит вас об ошибке.
 
L

lazybiz

KOMPNET, тебе никто твои лабораторные и т.п. за тебя самого решать не будет!
Тот код что ты предоставил - содран. Более чем уверен, что ты даже не сможешь объяснить любую выбранную мной строчку этого кода.

Если тебе действительно это нужно, то можешь огласить цену. Возможно кто-то и возьмется.
 
I

ivan1994

СНАЧАЛО ОПРЕДЕЛИТЕ ЕСЛИ У ВАС ДАН КВАДРАТ (ПРОСТО РАДИУС ОПИСАНОЙ ОКРУЖНОСТИ ВНУТРЕННЕГО КВАДРАТА ДОЛЖЕН БЫТЬ СТРОГО МЕНЬШЕ РАДИУСА ВПИСАНОЙ ОКРУЖНОСТИ ВНЕШНЕГО КВАДРАТА)
ДЛЯ ПРЯМОУГОЛЬНИКА ТЕЖЕЛЕЕ. МОЖНО ПОПРОБЫВАТЬ ЧЕРЕЗ ТЕОРЕМУ ПИФАГОРА ... СДЕЛАЙТЕ СНАЧАЛО НА ЛИСТКЕ...
( НАРИСУЙТЕ 2 ПРЯМОУГОЛЬНИКА 1 ВПИСАНЫЙ ПОД УГЛОМ В ДРУГОЙ ИЗ ВЕРШИНУ СТРЕМЯЙЩЕЙСЯ К ВЕРХНЕЙ СТОРОНЕ ВНЕШНЕГО ПРЯМОУГОЛЬНИКА ПРОВЕДИТЕ ПЕРПЕНДИКУЛЯР К СТОРОНЕ ПРОВЕДЁННОЙ ИЗ ВЕРШИНЫ СТРЕМЯЩЕЙСЯ К НИЖНЕЙ СТОРОНЕ ВНЕШНЕГО ПРЯМОУГОЛЬНИКА ВОТ КАК НИЖЕ НА РИСУНКЕ ) ВЫВОД ====>>>>> ЕСЛИ ДЛИННА ПЕРПЕНДИКУЛЯРА " АБ " МЕНЬШЕ ЛЮБОЙ СТОРОНЫ ВНЕШНЕГО ПРЯМОУГОЛЬНИКА ТО ВПИСАТЬ МОЖНО ИНАЧЕ НЕЛЬЗЯ....
 

Вложения

  • Без_имени_1.png
    Без_имени_1.png
    1,3 КБ · Просмотры: 381
L

lazybiz

Ванёк, а тебе не кажется что ты опоздал, эдак.. на месяц со своим ответом?!))
 
V

Vadik(R)

Блин, так это ж обычная олимпиадная задачу, уже не раз решал её :))
Просто под рукой готового исходника нет, так бы выложил.
Тут просто перебором угла
a => c * sin(fi) + d * cos(fi);
b => c * cos(fi) + d * sin(fi);
Всё решается по этим формулам.
 
R

rrrFer

Всё решается по этим формулам.
примерно то же самое было предложено 6:10:2011, 17:26, только более правильно )
Ну я не так как Иван решал. У меня что-то типа индукции получалось.
[OFFTOP]Иван19994 отпусти shift[/OFFTOP]
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!