Задача: На поверхности прямоугольного параллелепипеда сидит муха и нанесена капля варенья. Определите наименьшее расстояние, которое должна проползти муха по поверхности параллелепипеда, чтобы доползти до капли. Входные данные:...
Задача:
На поверхности прямоугольного параллелепипеда сидит муха и нанесена капля варенья. Определите наименьшее расстояние, которое должна проползти муха по поверхности параллелепипеда, чтобы доползти до капли.
Входные данные:
Первые три строки входных данных содержат положительные числа K, L, M, являющиеся размерами параллелепипеда вдоль осей OX, OY, OZ. Один угол параллелепипеда находится в начале координат, противоположный – в точке (K;L;M), ребра параллелепипеда параллельны осям координат.
Следующие три строки входных данных содержат координаты мухи X1, Y1, Z1, затем идут три строки с координатами варенья X2, Y2, Z2. Задаваемые этими координатами точки находятся на поверхности параллелепипеда. Все числа во входных данных целые, не превосходящие 1000.
Выходные данные:
Программа должна вывести единственное число – кратчайшее расстояние, которое должна проползти муха по поверхности параллелепипеда, чтобы добраться до варенья. Ответ необходимо вывести в виде действительного числа, проверка будет осуществляться с точностью 10-3.
Пример
Вход Выход
1 2.236067977
1
1
0
0
0
1
1
1
Вход Выход
12 13
5
2
1
0
1
12
4
1
Написал "каркас" программы без уравнения, которое решает задачу:
Program rast;
var K, L, M, X1, Y1, Z1, X2, Y2, Z2, R : real;
begin
writeln('Введите 3 положительных числа K, L, M, являющиеся размерами параллелепипеда вдоль осей OX, OY, OZ');
readln(K, L, M);
writeln('Введите координаты мухи X1, Y1, Z1');
readln(X1, Y1, Z1);
writeln('Введите координаты варенья X2, Y2, Z2');
readln(X2, Y2, Z2);
R:=;
writeln(R);
end.
Какое уравнение должно вычислять R? Помогите пожалуйста
Ответ(ы) на вопрос:
Баллы не ставте. ДОБАВЛЯЮ РЕШЕНИЕ, БОЮСЬ НЕ УСПЕТЬ оформить. Но там, если что, вроде обещали вторую попытку редакции. Тогда и программу можно будет добавить Думаю ход рассуждений уже можно понять. Если точки расположены на смежных гранях, формулы получаются похожими ,(а может и такими же), что рассматривались товарищем Allangarsk Если на противоположных гранях, то надо еще добавить (оформить). Идея то есть. В общем все многообразие вариантов можно будет втиснуть в 7 групп "формул".
Можно развернуть куб, центром "развертки" делаем грань где сидит муха, если муха и варенье на одной грани достачно просто, путь прямая, Зелным цветом залита одна и таже грань отмечено 4 возможных пути один из которых, в зависимости от размеров куба и координат мухи и варенья будет кратчайшим. Кратчайший путь для ситуации на рисунке - зеленый пунктир.
Да если достроить до треугольника (черный пунктир катеты d и f), искомый путь гипотенуза. Её длина [latex]l= \sqrt{d^2+f^2} [/latex]
Значит вся "хитрость" в том, чтобы правильно "собрать" длины катетов.
Если успею обобщить и облечь все в формулы (код) (логические выражения), добавлю. И уточню рисунки. Если нет, может кто-то догадается. Или в крайнем случае отошлют на доработку мне или Allangarsk.
Возможно, что в случае расположения на противоположных гранях, придется просчитывать все пути кандидаты и выбирать из них наименьший.
В случае на расположения на одной грани (X1=X2)OR(Y1=Y2)OR(Z1=Z2) кратчайший путь очевиден. Если, допустим Z1=Z2, то [latex]l= \sqrt{(X1-X2)^2+(Y1-Y2^2)} [/latex]
d=(X1-X2), f=(Y1-Y2).
Не нашли ответ?
Похожие вопросы