RosettaCodeData/Task/Averages-Mean-angle/M2000-Interpreter/averages-mean-angle.m2000
2024-11-04 21:53:44 -08:00

52 lines
1.3 KiB
Text

module Mean_angle (useDif as boolean) {
meanangle= lambda useDif->{
if useDif then
sin1=lambda ->{
data round(sin(number)-0.00000001,8)
}
cos1=lambda ->{
data round(cos(number)-0.00000001, 8)
}
else
sin1=lambda ->{
data round(sin(number),8)
}
cos1=lambda ->{
data round(cos(number), 8)
}
end if
= lambda sin1, cos1 ->{
' [] is a stack object with all parameters
' array([]) put the parameters in an array
a=array([])
s=a#map(sin1)#sum()/len(a)
c=a#map(cos1)#sum()/len(a)
if s>0 and c>0 then
=round(atn(s/c), 1)
else.if c<0 then
=round(atn(s/c)+180, 1)
else.if s<0 and c>0 then
=round(atn(s/c)+360, 1)
else
=0
end if
}
}() ' execute lambda now, so meanangle has the inner lambda
? meanangle(350, 10)=360 ' false with useDif=false
? meanangle(90, 180, 270, 360)=225 ' false with useDif=false
? meanangle(-270, -180, -90, 0)=225' false with useDif=false
? meanangle(355, 5, 15)=5
? meanangle(335, 345, 355)=345
? meanangle(40, 60)=50
? meanangle(-60, -40)=310
? meanangle(350, 20)=5
? meanangle(340, 10)=355
? meanangle(10, 20, 30)=20
? meanangle(355, 10, 20, 30, 45)=20
? meanangle(370)=10
? meanangle(180)=180
? meanangle(180, 270)=225
}
Mean_angle true
Mean_angle false