可DIY布里渊区图像绘制编辑器
晶体倒易空间几何理论、高对称点解析推导与三维交互式渲染算法实现
1 布里渊区的物理定义与数学推导
1.1 正晶格与倒易晶格的对偶关系
三维理想晶体的空间周期性由三个线性无关的初基正格矢
描述。任意晶格格矢表示为
。 正空间初基原胞的体积为标量三重积
。 为对偶描述晶体中平面波的周期性,定义倒易空间初基格矢
:
(1.1)
正格矢与倒格矢满足正交完备性关系(部分计算软件内部省略常数因子
):
(1.2)
倒易格矢的整数线性组合构成倒易晶格格矢(密勒指数对应向量):
(1.3)
1.2 布洛赫定理与倒空间平移对称性
电子在周期性晶体势场
中运动时,其单电子哈密顿算符与晶格平移算符对易。由布洛赫定理(Bloch's Theorem),本征波函数写为调幅平面波形式:
(1.4)
由于对任意倒格矢
恒有
, 波矢
与
满足完全相同的平移量子数特征值。本征能量与物理可观测量在倒易空间具有周期性:
(1.5)
因此,描述晶体全部电子态与声子色散只需限定在倒易空间的一个初基原胞内。
1.3 Wigner-Seitz原胞与布拉格平面方程
定义 1.1(第一布里渊区 / First Brillouin Zone)第一布里渊区是倒易晶格中以原点
为中心的 Wigner-Seitz 原胞(即计算几何中的 Voronoi 单元):倒空间中到原点
的欧氏距离小于或等于到任何其他非零倒格点
距离的所有波矢
的集合。
将距离判据展开并化简,得到第一布里渊区的半空间交集解析表达式:
(1.6)
式 (1.6) 中取等号的边界面
即垂直平分向量
的布拉格反射面(Bragg Plane)。波矢端点位于该平面上的电子波满足劳厄衍射条件,简并微扰在边界处使能带发生劈裂并形成能隙。
2 从具体晶体结构推导布里渊区尺寸与空间取向
2.1 惯用晶胞向初基原胞的转换
对于非简单点阵(底心
、体心
、面心
),直接用惯用晶胞(Conventional Cell)构造的倒空间体积偏小,必须先转换为体积最小的初基原胞(Primitive Cell)。 以空间群 No. 12(:m:,布拉维晶格
,唯一轴
)的化合物
为例,其惯用晶胞参数为:
(2.1)
按照 Setyawan-Curtarolo 标准晶体学约定,底心单斜晶系的正空间初基基矢
在正交笛卡尔坐标系
下表示为:
(2.2)
2.2 倒易基矢的笛卡尔坐标矩阵与空间方向
对式 (2.2) 求逆转置(略去全局缩放常数
),得到倒易原胞基矢在笛卡尔坐标系
下的分量矩阵:
(2.3)
由式 (2.3) 可直接导出布里渊区的空间取向与尺寸特征:
- 单斜镜面方位 :
与
的
分量均为零,故
平面(即
平面)是空间群 :m: 的对称镜面
;而
严格平行于二次旋转轴
。 - 各向异性长宽比 :由于正空间
(
),倒空间尺度反比于正空间晶格常数,导致沿
方向的宽度(
)约为沿
方向宽度(
)的 3.67 倍。 - MCLC1 拓扑构型判据 :对于底心单斜晶系(
),当晶格常数满足
时,第一布里渊区属于 MCLC1 拓扑亚类。代入式 (2.1) 参数得
,判据成立,其第一布里渊区是由 14 个布拉格面围成的凸十四面体(包含 2 个顶底面
、4 个镜面主斜面
以及 8 个侧向削角面
)。
3 高对称点的群论起源与解析坐标定义
3.1 波矢小群与两类高对称几何位点
设晶体点群为
(对于空间群 :m:,
)。对于倒空间任意波矢
,使其在相差一个整数倒格矢
意义下保持不变的点群操作集合构成波矢小群(Little Group of
):
(3.1)
第一布里渊区能带路径上的特殊点分为两类几何概念:
- 第一类:群论固定高对称位点(Wyckoff 特殊位置 / 布拉格面中心) 。当
时,空间反演操作满足
,波矢小群阶数高于邻域一般点,且群表示特征标強制要求能带在此处梯度法向为零(
)。此类点严格位于布拉格面正中心,其分数坐标恒为
或
,与具体晶格常数无关。 - 第二类:度规依赖的布里渊区交棱中点(几何拓扑角点) 。为了沿第一布里渊区外表面完整闭合地采样不可约布里渊区(IBZ)边界,路径必须在相邻两个布拉格反射面
与
的交界棱中点处转折。此类点同时满足两个布拉格平面方程,其分数坐标显式依赖于晶格常数
。
3.2 MCLC1 型布里渊区交棱高对称点的解析推导
对 MCLC1 构型,联立相邻布拉格平面方程
,可导出决定交棱中点
分数坐标的四个无量纲度规参数
:
(3.2)
(3.3)
(3.4)
特别地,点
与点
满足倒空间平移反演关系:
(3.5)
即二者在空间反演对称性(时间反演对称性)与倒格矢平移下能量本征值恒等,但在第一布里渊区表面占据两个截然不同的几何位置:
位于右侧
与
两面交棱中点,而
位于顶部
与
两面交棱中点。表 3.1 汇总了各高对称点的符号对照、解析坐标与数值坐标。
| VASPKIT 符号 | BCS (CDML) 符号 | SeeK-path 符号 | 解析分数坐标 ![]() |
数值坐标 |
第一布里渊区几何位点定义 |
|---|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
(0.00000, 0.00000, 0.00000) | 布里渊区体中心 |
![]() |
![]() |
![]() |
![]() |
(0.50000, 0.50000, 0.00000) | (1,1,0) 布拉格面中心 |
![]() |
![]() |
![]() |
![]() |
(0.00000, 0.00000, 0.50000) | (0,0,1) 顶面中心 |
![]() |
![]() |
![]() |
![]() |
(0.50000, 0.50000, 0.50000) | (1,1,1) 斜面中心 |
![]() |
![]() |
![]() |
![]() |
(0.50000, 0.00000, 0.00000) | (1,0,0) 削角侧面中心 |
![]() |
![]() |
![]() |
![]() |
(0.50000, 0.00000, 0.50000) | (1,0,1) 削角侧面中心 |
![]() |
镜面棱点 | ![]() |
![]() |
(0.67457, 0.67457, 0.36050) | (1,1,0) 与 (1,1,1) 交棱中点 |
![]() |
镜面棱点 | ![]() |
![]() |
(0.32543, 0.32543, 0.63950) | (0,0,1) 与 (1,1,1) 交棱中点 |
![]() |
线端点 |
![]() |
![]() |
(0.72639, 0.27361, 0.00000) | (1,1,0) 与 (1,0,0) 交棱中点 |
![]() |
线端点 |
![]() |
![]() |
(0.74926, 0.25074, 0.50000) | (1,1,1) 与 (1,0,1) 交棱中点 |
4 可DIY布里渊区图像绘制编辑器的核心算法与模块实现
4.1 物理右手系至 WebGL 渲染坐标系的保向映射与度规插值
物理文献与 SeeK-path 标准要求倒空间竖直向上方向为
,而 Three.js / WebGL 默认屏幕竖直轴为
。为保证右手系手性(Chirality)不变且
轴严格朝上,坐标映射矩阵定义为正交旋转变换(行列式
):
(4.1)
针对大长宽比晶胞在三维视图中过于扁平的问题,"几何饱满度滑块"(参数
)对晶格常数执行同伦线性插值:
(4.2)
在任意插值参数
下,程序实时调用式 (3.2)--(3.4) 重新计算
,确保当多面体形状连续变化时,所有棱中点高对称点始终零误差地锁定在动态生成的布拉格交棱中点上。
4.2 三维 Wigner-Seitz 多面体半空间切割算法(3D Sutherland-Hodgman Clipping)
布里渊区立体网格并非通过静态硬编码顶点生成,而是基于式 (1.6) 采用三维凸多面体半空间迭代裁切算法实时求解:
-
构建初始包围盒 :以原点为中心初始化边长为
的立方体,存储为 6 个有向凸四边形面列表。 -
生成并排序近邻倒格矢集合 :遍历整数网格
共 124 个倒格矢
,按模长平方
从小到大升序排列,优先使用最近的布拉格面进行裁切以快速收敛。 -
单平面有向边裁切与线性插值 :对于每个半空间平面
,遍历当前多面体每个面的顶点序列
。若相邻顶点
与
分处平面两侧(即
),则按有向距离比例计算精确交点:
(4.3) -
新截面极角排序与封盖(Cap Polygon Construction) :收集同一次平面切割产生的所有新交点
,去除距离小于阈值
的重复点。若有效交点数
,计算截面几何中心
,并在该布拉格平面内构造正交局部基底
,按极角
升序排列顶点,生成新布拉格多边形面并绑定密勒指数标签
。
4.3 密勒指数对称性分类与无高光马卡龙分面着色算法
在完成半空间切割后,每个保留下来的多边形面均携带产生该面的倒格矢密勒指数
。程序通过分类函数对晶面族进行自动归类着色:
- 当
时,判定为顶底面族
,赋予淡藕荷紫材质; - 当
时,判定为单斜镜面主斜面族
与
,赋予淡珊瑚粉材质; - 其余情形判定为侧向削角面族
与
,赋予淡豆沙绿材质。
表面三角化采用扇形剖分(Fan Triangulation:将
边形分解为以
为公共顶点的
个三角形),并使用不受光照角度干扰的 THREE.MeshBasicMaterial,同时显式设置 depthWrite: false,使正反两面半透明色块与背面棱线实现均匀无闪烁的混合叠加。
4.4 实体圆柱棱线、K-Path 管线与四元数旋转对齐算法
由于浏览器原生 WebGL 的 gl.LINES 线宽被底层驱动强制锁定为 1 像素,无法满足学术出版配图的线宽调节需求,编辑器将所有布里渊区棱线、K-Path 路径段及坐标轴全部实例化为三维参数化圆柱体(CylinderGeometry)与圆锥体(ConeGeometry) 。 给定空间任意两点
,记方向向量
,长度
,单位向量
。将默认沿
轴建模的圆柱体旋转对齐至
方向的单位四元数
由下式计算:
(4.4)
同时在多面体的每个唯一顶点处放置半径为
的同色球体关节(Sphere Joint),彻底消除多根圆柱棱线在顶点交汇处产生的几何楔形裂缝。
4.5 "红心黑圈"高对称点的反向外壳描边算法(Inverted Hull Method)
为在任意旋转视角下自动生成顶刊插图中高对称点的"纯色圆心 + 恒定宽度黑色描边外环"效果,程序在每个高对称点位置构建双层同心球体网格:
- 内层球体(红心) :半径为
,法线朝外(默认 THREE.FrontSide),填充珊瑚红无高光材质。 - 外层球体(黑圈) :半径为
,材质属性设为背面渲染模式(side: THREE.BackSide),填充纯黑材质。由于正面(朝向相机的一侧)被光栅化器剔除,而背面被内层红球遮挡,仅在球体视平面的切线轮廓边缘处露出宽度为
的完美黑色圆环。
4.6 三维至二维屏幕投影、拖拽微调与离屏高分辨率合成导出算法
高对称点与坐标轴的文字标签采用独立 HTML 图层叠加。每一帧渲染时,三维锚点坐标
经相机视图矩阵
与正交投影矩阵
变换至归一化设备坐标(NDC,
),再叠加用户鼠标拖拽产生的二维屏幕偏移量
:
(4.5)
点击"导出论文超清配图"时,程序创建尺寸为
的离屏 2D Canvas,先将 WebGL 帧缓冲区图像绘制到底层,再读取所有可见 DOM 标签的屏幕包围盒坐标与字体样式,调用原生 2D 矢量字体光栅化接口将文字与子图编号直接合成至同一张高分辨率 PNG 图像中。
| 编辑器功能模块 | 可调交互参数 | 底层几何/图形学实现算法 |
|---|---|---|
| 几何饱满度与朝向控制 | 饱满度滑块 、正交预设视角 |
晶格度规线性同伦插值 + Setyawan-Curtarolo 解析交点实时重算 + Z-up 正交矩阵 |
| 布里渊区三色分面系统 | 顶底/主面/削角三色拾色器、不透明度 | 3D Sutherland-Hodgman 半空间切割 + 密勒指数 对称性分类 + Flat Basic 渲染 |
| 布里渊区实体棱线 | 棱线颜色、三维管径粗细滑块 | 无向边空间距离哈希去重 + 单位圆柱四元数旋转对齐 + 顶点球形圆角焊接 |
| 自由搭配能带 K-Path | 路径语法表达式、逐段勾选/反转/增删 | 字符串词法解析器(` |
| 穿出式坐标轴系统 | RGB / 倒格矢 切换 |
中心射线穿出式圆柱轴杆 + 末端圆锥箭头 + 轴端延长线标签锚点绑定 |
| 红心黑圈高对称点与标签 | 球半径、黑圈粗细比 、标签鼠标拖拽 |
THREE.BackSide 反向法线外壳描边算法 + NDC 屏幕投影叠加二维拖拽偏移量 |
5 AI 复现生成提示词(Prompt 模板)
将以下结构化提示词直接输入至支持前端代码生成的大语言模型中(可根据目标材料替换提示词中的晶格常数与 KPOINTS 路径),即可完整复现该"可DIY布里渊区图像绘制编辑器"单文件 HTML 程序:
请编写一个单文件、零外部配置即可在浏览器直接运行的完整 HTML 程序(使用 Three.js r128 与 OrbitControls),实现"可DIY论文级第一布里渊区(Brillouin Zone)与能带路径(K-Path)三维可视化编辑器"。 【一、目标晶体结构与 K-Path 输入数据】 1. 晶体信息:ScCuSe2,底心单斜晶系(Bravais Lattice: mC,空间群 C2/m,No. 12,唯一轴 b)。 2. 惯用晶胞常数:a = 14.339 Å, b = 3.908 Å, c = 6.748 Å, α = 90°, β = 117.15°, γ = 90°(满足 b < a*sin(β),属于 MCLC1 型十四面体第一布里渊区)。 3. 高对称点分数坐标(基于 Setyawan-Curtarolo / VASPKIT MCLC1 原胞倒易基矢 b1, b2, b3): - GAMMA (Γ): (0.00000, 0.00000, 0.00000) - Y: (0.50000, 0.50000, 0.00000) - F: (0.67457, 0.67457, 0.36050) - L: (0.50000, 0.50000, 0.50000) - F1: (0.32543, 0.32543, 0.63950) 注:与 F 互为 G_111 平移反演对称点,位于顶部 (001)/(111) 交棱中点 - Z: (0.00000, 0.00000, 0.50000) - I: (0.74926, 0.25074, 0.50000) - X: (0.72639, 0.27361, 0.00000) - N: (0.50000, 0.00000, 0.00000) - M: (0.50000, 0.00000, 0.50000) 【二、核心数学与几何算法要求】 1. 坐标系与倒易基矢: - 物理倒易基矢(略去 2π):b1 = (1/a, -1/b, cosβ/(a*sinβ)), b2 = (1/a, 1/b, cosβ/(a*sinβ)), b3 = (0, 0, 1/(c*sinβ))。 - 严格采用 Z-up 物理右手系映射至 Three.js 世界坐标:(kx, ky, kz) -> (kx, kz, -ky),确保 kz (b3, Z点) 严格竖直向上。 - 默认使用正交相机(OrthographicCamera)消除透视畸变,背景为纯白色 (#FFFFFF)。 2. 几何饱满度连续插值滑块(t ∈ 0, 1): - 在真实极端长宽比晶格参数 (a=14.339, b=3.908, c=6.748, β=117.15°) 与饱满宝石比例参数 (a=7.50, b=5.60, c=5.80, β=110.0°) 之间线性插值。 - 当滑块变化时,实时使用 Setyawan-Curtarolo MCLC1 解析公式重算 η, ψ, ζ, φ 及 F, F1, X, I 的精确分数坐标,确保高对称点 100% 落在动态布里渊区的面心与棱中点上。 3. 3D Sutherland-Hodgman 半空间多面体切割算法: - 遍历 h, k, l ∈ {-2, -1, 0, 1, 2} \ {(0,0,0)} 共 124 个倒格矢 G_hkl,按 |G_hkl|^2 升序排列。 - 用半空间平面 k · G_hkl <= 0.5 * |G_hkl|^2 对初始立方体进行迭代裁切、极角排序封盖,并为每个生成的布拉格面保留其密勒指数 (h, k, l)。 【三、顶刊视觉风格与全方位自定义控制面板】 1. 马卡龙三色分面半透明渲染: - 根据每个面的 (h,k,l) 自动分为三组:顶底面 (h=0,k=0,默认淡藕荷紫 #e6dcf2)、主斜面 (|h|=|k|!=0,默认淡珊瑚粉 #fde0dc)、侧向削角面 (其余,默认淡豆沙绿 #e8f0d8)。 - 使用无高光 MeshBasicMaterial (depthWrite: false),提供开关、三个独立颜色拾取器及不透明度滑块。 2. 3D 实体圆柱棱线: - 对多面体边去重后使用 CylinderGeometry 渲染棱线(默认深石板蓝 #3d526b),顶点处添加同色球形关节消除接缝,提供开关、颜色与粗细滑块。 3. 自由搭配 K-Path 编辑器: - 使用 CylinderGeometry 渲染路径线(默认皇家蓝 #2b2eff),可选配 ConeGeometry 方向箭头。 - 提供预设路径下拉框(含参考图风格 `GAMMA-Z-F1 | GAMMA-Y-F-L-I-M-N-X-GAMMA | Y-X`、完整闭合外框路径、VASPKIT 原始路径)。 - 提供自由路径文本输入框(支持 `-` 连接与 `|` 分段)以及逐段勾选显示、一键反转方向、删除和添加任意两点连线的交互列表。 4. 穿出式坐标轴系统: - 支持切换显示"红x / 绿y / 蓝z 直角坐标轴"与"b1, b2, b3 倒易基矢轴",提供轴长与轴粗细滑块。 5. "红心黑圈"高对称点与可拖拽文字标签: - 每个高对称点采用内层珊瑚红球体 (#de5246) + 外层同心 `side: THREE.BackSide` 纯黑球体实现反向外壳描边(Inverted Hull Outline),提供球大小与黑圈粗细比滑块。 - 所有高对称点字母、坐标轴标签及左上角 `(b)` 子图编号均支持鼠标左键直接拖拽调整位置。 6. 一键导出超清 PNG 论文配图: - 右上角提供"隐藏/显示控制面板"与"导出论文超清配图 (PNG)"按钮(支持透明背景选项),将 3D WebGL 画面与所有拖拽后的文字标签、子图编号离屏合成为高分辨率 PNG 自动下载。