Функция ATan

Язык запросов

Синтаксис и применение Функция ATan в платформе 1С:Предприятие. Описание и примеры кода.

Полное описание, параметры и ограничения

Функция ATan

ATan (<Число>)

Данная функция вычисляет арктангенс в радианах.

Число - Число.

Возвращаемое значение: Число.

Внимание! При использовании в запросе данной функции запрос не будет передан в Дата акселератор.

см. также: Функции языка запросов

Практические примеры

Проверить гипотенузу и углы своего треугольника 3–4–5

POW/SQRT дают длину, ATAN — угол в радианах, SIN/COS/TAN — отношения сторон. ASIN/ACOS на допустимых долях дают тот же острый угол.

Где и как запускать

Полный серверный общий модуль учебной базы. Собственные значения в памяти, без чтения или записи рабочих данных.

Подготовка

  1. В отдельной учебной базе 8.5.1.1343 создайте общий модуль УчебныйЯзык: Сервер=Истина, Глобальный=Ложь, ВызовСервера=Ложь, Привилегированный=Ложь. Клиентские и внешнее соединение отключены; ПовторноеИспользованиеВозвращаемыхЗначений=НеИспользовать.

  2. Вставьте весь приведённый текст в этот общий модуль. ВыполнитьПример — экспортная точка входа; остальные процедуры и функции располагаются рядом, а не внутри неё.

  3. В своей внешней учебной обработке создайте управляемую форму, команду Выполнить и кнопку. Клиентский обработчик Выполнить(Команда) вызывает свою процедуру ВыполнитьНаСервере(); она имеет директиву &НаСервереБезКонтекста и одну строку УчебныйЯзык.ВыполнитьПример();. Это серверный вызов общего модуля, а не разрешение клиенту прямо обращаться к серверной библиотеке.

  4. Все товары, количества и строки придуманы в этом модуле. Запись документов, подключение к чужой базе, файлы, сеть и печать не используются. В рабочие общие модули текст не вставляйте.

  5. HTML только показывает BSL. Код в 1С не запускался; перечисленные результаты и отрицательные опыты проверяйте самостоятельно в собственном стенде.

  6. Все числа созданы этим уроком. Запрос без ИЗ получает одну строку только из параметров; рабочие документы, регистры и справочники не читаются.

  7. Речь о функциях языка запросов из установленного shquery_ru.hbk 8.5.1.1343, не о произвольной математической библиотеке. Модуль серверный; HTML запросы не выполняет.

  8. Для всех перечисленных здесь математических функций установленная справка предупреждает: запрос не будет передан в Дата акселератор. Производительность этим учебным примером не измерена.

  9. Иррациональные/тригонометрические результаты сравниваются с явной погрешностью 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 Тогда
        ВызватьИсключение "Нужны числовой результат и положительная погрешность";
    КонецЕсли;
    Дельта = Факт - Ожидалось;
    Если Дельта < -Погрешность Или Дельта > Погрешность Тогда
        ВызватьИсключение "Результат вне заданной учебной погрешности";
    КонецЕсли;
    Сообщить("Числовой результат попал в заданную учебную погрешность");
КонецПроцедуры

Разбор по шагам

  1. Задать свои положительные катеты 3 и 4; горизонтальный ненулевой до деления.

  2. Гипотенуза вычисляется SQRT(POW(3,2)+POW(4,2)), а не вручную подставляется в текст всех полей.

  3. ATAN(3/4) даёт угол около 0.643501109 радиана. Значение 3/4 — отношение, не градусы.

  4. SIN/COS/TAN этого угла близки к 0.6, 0.8 и 0.75.

  5. ASIN(3/5) и ACOS(4/5) получают допустимые значения в -1…1 и сравниваются с тем же углом.

  6. Проверить все семь результатов с погрешностью 0.000001 и единственность строки.

Как проверить результат

  1. Семь сообщений о попадании в учебную погрешность.

  2. Гипотенуза близка к 5, оба обратных угла совпали с ATAN в пределах заданной точности.

  3. Неположительный собственный катет останавливает код до выполнения запроса.

Ожидаемый результат

В одной реальной учебной геометрической задаче связаны восемь функций запроса, без смешивания радиан и градусов.

На что обратить внимание

  1. Все тригонометрические функции этого блока используют радианы.

  2. ASIN/ACOS принимают только -1…1; здесь допустимость следует из положительных сторон и гипотенузы.

  3. ATAN одного отношения не заменяет полноценный выбор квадранта по произвольным координатам.

  4. Этот опыт не проверяет TAN около вертикальной асимптоты и SQRT отрицательного числа; данные специально подготовлены в корректной области.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.