52 lines
1.3 KiB
Text
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
|