Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Автор Тема: Найти значения угла по его косинусу  (Прочитано 774 раз)

gps

  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
Приветствую! Подскажите, не получается написать скрипт для нахождения значения угла по его косинусу.
Есть переменная cos_a_48086532 нужно с помощью формулы arccos(x)=arctan(sqrt(1-sqr(x))/x) записать результат в переменную angle_a_48086532.
Пример: cos_a_48086532 = 0,793   то угол angle_a_48086532 должен получиться 37.53°.


Код: (delphi)
program AngleCalculation;

var
  cosValue, angle: real;

begin
  // Ввод значения косинуса угла
  writeln('Введите значение косинуса угла: ');
  readln(cosValue);

  // Проверка ввода на корректность
  if (cosValue < -1) or (cosValue > 1) then
    writeln('Ошибка: косинус должен быть в диапазоне от -1 до 1')
  else
  begin
    // Расчёт угла в радианах по формуле arccos(x)=arctan(sqrt(1-sqr(x))/x)
    angle := arctan(sqrt(1 - sqr(cosValue)) / cosValue);

    // Перевод угла из радиан в градусы
    angle := angle * 180 / pi;

    // Вывод результата
    writeln('Угол, косинус которого равен ', cosValue:0:4, ' равен ', angle:0:4, ' градусов');
  end;
end.
« Изменён: 16 Февраля 2024, 09:33:54 от gps »

Simple Scada

  • Глобальный модератор
  • *****
  • Сообщений: 157
    • Просмотр профиля
    • Simple-Scada
Re: Найти значения угла по его косинусу
« Ответ #1 : 16 Февраля 2024, 10:32:08 »
Здравствуйте.

Пример универсального скрипта на событие OnDataChange поля:
Код: (delphi)
var
  aAngle: Double;
begin
  if Sender is TM_Field then   // проверяем, что Sender это поле
    with Sender as TM_Field do // приводим Sender к типу "TM_Field"
      begin
        // Проверка ввода на корректность
        if (AsFloat < -1) or (AsFloat > 1) then
          AddMessage(Now, mkAlarm, 'Ошибка: косинус должен быть в диапазоне от -1 до 1. Значение: ' + AsStr , True, True)
        else
        begin
          // Расчёт угла в радианах по формуле arccos(x)=arctan(sqrt(1-sqr(x))/x)
          aAngle := arctan(sqrt(1 - sqr(AsFloat)) / AsFloat);

          // Перевод угла из радиан в градусы
          aAngle := aAngle * 180 / pi;
 
          // Вывод результата
          VariableEx.Value := aAngle;
          AddMessage(Now, mkMessage, 'Угол, косинус которого равен ' + AsStr + ', равен ' + VariableEx.AsStr + ' градусов.', True, False);
        end;
      end;
end.
Переменную "cos_a_48086532" нужно указать в свойство "Переменная" поля, а переменную "angle_a_48086532" – в свойство "Доп. переменная" поля. Пример проекта во вложении.

gps

  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
Re: Найти значения угла по его косинусу
« Ответ #2 : 16 Февраля 2024, 11:16:40 »
Огромное спасибо. :)
« Изменён: 16 Февраля 2024, 11:17:42 от Simple Scada »