0
\$\begingroup\$

As I calculate the length of the arc (green) between two angles;

enter image description here I need a method like:

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

\$\endgroup\$
2
  • \$\begingroup\$ I'm not quite sure what you mean by 'arc length between two angles'. Generally, you can easily find the arc length from the radius and some central angle. Also what does xpos and ypos represent? Are they the center of the circle? Cause that doesn't seem relevant to the problem. \$\endgroup\$
    – prithul
    Commented Mar 15, 2020 at 6:26
  • \$\begingroup\$ If you have two angles, there should be two arcs on the circle that join them. Which one do you want? My guess is clockwise from the first angle to the second, is that correct? Well, they should sum up to the circumference, so if you can get one, you can get the other. \$\endgroup\$
    – Theraot
    Commented Mar 15, 2020 at 11:29

1 Answer 1

1
\$\begingroup\$

The arc-length, l, of a circle is equal to the angle of the arc, θ, in radians times the radius.

If we assume that ang1 is in the range [0 - ang2] and ang2 is in the range [ang1 - 360] (so ang1 is always the smaller of the two and neither is bigger than 360) then:

float angle = ang1 - ang2;
float rad = angle * PI / 180.0;
float radOutside = (2 * PI) - rad;

float arc_length = radOutside * radius;

I am not sure what xpos and ypos represents, but I don't think they're relevant for getting the arc length.

\$\endgroup\$
4
  • \$\begingroup\$ Don't forget to wrap your angle difference. If I give you the jnputs -90 and 180, the largest arc length between them is 1.5π•radius, but this code will give the answer 3.5π•radius — including an extra full rotation. \$\endgroup\$
    – DMGregory
    Commented Mar 15, 2020 at 13:37
  • 1
    \$\begingroup\$ @DMGregory That's why I made an assumption on the range of ang1 and ang2. \$\endgroup\$
    – bornander
    Commented Mar 15, 2020 at 13:56
  • 1
    \$\begingroup\$ You could make this quite a bit shorter by assuming input in radians, too. \$\endgroup\$
    – Weckar E.
    Commented Aug 12, 2020 at 14:04
  • \$\begingroup\$ @WeckarE. agreed, I used degrees as input because OP's example was in degrees. \$\endgroup\$
    – bornander
    Commented Aug 12, 2020 at 14:39

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .