Calculation Method of the CNC Machine Tool Arc
This page covers the math behind G02 and G03 blocks: chord, sagitta, central angle, arc length, and the two ways a controller accepts arc data. It is written for programmers and machinists who need to check a toolpath by hand before the first cut. After reading it you can decide whether to program an arc with R or with I and J, and spot a segment that will trip an alarm.

What this page solves
Most arc errors on the shop floor are arithmetic errors, not control errors.
The geometry behind a single arc block
An arc is the part of a circle between two points. In a CNC block you never describe the whole circle. You give the controller a start point, an end point, a direction, and enough data to fix one unique circle through them. Everything below follows from that.
The straight line joining the two points is the chord. The distance from the chord midpoint to the arc is the sagitta. The angle between the two radii drawn to the endpoints is the central angle, usually written as θ. These three values are linked, so knowing any two of them yields the third.
Two of those values come straight off the drawing. The chord is the distance between two features you can measure with a caliper. The sagitta is the height of the arc above that chord, which a height gauge or an optical comparator can pick up. The radius is often the unknown, because a large radius on a small feature is hard to measure directly.
Worked example. A drawing gives a chord of 5,285 mm and a radius of 3,359 mm. Halve the chord to get 2,642.5 mm. The midpoint of the chord, the circle center, and one endpoint form a right triangle, so the sagitta follows from the Pythagorean relation: s = R − √(R² − (c/2)²). Plugging in the numbers gives s ≈ 1,096.7 mm. That is a shallow arc, about 1,096 mm of rise over 5,285 mm of span.
Once the sagitta is known, the central angle comes from sin(θ/2) = (c/2) / R. Here θ/2 ≈ 51.85°, so θ ≈ 103.7°. The arc length is then L = R × θ in radians, which gives roughly 6,079 mm. Checking the arc length against the chord tells you how much of the circle the move actually covers.
Two ways to hand an arc to the controller
The R format is the short form. You write the endpoint and a radius value, and the control solves the center. It is compact and easy to read on the screen. The catch is that two circles of the same radius pass through any two points, and the sign of R picks which one you get. A positive R takes the arc of 180° or less; a negative R takes the arc longer than 180°.
The I and J format is the long form. Instead of a radius you give the vector from the start point to the center, measured along X and Z. I is the X component, J is the Z component, and K is used for the Y axis on a mill. Because the center is stated outright, there is no ambiguity about which side of the chord the arc sits on.
That ambiguity is why R blocks fail more often than I/J blocks. A rounding error in R can put the center on the wrong side of the chord, and the control rejects the block or, worse, cuts a shallow arc in the wrong direction. On a full circle the start and end points coincide, and R alone cannot define the center at all.
Choose R when the arc is short, the geometry is simple, and a human has to read the program. Choose I and J when the arc runs past 180°, when it is a full circle, or when the same profile is posted from CAM thousands of times. The incremental center vector survives posting and re-posting without drifting.
Arc values and how to check them
Symbols follow ISO 6983 unless noted.
| Value | Symbol | Formula | When to use it |
|---|---|---|---|
| Radius | R | known or solved | Drives every other value |
| Chord | c | c = 2R sin(θ/2) | Two measurable points on a print |
| Sagitta | s | s = R − √(R² − (c/2)²) | Height gauge or comparator check |
| Central angle | θ | θ = 2 arcsin((c/2)/R) | Sets the arc length |
| Arc length | L | L = Rθ (θ in radians) | Feed-rate and cycle-time math |
| Center offset | I, J, K | I = Xc − Xs | Incremental arc blocks |
| Bulge | b | b = 2s/c | Some CAM posts and DXF arcs |
Where the arithmetic meets the machine
The calculation method cnc machine operators actually use on the floor is not the full derivation. It is a quick check: does the arc length match the chord and radius the print shows? A mismatch of more than a few tenths usually means a transposed digit somewhere in the block.
Tolerance matters here. On a part held to ±0.005 mm, an arc that is geometrically correct but posted with truncated coordinates can still miss. Truncating I and J to three decimals on a 3,000 mm radius moves the center by more than the tolerance. Keep full precision in the center vector and let the post handle rounding.
Controller behavior differs too. Some controls alarm out when the programmed endpoint does not sit on the circle defined by I and J. Others quietly move the endpoint to the nearest point on that circle. The second behavior is more forgiving in a prove-out and more dangerous in production, because the error never shows up as an alarm.
For very shallow arcs, another option is to skip the arc entirely and use a series of G01 moves. The chord error of each short segment has to stay under the tolerance, which means the segment length drops as the radius grows. On a 4,000 mm rail this can mean a lot of blocks, but the toolpath becomes predictable and easy to verify.
Which format fits your part
Small radius, short arc, manual programming: R is fine. The two candidate centers are far apart, and the sign convention is easy to remember. Most operators read an R block at a glance and know what the tool will do.
Long arc, full circle, or CAM output: use I and J. Full circles in particular cannot be written with R, because the start and end points are identical. Some controls accept a full circle only when the center vector is explicit.
When the arc is part of a mating surface, check the chord and sagitta after the first article comes off the machine. A comparator overlay on a shallow arc shows the error faster than any CMM routine. If the arc is off, the cause is usually in the block, not in the machine.
GreatLight machines arc-heavy profiles on 16 simultaneous 5-axis centers, with 127 high-precision CNC machines in total and a maximum processing size of 4,000 mm. Arc segments are verified in process and again before shipment, and inspection reports are available on request.
Arc calculation questions we get
Why does my control reject an R block that looks correct?
The sign of R sets which of the two possible centers the control uses. A positive R selects the arc of 180° or less, a negative R the arc longer than 180°. If the sign does not match the geometry, the control either alarms out or cuts the wrong side.
Rounding in the R value can also push the center past the chord, and then no circle of that radius passes through both endpoints. Keep at least four decimals on large radii, or switch to I and J.
Can I program a full circle with R?
No. A full circle has the same start and end point, so the radius alone leaves the center undefined and the control cannot pick a circle.
Write the full circle in two 180° halves with R, or use I and J with an explicit center vector. The I and J route is the cleaner one and is what most posts emit.
How do I check an arc by hand before the first cut?
Take the chord and the radius from the print and compute the sagitta: s = R − √(R² − (c/2)²). Then check the arc length L = Rθ with θ in radians.
If the arc length and the chord do not agree with what the drawing shows, the block has a typo. This check takes under a minute and catches most posting errors on shallow arcs.
When should I replace an arc with G01 moves?
When the arc is very shallow and the chord error of short segments stays under the part tolerance. The longer the radius, the shorter each segment has to be to hold the same chord error.
This is common on large-radius profiles where the controller's arc interpolation is not the limiting factor. The trade-off is program length and cycle time, not accuracy.
Does arc format affect surface finish?
Indirectly. A wrongly signed R can produce a shallow arc in the wrong direction, which shows up as a step at the blend. Correct blocks with full-precision center data cut cleanly.
On our machines, arc profiles in aluminum and stainless are typically held between Ra 0.8 and 1.6 μm, with finer finishes down to Ra 0.2–0.8 μm when the drawing calls for them.
What does bulge mean in a DXF or CAM post?
Bulge is another way to describe an arc between two points. It equals twice the sagitta divided by the chord, and its sign carries the direction.
A bulge of zero is a straight line. Some CAM systems and DXF files store arcs this way because it survives translation between formats without losing the center.
Send us your arc-heavy part
Upload a drawing or STEP file and we will review the arc geometry before quoting. Quotation and free DFM analysis within 12 hours.
12-hour quote±0.005 mm100% inspection