point along the normal in a way consistent with the tool definition so that the cutter is now tangent to the surface at that point. Problems: may collide or gouge with the model elsewhere, and there is no way to tell this is happening except with a full implementation of the triangulated approach. Most published academics believe this is the way to find cutter locations, and that the problem of collisions away from the point of contact is soluble. However, nothing printed so far comes close to handling real world cases. Against triangles Start with the XY component for a cutter location and loop across every triangle in the model. For each triangle which crosses under the circular shadow of the cutter, calculate the Z value of the cutter location required for it to exactly touch the triangle, and find the maximum of all such values. Hwang et al. describe this approach in 1998, for cylindrical, ball-end, and bull-end milling tools. These ideas are further developed in a 2002 paper by Chuang et al. In a paper from 2004 Yau et al. describe an algorithm for locating an APT-cutter against triangles. Yau et al. use a kd-tree for finding overlapping triangles. Problems: requires a lot of memory to hold enough triangles to register the model at a tight enough tolerance, and it takes longer to program to get your initial cutter location values. However, they are at least guaranteed valid in all cases. This is how all major CAM systems do it these days because it works without failing no matter what the complexity and geometry of the model, and can be made fast later. Reliability is far more important than efficiency. The above refers to 3-axis machines. 5-axis machines need a special entry of their own. ZMap The ZMap algorithm was proposed in the academic literature by Byoung K Choi in 2003 as a way of precalculating and storing a regular array of cutter location values in the computer memory. The result is a model of the height map of cutter positions from which in between values can be interpolated. Due to accuracy issues, this was generalized into an Extended ZMap, or EZMap, by the placement of "floating" points in between the fixed ZMap points. The location of the EZMap points are found iteratively when the ZMap is created. EZMap points are only placed where sharp edges occur between