Приветствую! Подскажите, не получается написать скрипт для нахождения значения угла по его косинусу.
Есть переменная cos_a_48086532 нужно с помощью формулы arccos(x)=arctan(sqrt(1-sqr(x))/x) записать результат в переменную angle_a_48086532.
Пример: cos_a_48086532 = 0,793 то угол angle_a_48086532 должен получиться 37.53°.
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.
Здравствуйте.
Пример универсального (https://simple-scada.com/help/script/script-types.html) скрипта на событие OnDataChange (https://simple-scada.com/help/script/by-obj-event.html) поля:
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" – в свойство "Доп. переменная" поля. Пример проекта во вложении.