e-olymp 1501. Конусное расстояние

Задача

Конус расположен в трехмерном пространстве так, что его основание радиуса r лежит в плоскости z = 0 с центром в (0,0,0). Вершина конуса расположена в (0, 0, h). На его поверхности заданы две точки в конусных координатах. Конусной координатой точки pназывается пара чисел (d, A), где d — расстояние от вершины конуса до точки p, а A (A < 360) — угол в градусах между плоскостью y = 0 и плоскостью, проходящей через точки (0,0,0), (0,0,h) и p, считая против часовой стрелки от направления оси x.

На поверхности конуса заданы две точки p1 = (d1, A1) и p2 = (d2, A2). Найти кратчайшее расстояние между p1 и p2, измеряемое по поверхности конуса.

Входные данные

Каждая строка является отдельным тестом и содержит 6 действительных чисел: r, h, d1, A1, d2 и A2.

Выходные данные

Для каждого теста в отдельной строке вывести кратчайшее расстояние между точками p1 и p2 по поверхности конуса. Расстояние выводить с 2 десятичными знаками.

Тесты

Ввод Вывод
 1

 3.0 4.0 2.0 0.0 4.0 0.0

 2.00

 2

 3.0 4.0 2.0 90.0 4.0 0.0

 3.26
 3

 6.0 8.0 2.14 75.2 9.58 114.3

 7.66
 4

 3.0 4.0 5.0 0.0 5.0 90.0

 4.54

Код программы

Решение задачи

Инициализирую все нужные переменные и через поток ввода считываю все исходные данные. Затем нахожу образующую l по теореме Пифагора и угол между плоскостями — alpha . k1 это часть, которую занимает угол alpha от основания конуса. k2 — коэффициент пропорциональности между окружностями радиусами r и l . fi — величина угла развертки конуса, а beta — угол между прямыми на которых лежат точки, данные в условии. Далее находим искомое расстояние по теореме косинусов.

Ссылки

One thought on “e-olymp 1501. Конусное расстояние

Добавить комментарий