Programming an angle on a lathe by hand sounds harder than it is. A taper is simply a straight line between two points, so all you really need is the coordinate of where the angle ends. The two things that trip people up are the trigonometry and the fact that lathe X values are diameters, not radii. Get those right and you can cut a taper on any control without touching CAM.
This is also a skill worth having even in a CAM shop. A quick taper or chamfer at the control is often faster to type than to model and post, and being able to do it means you are not blocked when CAM is not handy. The math is a single right triangle, and once you have done it a few times it becomes second nature.
The direct answer
A taper is a single feed move. You start at one point on the part and feed in a straight line with G01 to a new X (diameter) and Z. The slope of that line is the angle. So the whole job is finding the endpoint, which is pure right-triangle trig: the radial change equals the length along Z multiplied by the tangent of the angle measured from the centerline.
The one rule you cannot forget is that most lathes are programmed in diameter mode, so X is the diameter. If your radius grows by 5 mm, the X value changes by 10 mm. Forgetting this is the single most common taper error, and it cuts the angle at the wrong slope every time. Knowing the codes well enough to catch that at the control is the same reading skill that separates a CAM programmer who can fix code from one who cannot.
The math, with numbers
Measure the angle from the centerline, which is the turning axis. The radial change over a Z length is length times the tangent of that angle, and the diameter change is twice that.
| Angle from centerline | Tangent | Radius change per 10 mm of Z | Diameter (X) change per 10 mm of Z |
|---|---|---|---|
| 15 degrees | 0.268 | 2.68 mm | 5.36 mm |
| 30 degrees | 0.577 | 5.77 mm | 11.55 mm |
| 45 degrees | 1.000 | 10.00 mm | 20.00 mm |
Worked example: you are at X20.0 Z0 and want a 15 degree taper from the centerline over 10 mm of length. The radius grows by 2.68 mm, so the diameter grows by 5.36 mm. The endpoint is X25.36 Z-10.0, and the move is G01 X25.36 Z-10.0 with your feed. That straight line is the taper.
A second example, in inches
The same method works in inch units; only the numbers change. Suppose you want a 30 degree taper from the centerline over 0.5 inch of length, starting at a 0.75 inch diameter. The tangent of 30 degrees is 0.577, so the radius grows by 0.5 times 0.577, which is about 0.289 inch. Double that for diameter, about 0.577 inch, so the X diameter grows from 0.75 to about 1.327. The move is G01 X1.327 Z-0.5 at your feed. Notice the pattern is identical: length times tangent for the radius, doubled for diameter, added to the starting X. Once you internalize that, units stop mattering.
Cutting it in multiple passes
One G01 line is a finish pass. For real stock removal you take several passes, and most Fanuc-style controls give you a turning cycle for exactly this. The G90 single-pass turning cycle accepts an R value that is the radial taper amount, so the control repeats the angled cut at each depth without you writing every line. The sign of R matters: it sets whether the taper grows toward or away from the chuck, so check it before you run.
A short taper program using G90 might define the start point, then call G90 with the final X, the Z length, the R taper value, and a feed, then step the X in for each successive pass until the taper is fully formed. The cycle handles the repeated approach and retract for you, which is why it is the right tool for removing stock rather than typing dozens of G01 lines. Read the Lathe basics reference if the turning cycle vocabulary is new, and keep your control manual handy because the exact G90 argument order is builder specific.
Chamfers and direct angle programming
A 45 degree corner has a shortcut. Many controls let you add a chamfer to a corner with a comma address, often written as a comma C followed by the chamfer size, rather than computing the endpoint by hand. Similarly, some controls support a comma R to add a radius to a corner. These are faster than trig for a simple lead-in or edge break, and the full lathe chamfer calculation walks through both the math and the automatic method in detail.
Some controls also offer direct angle programming, where you give a move an angle with an A address and one coordinate, and the control computes the missing endpoint. Where it is available, this lets you program a taper by stating the angle instead of calculating the point. It is convenient, but it is control specific, so confirm your machine supports it before relying on it. When in doubt, the trig method always works and is worth knowing as the fallback. The G-code reference for your specific control lists the exact format, and you can keep that file handy while you read or hand-edit the program.
The common mistakes
Three errors cause most bad tapers. The table sums them up.
| Mistake | What goes wrong | How to avoid it |
|---|---|---|
| Forgetting diameter mode | Angle comes out at half the intended slope | Double the radial change for the X value |
| Wrong angle reference | Cone is twice or half the intended angle | Confirm the print gives angle from centerline or included angle |
| Sign error on Z or R | Taper grows the wrong direction | Work the triangle on paper and check the sign before running |
The first is the diameter trap. The second is measuring the angle from the wrong reference, since an angle from the centerline is half the included angle of the cone, so always confirm which one the print gives. The third is a sign error on Z or on the G90 R value, which flips the taper direction. Work the triangle on paper first, then verify the endpoint makes sense before you cut.
A complete short taper, read line by line
To tie it together, here is how a simple finish taper reads from start to finish, with each line in plain language. Assume diameter mode and millimeters.
| Line | What it does |
|---|---|
| G21 | Millimeter units |
| G54 | Work offset for this part |
| T0101 | Tool 1 with offset 1 |
| G97 S1200 M03 | Constant spindle speed, 1200 rpm, clockwise |
| G00 X20. Z2. | Rapid to the start, just off the face |
| G01 Z0 F0.1 | Feed to the face at 0.1 mm per rev |
| G01 X25.36 Z-10. | Cut the 15 degree taper to the endpoint |
| G00 X30. | Rapid clear in X |
| G00 Z2. | Rapid back to the start Z |
| M30 | End the program |
The one line that does the angle is the G01 X25.36 Z-10. move; everything else is approach and retract. That is the whole idea of a hand-programmed taper: compute one endpoint, feed to it in a straight line.
Tapers on the inside, when boring
The same trig applies to an internal taper cut while boring, with one thing to watch. The radial change still equals length times the tangent of the angle, and X is still a diameter. But on an internal taper the diameter gets larger as you feed in the direction that opens the bore, so the sign of your X change and the direction of cut need a careful check against the print. Picture the cut, confirm whether the bore is widening or narrowing along Z, and set the endpoint accordingly. A quick sketch on paper prevents an inside taper that slopes the wrong way.
Verify before you cut
Because you calculated the endpoint by hand, treat the first run as a proof. Re-check your arithmetic, confirm the sign on Z, and confirm whether the print angle is from the centerline or the included angle. Then run in single block with the rapid override down and a hand near feed hold, watching the first taper move complete before you trust it. A taper cut at the wrong slope is scrap, so the two minutes of verification are always worth it.
Build the fluency that makes this safe
Hand programming a taper means reading and trusting your own code, which only works if the codes are automatic. If you hesitate on what G90 or G01 does, you are guessing, and guessing on a lathe is expensive. Fast recognition of the common codes is what lets you write and check a taper move with confidence.
That recognition is recall, and short repetition builds it. The free G-Code Sprint app at GCodePractice.com runs 60-second rounds on the common G and M codes and repeats the ones you miss, so the codes you use to program an angle become second nature. It is an educational practice tool for building that fluency, not a machine controller, so always prove the program safely on your machine. Learn the trig once, drill the codes, and tapers without CAM become routine. And if the opposite happens, a part coming out tapered when it should be straight, the same habit of reading the X values is where diagnosing an unwanted taper begins.
Frequently asked questions
How do you program an angle on a CNC lathe without CAM?
Cut the angle as a straight G01 feed move to a calculated endpoint. Find the radial change by multiplying the Z length by the tangent of the angle measured from the centerline, double it because X is a diameter, and feed from the start point to the new X and Z. For stock removal, use a G90 turning cycle with an R taper value. The free G-Code Sprint app at GCodePractice.com drills the codes you need in 60-second recall rounds.
Is X a diameter or a radius on a CNC lathe?
On most lathes X is programmed as a diameter, so a radial change of 5 mm means the X value changes by 10 mm. Forgetting this is the most common cause of a taper cut at the wrong angle. A few machines run in radius mode, so confirm yours.
How do you calculate a taper angle in G-code?
Use right-triangle trig. The radial change equals the length along Z times the tangent of the angle from the centerline, and the diameter change is twice that. Add the diameter change to your starting X to get the endpoint for the G01 move.
Can you cut a taper in one line of G-code?
A single G01 to the calculated X and Z cuts the taper in one finish pass. For removing real stock you use several passes, which a G90 turning cycle with an R value handles by repeating the angled cut at each depth.
What is the difference between angle from centerline and included angle?
The angle from the centerline is measured from the turning axis to the taper surface, while the included angle is the full angle of the cone, which is twice the centerline angle. Prints can give either, so always confirm which one is specified before you calculate, or your taper will be twice or half as steep as intended.
Can you program a taper by stating the angle directly?
On some controls, yes. Direct angle programming with an A address lets you give the angle and one coordinate, and the control computes the endpoint. It is control specific, so confirm your machine supports it. The trig method always works as a reliable fallback.