Синтаксис и применение Функция ATan в платформе 1С:Предприятие. Описание и примеры кода.
Полное описание, параметры и ограничения
Функция ATan
ATan (<Число>)
Данная функция вычисляет арктангенс в радианах.
Число - Число.
Возвращаемое значение: Число.
Внимание! При использовании в запросе данной функции запрос не будет передан в Дата акселератор.
см. также: Функции языка запросов
Практические примеры
Проверить гипотенузу и углы своего треугольника 3–4–5
POW/SQRT дают длину, ATAN — угол в радианах, SIN/COS/TAN — отношения сторон. ASIN/ACOS на допустимых долях дают тот же острый угол.
Где и как запускать
Полный серверный общий модуль учебной базы. Собственные значения в памяти, без чтения или записи рабочих данных.
Подготовка
В отдельной учебной базе 8.5.1.1343 создайте общий модуль УчебныйЯзык: Сервер=Истина, Глобальный=Ложь, ВызовСервера=Ложь, Привилегированный=Ложь. Клиентские и внешнее соединение отключены; ПовторноеИспользованиеВозвращаемыхЗначений=НеИспользовать.
Вставьте весь приведённый текст в этот общий модуль. ВыполнитьПример — экспортная точка входа; остальные процедуры и функции располагаются рядом, а не внутри неё.
В своей внешней учебной обработке создайте управляемую форму, команду Выполнить и кнопку. Клиентский обработчик Выполнить(Команда) вызывает свою процедуру ВыполнитьНаСервере(); она имеет директиву &НаСервереБезКонтекста и одну строку УчебныйЯзык.ВыполнитьПример();. Это серверный вызов общего модуля, а не разрешение клиенту прямо обращаться к серверной библиотеке.
Все товары, количества и строки придуманы в этом модуле. Запись документов, подключение к чужой базе, файлы, сеть и печать не используются. В рабочие общие модули текст не вставляйте.
HTML только показывает BSL. Код в 1С не запускался; перечисленные результаты и отрицательные опыты проверяйте самостоятельно в собственном стенде.
Все числа созданы этим уроком. Запрос без ИЗ получает одну строку только из параметров; рабочие документы, регистры и справочники не читаются.
Речь о функциях языка запросов из установленного shquery_ru.hbk 8.5.1.1343, не о произвольной математической библиотеке. Модуль серверный; HTML запросы не выполняет.
Для всех перечисленных здесь математических функций установленная справка предупреждает: запрос не будет передан в Дата акселератор. Производительность этим учебным примером не измерена.
Иррациональные/тригонометрические результаты сравниваются с явной погрешностью 0.000001, а не обещанием бесконечной точности.
Процедура ВыполнитьПример() Экспорт
ВертикальныйКатет = 3;
ГоризонтальныйКатет = 4;
Если ВертикальныйКатет <= 0 Или ГоризонтальныйКатет <= 0 Тогда
ВызватьИсключение "Нужны два положительных собственных катета";
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| SQRT(POW(&Вертикальный, 2) + POW(&Горизонтальный, 2)) КАК Гипотенуза,
| ATAN(&Вертикальный / &Горизонтальный) КАК УголРадианы,
| SIN(ATAN(&Вертикальный / &Горизонтальный)) КАК Синус,
| COS(ATAN(&Вертикальный / &Горизонтальный)) КАК Косинус,
| TAN(ATAN(&Вертикальный / &Горизонтальный)) КАК Тангенс,
| ASIN(&Вертикальный / SQRT(POW(&Вертикальный, 2) + POW(&Горизонтальный, 2))) КАК УголЧерезСинус,
| ACOS(&Горизонтальный / SQRT(POW(&Вертикальный, 2) + POW(&Горизонтальный, 2))) КАК УголЧерезКосинус";
Запрос.УстановитьПараметр("Вертикальный", ВертикальныйКатет);
Запрос.УстановитьПараметр("Горизонтальный", ГоризонтальныйКатет);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если НЕ Выборка.Следующий() Тогда
ВызватьИсключение "Запрос из собственных параметров должен вернуть одну строку";
КонецЕсли;
ПроверитьБлизость(Выборка.Гипотенуза, 5, 0.000001);
ПроверитьБлизость(Выборка.УголРадианы, 0.643501109, 0.000001);
ПроверитьБлизость(Выборка.Синус, 0.6, 0.000001);
ПроверитьБлизость(Выборка.Косинус, 0.8, 0.000001);
ПроверитьБлизость(Выборка.Тангенс, 0.75, 0.000001);
ПроверитьБлизость(Выборка.УголЧерезСинус, Выборка.УголРадианы, 0.000001);
ПроверитьБлизость(Выборка.УголЧерезКосинус, Выборка.УголРадианы, 0.000001);
Сообщить("Угол получен в радианах, не в градусах. Доли 3/5 и 4/5 находятся в допустимом диапазоне ASIN/ACOS.");
Если Выборка.Следующий() Тогда
ВызватьИсключение "У запроса без источников ожидалась ровно одна строка";
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьБлизость(Факт, Ожидалось, Погрешность)
Если ТипЗнч(Факт) <> Тип("Число") Или Погрешность <= 0 Тогда
ВызватьИсключение "Нужны числовой результат и положительная погрешность";
КонецЕсли;
Дельта = Факт - Ожидалось;
Если Дельта < -Погрешность Или Дельта > Погрешность Тогда
ВызватьИсключение "Результат вне заданной учебной погрешности";
КонецЕсли;
Сообщить("Числовой результат попал в заданную учебную погрешность");
КонецПроцедурыРазбор по шагам
Задать свои положительные катеты 3 и 4; горизонтальный ненулевой до деления.
Гипотенуза вычисляется SQRT(POW(3,2)+POW(4,2)), а не вручную подставляется в текст всех полей.
ATAN(3/4) даёт угол около 0.643501109 радиана. Значение 3/4 — отношение, не градусы.
SIN/COS/TAN этого угла близки к 0.6, 0.8 и 0.75.
ASIN(3/5) и ACOS(4/5) получают допустимые значения в -1…1 и сравниваются с тем же углом.
Проверить все семь результатов с погрешностью 0.000001 и единственность строки.
Как проверить результат
Семь сообщений о попадании в учебную погрешность.
Гипотенуза близка к 5, оба обратных угла совпали с ATAN в пределах заданной точности.
Неположительный собственный катет останавливает код до выполнения запроса.
Ожидаемый результат
В одной реальной учебной геометрической задаче связаны восемь функций запроса, без смешивания радиан и градусов.
На что обратить внимание
Все тригонометрические функции этого блока используют радианы.
ASIN/ACOS принимают только -1…1; здесь допустимость следует из положительных сторон и гипотенузы.
ATAN одного отношения не заменяет полноценный выбор квадранта по произвольным координатам.
Этот опыт не проверяет TAN около вертикальной асимптоты и SQRT отрицательного числа; данные специально подготовлены в корректной области.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.