Я написал таблицу, чтобы вычислить это. Вы можете увидеть его по адресу https://skydrive.live.com/redir?resid=23B7BEDE6527529E!529&authkey=!AGboDW72AySsnK8, если хотите. (Это должно создать рабочую онлайн-версию, но вы также сможете ее загрузить.)
Основная техника работает следующим образом:
- Вычислите координаты X и Y для несжатых конечных точек.
- Сократите те, которые используют простое масштабирование, чтобы получить координаты X и Y для желаемых конечных точек.
- Вернитесь от них к углам
Это включает в себя довольно много вычислений. Вы можете следить за этим в этой электронной таблице, но вот все шаги:
Во-первых, я преобразую ваши углы, чтобы использовать соглашения о координатной геометрии - насколько я могу судить, вы измеряете по часовой стрелке от 3 часов, но в координатной геометрии более нормально, чтобы положительный угол был против часовой стрелки. Таким образом, ваши начальный и конечный углы становятся равными 191 и 67 градусам соответственно. (Я сделал это, потому что нахожу математику менее запутанной.))
Затем электронная таблица вычисляет радиус в начальной и конечной точках. Вот формулы, которые я использую для начальной и конечной точек:
=D2*D3/SQRT(POWER(D3*COS(RADIANS(D4)),2) + POWER(D2*SIN(RADIANS(D4)),2))
=D2*D3/SQRT(POWER(D3*COS(RADIANS(D5)),2) + POWER(D2*SIN(RADIANS(D5)),2))
D2 и D3 — это радиусы X и Y. D4 — начальный угол, а D5 — конечный угол (с поправкой на «обычные» углы). Я получил эту формулу из статьи Википедии на Эллипсы в разделе "Полярная форма относительно центра" . Это уравнение принимает угол и говорит вам, какой радиус эллипса будет под этим углом.
Затем я использую это для вычисления координат X и Y для начальной и конечной точек. Вот формулы для Start X и Y:
=$B$8*COS(RADIANS(D4)) + D2
=D3-$B8*SIN(RADIANS(D4))
Как упоминалось ранее, D2 и D3 — это радиусы X и Y, а D4 — начальный угол. (Формулы для конца X и Y выглядят одинаково только с D5. Причина добавления радиуса X заключается в том, что без этого числа варьируются от -Xradius до +Xradius. Добавление этого означает, что они варьируются от 0 до ширины. Ось Y не что-то похожее, но я инвертировал его, чтобы получить координаты экрана, потому что системы компьютерной графики часто имеют тенденцию переворачивать это (где увеличение Y идет вниз по странице) Да, это не совсем последовательно, что я инвертировал это, но исправил угол. .Извините!
Далее мы вычисляем сжатые X и Y. Вот формулы для начальной точки:
=B9/B2*B13
=B10/B3*B14
B9 и B10 — это X и Y предварительного растяжения, рассчитанные на предыдущем шаге. B2 и B3 — исходная ширина и высота, а B13 и B14 — сжатая ширина и высота. (Конечные формулы, конечно, выглядят очень похоже.) Итак, это простая операция масштабирования.
Наконец, мы вычисляем угол из них. Вот формула начального угла (и конечный угол почти идентичен)
=MOD(DEGREES(ATAN2(B16 - $D$13, $D$14-B17)), 360)
Функция ATAN2 принимает координаты X и Y и сообщает вам угол линии от начала координат до этой точки X, Y. Excel работает в радианах, поэтому нам нужно преобразовать это обратно в градусы (точно так же, как я преобразовывал градусы в радианы в более ранних формулах). А потом я беру MOD 360, чтобы избежать негативных ракурсов. ATAN2 никогда не выдает значений, превышающих PI (т. е. 180 градусов), и выдает отрицательные значения для углов, превышающих это значение. Взяв это по модулю 360, мы вернемся к положительному числу.
И затем последний шаг — преобразовать это обратно в систему углов по часовой стрелке:
= 360 - B19
Скармливая ваши растянутые размеры 1,88/3,4, мы получаем 165,51 и 287,70 градусов. Это не совсем совпадает с вашими цифрами, но я пытаюсь выяснить, откуда вы их взяли. Делаются ли они на глаз? А при подаче 2,5/2,55 у меня получается 171,71 и 299,51. Опять же, немного отличается от вашего, но не сильно.
person
Ian Griffiths
schedule
08.03.2013