Length of an arc between two angles: Difference between revisions

From Rosetta Code
Content added Content deleted
(→‎{{header|REXX}}: added the REXX computer programming language for this task.)
(→‎{{header|Raku}}: Add a Raku example)
Line 36: Line 36:
end function
end function
?arclength(10, 10, 120) -- 43.6332313</lang>
?arclength(10, 10, 120) -- 43.6332313</lang>

=={{header|Raku}}==
{{works with|Rakudo|2020.02}}

<lang perl6>sub arc ( \r, \a1, \a2 ) { r × (τ - abs(a2 - a1)) }
sub postfix:<°> (\d) { d × τ / 360 }

say arc(10, 10°, 120°), ' engineering units';</lang>
{{out}}
<pre>43.63323129985824 engineering units</pre>


=={{header|REXX}}==
=={{header|REXX}}==

Revision as of 00:00, 16 March 2020

Task

Calculate the length of the arc (green) between two angles;


https://imgur.com/a/aYgDLxr

It is important in video game programming

implement a method that takes parameters like:

  • xpos of the circle
  • ypos of the circle
  • radius
  • ang1
  • ang2

return green arc_lenght

example method:

arc_lenght (xpos, ypos, radius, ang1, ang2) { return arc_lenght; }

Julia

The task seems to be to find the distance along the circumference of the circle which is NOT swept out between the two angles. <lang julia> arclength(r, angle1, angle2) = (360 - abs(angle2 - angle1)) * π/180 * r @show arclength(10, 10, 120) # --> arclength(10, 10, 120) = 43.63323129985823 </lang>

Phix

Translation of: Julia

<lang Phix>function arclength(atom r, angle1, angle2)

   return (360 - abs(angle2 - angle1)) * PI/180 * r

end function ?arclength(10, 10, 120) -- 43.6332313</lang>

Raku

Works with: Rakudo version 2020.02

<lang perl6>sub arc ( \r, \a1, \a2 ) { r × (τ - abs(a2 - a1)) } sub postfix:<°> (\d) { d × τ / 360 }

say arc(10, 10°, 120°), ' engineering units';</lang>

Output:
43.63323129985824 engineering units

REXX

Translation of: Julia

<lang rexx>/*REXX program calculates the length of an arc between two angles (stated in degrees).*/ parse arg radius angle1 angle2 . /*obtain optional arguments from the CL*/ if radius== | radius=="," then radius= 10 /*Not specified? Then use the default.*/ if angle1== | angle1=="," then angle1= 10 /* " " " " " " */ if angle2== | angle2=="," then angle2= 120 /* " " " " " " */

say ' circle radius = ' radius say ' angle 1 = ' angle1"º" say ' angle 2 = ' angle2"º" say say ' arc length = ' arcLength(radius, angle1, angle2) exit /*stick a fork in it, we're all done. */ /*──────────────────────────────────────────────────────────────────────────────────────*/ arcLength: procedure; parse arg r,a1,a2; return (360-abs(a1-a2)) * pi()/180 * r /*──────────────────────────────────────────────────────────────────────────────────────*/ pi: pi= 3.1415926535897932384626433832795; return pi /*use 32 digs (overkill).*/</lang>

output   when using the default inputs:
     circle radius =  10
           angle 1 =  10º
           angle 2 =  120º

        arc length =  43.6332313