Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: gps от 16 Февраля 2024, 08:44:11

Название: Найти значения угла по его косинусу
Отправлено: gps от 16 Февраля 2024, 08:44:11
Приветствую! Подскажите, не получается написать скрипт для нахождения значения угла по его косинусу.
Есть переменная 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.
Название: Re: Найти значения угла по его косинусу
Отправлено: Simple Scada от 16 Февраля 2024, 10:32:08
Здравствуйте.

Пример универсального (https://simple-scada.com/help/script/script-types.html) скрипта на событие OnDataChange (https://simple-scada.com/help/script/by-obj-event.html) поля:
Код: (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" – в свойство "Доп. переменная" поля. Пример проекта во вложении.
Название: Re: Найти значения угла по его косинусу
Отправлено: gps от 16 Февраля 2024, 11:16:40
Огромное спасибо. :)