Pocket milling (rectangular) in CNC Programming - Time & Space Complexity
When programming a CNC machine to mill a rectangular pocket, it's important to understand how the time to complete the job grows as the pocket size changes.
We want to know how the number of milling moves increases when the pocket gets bigger.
Analyze the time complexity of the following pocket milling code snippet.
G90 G21 ; Absolute positioning, millimeters
G0 X0 Y0 ; Move to start
M98 P100 L10 ; Call subroutine 10 times
O100 SUB
G1 X[#100 * 10] Y0 F100 ; Mill along X
G1 X[#100 * 10] Y[#100 * 5] ; Mill along Y
G1 X0 Y[#100 * 5] ; Mill back along X
G1 X0 Y0 ; Mill back along Y
M99
This code mills a rectangular pocket by repeating a subroutine that moves the tool along the edges of the rectangle multiple times.
Look for repeated actions that take time.
- Primary operation: The subroutine that mills the rectangle edges.
- How many times: The subroutine is called 10 times, repeating the milling passes.
The number of moves grows as the size of the pocket increases because the tool must cover more distance.
| Input Size (length or width in mm) | Approx. Operations (moves) |
|---|---|
| 10 | About 40 moves (4 moves per pass x 10 passes) |
| 100 | Still 40 moves, but each move covers more distance |
| 1000 | Still 40 moves, with even longer distances per move |
Pattern observation: The number of moves stays the same, but the distance covered per move grows with pocket size.
Time Complexity: O(1)
This means the number of milling moves does not increase with pocket size; only the distance per move changes.
[X] Wrong: "The time to mill grows directly with the pocket size because there are more moves as the pocket gets bigger."
[OK] Correct: The number of moves stays constant; only the length of each move changes. So the count of operations does not grow with size.
Understanding how CNC programs scale with input sizes helps you write efficient machining code and explain your reasoning clearly in technical discussions.
What if the pocket milling code added a loop to fill the pocket with multiple passes inside the rectangle? How would the time complexity change?
