Length of an arc between two angles: Difference between revisions
(→{{header|REXX}}: added the REXX computer programming language for this task.) |
Thundergnat (talk | contribs) (→{{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;
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
<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
<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
<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