# 刀具几何实验室：教学依据与模型范围

核对日期：2026-09-22。

## 教学口径

- 本模型包含外圆车刀切削部分、过渡段和矩形长刀柄。切削部分采用平直前刀面、主后刀面、副后刀面及理想交点刀尖。实际刀具还可能有断屑槽、刃口钝圆、倒棱、刀尖圆弧、刀片安装倾角；本模型不表示某一厂商的具体产品，也不输出加工选型结论。
- 前刀面是切屑流过的面。主后刀面面对工件过渡表面，副后刀面面对已加工表面。主切削刃是前面与主后面的交线，副切削刃是前面与副后面的交线。教材中的“刀尖”还可指主、副刃之间的短过渡刃，并不总是数学上的尖点。[清华大学出版社《机械制造工程原理》第4版，第9—10页](https://www.tup.tsinghua.edu.cn/upload/books/yz/097089-01.pdf)
- 基面 Pr：过切削刃选定点并垂直假定主运动方向。切削平面 Ps：过该点、与切削刃相切并垂直 Pr。正交平面 Po：过该点并同时垂直 Pr 与 Ps。Po 垂直的是主刃在 Pr 中的投影；刃倾角不为零时，Po 与垂直真实空间刃线的法平面 Pn 不同。[同教材，第10页](https://www.tup.tsinghua.edu.cn/upload/books/yz/097089-01.pdf)
- γo、αo、βo 在 Po 中测量，分别是前角、主后角和楔角；γo + αo + βo = 90°。κr、κr′、εr 在 Pr 中根据两刃投影测量，分别是主偏角、副偏角和刀尖角；κr + κr′ + εr = 180°。主偏角相对进给方向，副偏角相对进给反方向。λs 在 Ps 中由主刃与 Pr 的夹角确定。[广东工程职业技术学院教学课件《金属切削加工基础》](https://web.gdep.edu.cn/skills/portal/res?download=false&key=8236372)
- λs > 0 表示刀尖为主刃最高点，λs < 0 表示刀尖为主刃最低点。本程序采用 z 向上，因此由刀尖向主刃后端的 z 分量为 -tan(λs)。[广东环境保护工程职业学院教学课件](https://elearning.gdpepe.edu.cn/suite/portal/blob?key=18434535)
- 副后角 αo′ 固定为 8°，在副刃对应的副正交平面测量；这是教学模型参数，不是材料对应的推荐加工参数。
- 正式参考系的三个平面应通过同一选定刃点。沿主切削刃移动选定点时，联动更新公共基准点；三个观察平面可单独选中、高亮或独显，沿各自法向独立偏移 ±120 mm。归位只清除偏移，保留刃上选定点。偏移后的实时截面用于观察刀体，角度小图仍按选定刃点的定义显示，不能将任意截面角视为该点的标准标注角。
- 展示的角度属于刀具标注角度；本应用未计算进给运动、安装偏差等造成的工作角度变化。

开发时参考了教材式车刀与外圆车削示意图，用于明确长刀柄、较短切削头、刀面辨识及初始工件场景的形态，不作为尺寸、材料选择或加工工艺参数的来源。参考图片未取得公开再分发授权，不随开源仓库提供。初始场景中的工件旋转与卷屑是教学示意；刀具不实际轴向位移，不动态去除材料。

## 材料与外观

结构辨识配色是帮助区分三个刀面的教学色。材质展示色是代表性外观，二者含义不同。材料实际颜色还受涂层、粘结相、表面处理及照明影响，不能仅凭颜色鉴定材料。

| 展示材料 | 建议外观 | 简洁教学属性 |
| --- | --- | --- |
| 高速钢 HSS | 银灰金属，示意 | 韧性好，适合刃磨和复杂刃形；耐热性通常低于硬质合金。 |
| 未涂层硬质合金 | 深灰金属，示意 | 硬度和耐磨性高；晶粒及粘结相影响硬度、强度与抗塑性变形能力。 |
| TiN 涂层硬质合金 | 金色 | 金色在此代表 TiN 表层；基体仍是硬质合金，不能把金色直接等同某种基体材料。 |
| 氧化铝陶瓷 | 象牙白，示意 | 耐热、耐磨；断裂韧性与抗热冲击能力有限。陶瓷家族也有深色材质。 |
| 立方氮化硼 CBN | 深灰褐，示意 | 红硬性好，常用于淬硬钢精加工；可作为刀尖部分连接在硬质合金载体上。 |
| 聚晶金刚石 PCD | 炭灰，示意 | 极耐磨，常用于铝合金等有色金属与复合材料；不宜概括为钢件通用材料。它不是透明宝石外观。 |

材料属性依据：[山特维克可乐满《切削刀具材料》](https://www.sandvik.coromant.cn/zh-cn/knowledge/materials/cutting-tool-materials)。HSS 及涂层外观参考：[Birla Precision 刀具技术讲义，第89—90页](https://www.birlaprecision.de/documents/media/cutting-tool-presentation.pdf)：其中 TiN 标作 Gold，TiCN 标作 Grey–Violet，TiAlN 标作 Black Violet。除该讲义明确给出的涂层颜色外，表内展示色都是教学示意，不是鉴材标准。

## 几何实现与接口

`geometry.mjs` 无第三方依赖，使用毫米与三元素数组向量。全部平面统一采用 `normal·point + constant >= 0` 为实体内侧；面顶点从外侧观察为逆时针，因此顶点绕序产生的外法线与保存的内法线相反。

`buildTool({ gamma=12, alpha=8, kappa=60, kappa2=15, lambda=0 })` 返回：

- `faces`: `{ id, normal:[x,y,z], constant, vertices:[[x,y,z],...] }[]`。可能的 id 为 `rake/flank/secondary/bottom/back/left/right`；某边界面被其他平面完全截去时会省略。
- `edges.main`、`edges.minor`：真实切削刃的两端，第一端固定是刀尖 `[0,0,0]`。
- `tip`、`basis:{t,b,u,m,k}`、`parameters`。parameters 另含 `alpha2=8`、派生 `beta/epsilon`、刀头尺寸 `H=16,L=22,W=12`。W 是 x 方向半宽，刀头最大总宽为 24 mm。
- 输入范围与页面滑杆一致：γo [-10°,30°]、αo [3°,20°]、κr [35°,90°]、κr′ [5°,35°]、λs [-15°,15°]；越界及非有限数抛出错误。

`buildShank(tool)` 返回 `[{id:'transition',faces}, {id:'shank',faces}]`，各 `faces` 沿用上述平面与顶点格式。过渡段为刀头后截面与 `y=34` 矩形截面的凸包，范围 `y=22..34`；刀柄范围 `y=34..100`、`x=-12..12`、`z=-16..4`。两接缝的截面顶点完全一致，三个实体无体积重叠。默认正前角下，刀头前刀面低于刀柄顶部，通过斜面过渡。逐实体剖切可保留完整封口；STL 导出同样保留三个闭合实体及公共接缝，不做布尔并集，不包含工件、切屑和当前剖切。

`buildWorkpieceProfile(tool)` 返回 `{r:22, R:26, center:[0,-22,0], profile, contactEnd, uEnd}`。工件轴沿 x 方向，已加工半径 `r=22`，待加工半径 `R=26`；`profile` 为 `[radius,x]` 数组，围绕轴线生成回转体。进给方向为 `+x`，已加工段在负 x 侧、待加工段在正 x 侧；默认镜头从正 y 侧观察，呈现从右向左切削。主切削刃所在的过渡表面随刀具角度更新，构造方法见下节。旋转角速度方向为 `-x`，刀尖处主运动方向为 `-z`。

`sectionPolygon(faces, normal, constant=0)` 返回剖切平面与实体边界相交的空间有序顶点数组。未相交、点接触或线接触返回空数组。与现有面重合时返回该面轮廓。

参考平面移动时，使用同一求交函数逐一计算完整刀头、过渡段及刀柄的截面，投影到选中平面的二维坐标内显示轮廓和剖面线，保持三维刀体完整。拖动可见平面或球形手柄、滑条及数值输入共用各平面的偏移；“正对平面”沿平面法向观察，此时手柄上下拖动仍可平移。该观察功能与下述手动剖切独立。

Po 默认相机位于观察点的 `-t` 侧，视线沿 `+t`，竖直向上仍为 `+z`，画面向右对应 `-b`。Po 角度图和实时截面按此方向绘制；这只改变观察侧，不改变参考平面法向、偏移正方向或标注角数值。

`clipFaces(faces, normal, constant=0)` 返回 `{faces,section}`，保留平面内侧并以 id `section` 封闭真实剖切口。相切但没有切除体积时不生成重复封口。原始 faces 不会被修改。

另外导出 `add/sub/scale/dot/cross/length/normalize` 基础数组向量函数。

以下是程序依据上述定义自行推导的几何公式，不是教材直接提供的模型：

```text
O = (0,0,0), k = (0,0,1), 进给 f = (1,0,0)
t = ( cosκr, sinκr, 0)     主刃在基面内从刀尖向后的单位方向
b = (-sinκr, cosκr, 0)     主刃向刀体内部的横向单位方向
u = (-cosκr′, sinκr′, 0)   副刃在基面内从刀尖向后的单位方向
m = ( sinκr′, cosκr′, 0)   副刃向刀体内部的横向单位方向
G = tanγo · b + tanλs · t

前面：      z + G·r = 0                         内部 <= 0
主后面：    b·r + tanαo(z + tanλs · t·r) = 0    内部 >= 0
副后面：    m·r + tan8°(z + (G·u)(u·r)) = 0     内部 >= 0
刀头底面 z >= -16，后端 y <= 22，左右 -12 <= x <= 12

Pr: z=0; Ps: b·r=0; Po: t·r=0
主刃方向：t - tanλs · k
```

三功能面及底、后、左、右边界的半空间交集形成闭合凸多面体。没有施加 `z <= 0` 的额外顶面，保证负前角或负刃倾角时高于刀尖的部分仍能正确显示。

工件台肩使用主刃绕工件轴的回转面。记主刃另一端为 `E=edges.main[1]`，刀尖为原点，则刃线上一点为 `uE`。该点到轴线的半径是 `sqrt((r+uEy)²+(uEz)²)`，轴向坐标为 `uEx`。由半径达到 R 求得切削接触终点：

```text
Δ = R²-r², A = Ey²+Ez², B = 2rEy
uEnd = 2Δ / (B + sqrt(B²+4AΔ))
contactEnd = uEnd · E
```

在 `u=0..uEnd` 依次取 13 个点、12 个区段形成台肩轮廓，由负 x 向正 x 排列，前后连接 `x=-46` 的已加工圆柱与 `x=64` 的未加工圆柱，并闭合两端。κr 为 90° 时，同一 x 坐标上的不同半径构成径向台肩。该方法建立刀刃与工件过渡表面的静态接触关系，切屑动画不参与几何去材计算。

## 验证范围

运行 `node --test geometry.test.mjs` 执行 8 组检查。检查实际面顶点所求平面及真实刃端点的角度、全部 32 种滑杆端点组合、面闭合、凸性、每条边恰有两邻面、Euler 关系，以及任意/正交剖切后的封口、半空间满足情况和互补剖切体积守恒。新增长刀柄与过渡段的闭合、公共接缝一致及无体积重叠验证；32 种极值下的工件接触终点均位于主刃范围内，回转轮廓各采样点与主刃一致，区段中点的径向近似误差小于 0.001 mm。还覆盖重合面、相切、无交、空实体及异常输入。

运行 `node --test machining.test.mjs` 另执行 2 组工件端面检查，覆盖默认参数及 32 种角度极值下的共面性、法线方向、端口接合和面积。

运行 `npm run test:browser` 执行四套浏览器检查，共 32 类流程，覆盖默认完整车刀与加工场景、工件隐藏及演示暂停、结构标注与选择、角度及参考平面移动、材料、剖切、完整组合 STL 导出、镜头交互、全屏与折叠面板和不同窗口宽度。安装方法见 [README.md](README.md)，验收范围见 [QA.md](QA.md)。检查生成的本地报告与截图保存在 `evidence/`，不纳入公开仓库。
