Задать вопрос
@Rastr_0

Влезет ли параллелепипед в четверть цилиндра?

Добрый вечер, есть задача.
Дан цилиндр разделенный на 4 равные части(вертикально), считайте классическая дверь при входе в ТЦ, с заданным радиусом и высотой. А так же дан параллелепипед, с заданной шириной, длинной и высотой. Надо узнать, влезет ли параллелепипед в четверть цилиндра. При этом параллелепипед можно проносить, если он стоит на одной из граней.
В чем собственно загвоздка: я решил изначально предполагать, что параллелепипед (далее просто коробка) вмещается в четверть цилиндра. Коробка не должна вмещаться при следующих случаях:
1) Если хотя бы одна сторона больше чем max(radius, height)
2) Если три стороны больше, чем min(radius, height)
Но тем не менее остаются не пройдённые тесты к задаче. Какие случаи еще можно рассмотреть в добавок к моим?
Заранее спасибо :)
  • Вопрос задан
  • 164 просмотра
Подписаться 1 Средний 3 комментария
Решения вопроса 1
Alexandroppolus
@Alexandroppolus
кодир
Коробка не должна вмещаться при следующих случаях:
1) Если хотя бы одна сторона больше чем max(radius, height)
2) Если три стороны больше, чем min(radius, height)

оба критерия - косячные.
1) Допустим, H = 1, R = 10. Тогда влезет коробка со сторонами a=1, b=0.1, c=12
2) H=10, R=10, не влезет кубик со сторонами 9.

тут не всё так просто )
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru Куратор тега Алгоритмы
Разработчик на С++, экс-олимпиадник.
Раз коробка должна стоять одной гранью на полу, то можно перебрать, какая же из них на полу, проверить что прямоугольник помещается в сектор круга и третье измерение коробки не превосходит высоты цилиндра.

Как проверить прямоугольник на впихивание в сектор? Если коробка помещается, ее можно в секторе вертеть и двигать, пока она не будет касаться границы сектора тремя вершинами. Получаются случаи: угол коробки совспадает с уголом сектора (диагональ прямоугольника <= радиуса), одна точка на прямой стороне сектора и две на круглой, 2 угла на двух прямых сторонах и одна на круглой.

Два последних случая надо порисовать, ввести какие-то переменные (например во втором случае можно ввести x и y - длины отрезков от угла сектора до углов прямоугольника) решить систему квадратных уравнений (длины сторон заданны, третья точка лежит на окружности) и проверить, что четвертая, свободная точка лежит внутри.

Что бы не плодить еще и случаи с порядком вершин советую перебрать 3! перестановок всех длин параллелипипида. Третья всегда будет высотой, дву другие в заданном порядке задают расположение точек. Например в первом случае первая длина - будет шириной прямоугольника, а вторая - высотой. В случае касания двумя точками двух прямых сторон, первая длина - будет стороной отсекающей угол, и т.д.

Вот так перебрав все случаи различных расположений коробки надо проверить, что хотя бы один из них помещается в ваш цилиндр.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы