@@ -11,7 +11,6 @@ registerType("angle", "a", Angle(0, 0, 0),
1111 end
1212)
1313
14- local pi = math.pi
1514local floor , ceil = math.floor , math.ceil
1615
1716/* *****************************************************************************/
@@ -32,7 +31,7 @@ e2function angle ang(rv1, rv2, rv3)
3231 return Angle (rv1 , rv2 , rv3 )
3332end
3433
35- // Convert Vector -> Angle
34+ -- Convert Vector -> Angle
3635e2function angle ang (vector rv1 )
3736 return Angle (rv1 [1 ], rv1 [2 ], rv1 [3 ])
3837end
150149__e2setcost (5 )
151150
152151e2function angle angnorm (angle rv1 )
153- return Angle ((rv1 [1 ] + 180 ) % 360 - 180 , (rv1 [2 ] + 180 ) % 360 - 180 , (rv1 [3 ] + 180 ) % 360 - 180 )
152+ local ang = Angle (rv1 )
153+ ang :Normalize ()
154+
155+ return ang
154156end
155157
156158e2function number angnorm (rv1 )
@@ -173,17 +175,26 @@ end
173175
174176__e2setcost (2 )
175177
176- // SET methods that returns angles
178+ -- SET methods that returns angles
177179e2function angle angle :setPitch (rv2 )
178- return Angle (rv2 , this [2 ], this [3 ])
180+ local ang = Angle (this )
181+ ang .pitch = rv2
182+
183+ return ang
179184end
180185
181186e2function angle angle :setYaw (rv2 )
182- return Angle (this [1 ], rv2 , this [3 ])
187+ local ang = Angle (this )
188+ ang .yaw = rv2
189+
190+ return ang
183191end
184192
185193e2function angle angle :setRoll (rv2 )
186- return Angle (this [1 ], this [2 ], rv2 )
194+ local ang = Angle (this )
195+ ang .roll = rv2
196+
197+ return ang
187198end
188199
189200/* *****************************************************************************/
@@ -241,7 +252,7 @@ e2function angle floor(angle rv1, decimals)
241252 )
242253end
243254
244- // Performs modulo on p ,y ,r separately
255+ -- Performs modulo on p,y,r separately
245256e2function angle mod (angle rv1 , rv2 )
246257 local p ,y ,r
247258 if rv1 [1 ] >= 0 then
@@ -256,7 +267,7 @@ e2function angle mod(angle rv1, rv2)
256267 return Angle (p , y , r )
257268end
258269
259- // Modulo where divisors are defined as an angle
270+ -- Modulo where divisors are defined as an angle
260271e2function angle mod (angle rv1 , angle rv2 )
261272 local p ,y ,r
262273 if rv1 [1 ] >= 0 then
@@ -271,7 +282,7 @@ e2function angle mod(angle rv1, angle rv2)
271282 return Angle (p , y , r )
272283end
273284
274- // Clamp each p ,y ,r separately
285+ -- Clamp each p,y,r separately
275286e2function angle clamp (angle rv1 , rv2 , rv3 )
276287 local p ,y ,r
277288
@@ -290,7 +301,7 @@ e2function angle clamp(angle rv1, rv2, rv3)
290301 return Angle (p , y , r )
291302end
292303
293- // Clamp according to limits defined by two min / max angles
304+ -- Clamp according to limits defined by two min/max angles
294305e2function angle clamp (angle rv1 , angle rv2 , angle rv3 )
295306 local p ,y ,r
296307
@@ -309,7 +320,7 @@ e2function angle clamp(angle rv1, angle rv2, angle rv3)
309320 return Angle (p , y , r )
310321end
311322
312- // Mix two angles by a given proportion (between 0 and 1 )
323+ -- Mix two angles by a given proportion (between 0 and 1)
313324e2function angle mix (angle rv1 , angle rv2 , rv3 )
314325 local p = rv1 [1 ] * rv3 + rv2 [1 ] * (1 - rv3 )
315326 local y = rv1 [2 ] * rv3 + rv2 [2 ] * (1 - rv3 )
319330
320331__e2setcost (2 )
321332
322- // Circular shift function : shiftr ( p ,y ,r ) = ( r ,p ,y )
333+ -- Circular shift function: shiftr( p,y,r ) = ( r,p,y )
323334e2function angle shiftR (angle rv1 )
324335 return Angle (rv1 [3 ], rv1 [1 ], rv1 [2 ])
325336end
330341
331342__e2setcost (5 )
332343
333- // Returns 1 if the angle lies between (or is equal to ) the min / max angles
344+ -- Returns 1 if the angle lies between (or is equal to) the min/max angles
334345e2function normal inrange (angle rv1 , angle rv2 , angle rv3 )
335346 if rv1 [1 ] < rv2 [1 ] then return 0 end
336347 if rv1 [2 ] < rv2 [2 ] then return 0 end
@@ -343,35 +354,38 @@ e2function normal inrange(angle rv1, angle rv2, angle rv3)
343354 return 1
344355end
345356
346- // Rotate an angle around a vector by the given number of degrees
357+ -- Rotate an angle around a vector by the given number of degrees
347358e2function angle angle :rotateAroundAxis (vector axis , degrees )
348359 local ang = Angle (this )
349360 ang :RotateAroundAxis ( axis :GetNormalized (), degrees )
350361 return ang
351362end
352363
353- // Convert the magnitude of the angle to radians
364+ -- Convert the magnitude of the angle to radians
365+ local deg2rad = math.pi / 180
366+ local rad2deg = 180 / math.pi
367+
354368e2function angle toRad (angle rv1 )
355- return Angle ( rv1 [ 1 ] * pi / 180 , rv1 [ 2 ] * pi / 180 , rv1 [ 3 ] * pi / 180 )
369+ return rv1 * deg2rad
356370end
357371
358- // Convert the magnitude of the angle to degrees
372+ -- Convert the magnitude of the angle to degrees
359373e2function angle toDeg (angle rv1 )
360- return Angle ( rv1 [ 1 ] * 180 / pi , rv1 [ 2 ] * 180 / pi , rv1 [ 3 ] * 180 / pi )
374+ return rv1 * rad2deg
361375end
362376
363377/* *****************************************************************************/
364378
365379e2function vector angle :forward ()
366- return Angle ( this [ 1 ], this [ 2 ], this [ 3 ]) :Forward ()
380+ return this :Forward ()
367381end
368382
369383e2function vector angle :right ()
370- return Angle ( this [ 1 ], this [ 2 ], this [ 3 ]) :Right ()
384+ return this :Right ()
371385end
372386
373387e2function vector angle :up ()
374- return Angle ( this [ 1 ], this [ 2 ], this [ 3 ]) :Up ()
388+ return this :Up ()
375389end
376390
377391e2function string toString (angle a )
0 commit comments