Комплексное число в двух системах координат
Прямоугольное содержимое упрощает сложение, полярное упрощает умножение, а селекторы с метками дают клиентскому коду одно абстрактное число.
Как единый интерфейс комплексных чисел может одновременно сохранять преимущества прямоугольного и полярного представлений?
- Создание прямоугольного содержимого из вещественной и мнимой частей
- Создание полярного содержимого из модуля и угла
- Диспетчеризация общих селекторов через метку представления
- Использование прямоугольных координат для сложения и полярных координат для умножения
- Сравнение неточных тригонометрических результатов с явным допуском
Прямоугольный объект хранит x и y, поэтому селекторы real-part и imag-part работают напрямую, тогда как модуль и угол вычисляются. Полярный объект хранит r и a, поэтому модуль и угол читаются напрямую, тогда как real-part и imag-part вычисляются. Внешняя метка относится к деталям представления и не является частью абстрактного комплексного значения, видимого клиентскому коду.
Первая программа создает 3 + 4i в обеих формах и опрашивает их через те же четыре селектора. Предикат close? фиксирует, что неточный тригонометрический путь совпадает в пределах объявленного допуска. Вторая программа складывает значения через вещественную и мнимую части и явно возвращает прямоугольный объект, а умножение объединяет модули и углы и возвращает полярный объект. Обобщенные селекторы проверяют абстрактные результаты, не раскрывая вызывающему коду внутреннее содержимое объектов.
- Вывод
- —
- Значение
- —
- Диагностика
- —
Первая программа возвращает (rectangular polar #t #t #t #t). Вторая программа возвращает (rectangular polar #t #t #t #t #t #t).
Проследите за внешней меткой типа перед тем, как каждый селектор выберет прямоугольное или полярное содержимое. В первом запуске сравните прямые селекторы с путем через процедуры sqrt, atan, sin и cos. Во втором запуске обратите внимание, что сложение создает прямоугольное содержимое, а умножение создает полярное содержимое, после чего проследите за проверкой обоих результатов теми же обобщенными селекторами. Допуск определяет равенство для этих конечных неточных вычислений.
Измените программу и сравните результат.
Представьте -3 + 4i в обеих формах, используя модуль 5 и угол (atan 4.0 -3.0). Повторно используйте close? для проверки всех четырех селекторов, затем объясните, почему вызов atan с двумя аргументами важен за пределами первого квадранта.
Показать подсказку
Знаки обеих координат определяют квадрант. Вызов atan с одним аргументом от деления y на x теряет это различие.