FDTD 仿真驱动的金三八面体纳米颗粒参数化建模与光学特性研究

1 引言——金三八面体纳米颗粒

形状工程是贵金属纳米晶体设计中的核心策略。与传统的凸面、低折射率刻面(如球体、立方体、双锥体)纳米晶体相比,由高折射率刻面包围的凹面和树枝状纳米晶体,因其独特的光学和催化性能而受到广泛关注。

金三角化八面体纳米颗粒(Au-TOH NPs),作为一类具有高对称性的复杂多面体,正是在这一背景下脱颖而出。
Au-TOH NPs 由24个三角形高折射率刻面包围 [1]。这种结构具有以下显著优势:

  • 强烈的等离激元效应: 大量的尖端和边缘充当电场增强的“热点”(Hotspots),使得 Au-TOH NPs 具有极强的表面增强拉曼散射(SERS)活性,是痕量检测应用的绝佳候选者。
  • 高催化性能: 高折射率晶面富含低配位原子、台阶、边缘和扭结,这些位点赋予纳米结构优异的催化性能。

本文旨在为 Au-TOH NPs 的 FDTD 仿真提供一个精确的几何和数学模型蓝本,特别是探究其几何参数的可变调整对模型形态的影响,为后续的仿真优化奠定基础。

1.1 研究背景:高指数晶面纳米结构的重要性

金(Au)纳米颗粒因其优异的 局域表面等离激元共振 (LSPR) 特性,在 SERS 和催化等领域具有核心价值。高效的 SERS 增强依赖于尖锐结构产生的 热点(Hotspots) 。本研究聚焦于 高指数晶面(HIFs) 结构,它们具有高表面能,包含原子尺度的台阶和拐角,是增强电场集中的理想位点。

1.2 模型选择:三八面体 (Trisoctahedron) 的优势与目标设定

本研究选择 Trisoctahedron (TOH) 作为金纳米颗粒的模型对象,它精确暴露了 {hhl}\{hhl\} 类型的高指数晶面(如 {331}\{331\} 晶面)。通过建立参数化的 TOH 模型,系统地探索模型的尖锐度(由表面三角形的顶角 θ\theta 控制)对 LSPR 模式和热点分布的影响。


2 三角化八面体的晶体学描述

三角化八面体(Trisoctahedron,TOH)是一种高对称性的凸多面体,其晶体学特征为理解其物理性能提供了基础。

2.1 晶面类型与米勒指数的对应关系

TOH 是一个标准的 24 面体结构,由 24 个全等的等腰三角形面组成。这些面在晶体学中被定义为 高折射率刻面

TOH晶面米勒指数族:{hhl}\{hhl\},其中 h>l>0

  • 米勒指数定义: {hhl} 族通过晶体系统的对称操作,表示一组晶体学上等价的晶面族,这些晶面族通过对单个晶面应用晶体系统的所有对称操作而生成。

TOH 由 {hhl}\{hhl\} 晶面族限定,其中 {hhl}\{hhl\} 代表具有高表面能的台阶状晶面,下图是不同晶面指数的TOH [2]
img

确定晶面的米勒指数对于 TOH 纳米结构,有两种方法可以确定晶面的米勒指数。一种方法是沿<110> 方向投影 TOH 结构时测量投影角度。米勒指数与投影角度之间的关系遵循下表中的方程 [3]
img

2.2 高折射率刻面的物理与化学意义

高折射率刻面({hhl} 晶面)具有高表面能。其结构特点包括:

  • 原子排列: 晶面具有高密度的低配位原子、台阶、边缘和扭结 。
  • 催化活性: 这些高能位点使其成为极具吸引力的催化活性位点。

2.3 晶体形态与几何体的精确映射

几何名称 英文名称 面数 晶面族 纳米合成对应
三轴八面体 Trisoctahedron (TOH) 24 {hhl}\{hhl\} 最直接对应{331}\{331\} 晶面的纳米结构
三角化十二面体 Disdyakis Dodecahedron (DDO) 48 {hkl}\{hkl\} 对应更复杂的高指数面,常与 TOH 混

2.4 形态控制与合成基础

Au-TOH NPs 可通过种子介导生长法合成 ,并能实现对尺寸(例如 60 nm 到 255 nm)和暴露刻面的精确控制。控制 Au3+Au^{3+}/抗坏血酸 (AA) 的摩尔比,以及表面活性剂如 CTAC 的浓度,是形成特定高指数 {hhl} 晶面的关键因素。

3 三角化八面体的几何构造与拓扑表示

TOH的构造建立在正八面体之上,在其 8 个三角形面上加盖一个等腰三角形金字塔(Kleetope 操作)。金字塔的高度(由参数 kk 控制)决定了模型的尖锐度。TOH 的几何和拓扑结构与其对偶体 截角立方体tC)紧密相关。

3.1 拓扑结构与对偶关系

TOH 属于卡塔兰立体,是 截角立方体tC)的 对偶多面体

元素 TOH(三角化八面体) 截角立方体 (tC) 拓扑对应关系
顶点 (V) 14 24 TOH顶点↔tC面
棱 (E) 36 36 TOH棱↔tC棱
面 (F) 24 14 (8×三角形+6×八边形) TOH面↔tC顶点

TOH 的欧拉示性数 (χ) 满足:

χ=VE+F=1436+24=2χ=V−E+F=14−36+24=2

3.2 顶点分类与几何构造

TOH 的构造可以视为对正八面体的 8 个面各添加一个三角锥。其 14 个顶点可分为两组:

  1. 6个8阶顶点: 对应于原始正八面体的顶点,每个顶点汇聚 8 条棱和 8 个面。
  2. 8个3阶顶点: 对应于新增的锥顶点,每个顶点汇聚 3 条棱和 3 个面。

3.3 其他三角化八面体 [4]

img

4 三角化八面体的数学描述初探

精确的数学公式是 FDTD 仿真建模的基础,它确定了纳米颗粒的尺寸、形状和方向。我们以模型的 14 个顶点坐标(λk)和顶θ 为蓝本,构建所有几何参数的公式。

前提符号定义:

  • VλV_{\lambda}: 原始八面体顶点,坐标 (λ,0,0)(\lambda, 0, 0)
  • VkV_{k}: 新增金字塔顶点,坐标 (k,k,k)(k, k, k)
  • ss: 原始八面体的棱长,是等腰三角形的底边长。
  • λ\lambda: VλV_{\lambda} 的轴向坐标。
  • kk: VkV_{k} 的坐标参数。
  • s2s_2(或 aa):等腰三角形的腰长(TOH 的长棱)。
  • s1s_1: 等腰三角形的底边长(TOH 的短棱)。

4.1 顶点坐标的规范化与结构

Trisoctahedron 的 14 个顶点坐标可归纳为八面体型 (±λ,0,0)(\pm \lambda, 0, 0) 和立方体型 (±k,±k,±k)(\pm k, \pm k, \pm k) 两种形式。

【Canonical 坐标集】 截角立方体棱长为 1 时,TOH 顶点坐标为:

  • 6个8阶顶点 (八面体型): (±(1+2),0,0)\left(\pm (1+\sqrt{2}), 0, 0\right) 及其排列
  • 8个3阶顶点 (锥/立方体型): (±1,±1,±1)\left(\pm 1, \pm 1, \pm 1\right)

4.2 棱长(Edge Lengths)与比例

模型的几何形状由几条关键棱长决定:原始八面体的棱长 ss,短棱 s1s_1(等腰三角形的底边)和长棱 s2s_2(等腰三角形的腰)。

  • 棱长ss):原始八面体的棱长:

    s2=λ2+λ2s^2 = \lambda^2 + \lambda^2

    s=λ2\mathbf{s = \lambda\sqrt{2}}

  • 短棱s1s_1):短棱 s1s_1 连接两个相邻的新增顶点 Vk1=(k,k,k)V_{k1}=(k, k, k)Vk2=(k,k,k)V_{k2}=(k, k, -k),根据空间两点距离公式:

    s12=(kk)2+(kk)2+(k(k))2s_1^2 = (k-k)^2 + (k-k)^2 + (k-(-k))^2

    s12=0+0+(2k)2s_1^2 = 0 + 0 + (2k)^2

    s1=2k\mathbf{s_1 = 2k}

  • 长棱s2s_2):长棱 s2s_2 连接八面体顶点 Vλ=(λ,0,0)V_{\lambda} = (\lambda, 0, 0) 与新增顶点 Vk=(k,k,k)V_{k} = (k, k, k)。根据空间距离公式,其平方 s22s_2^2 建立了 λ\lambdakk 之间的核心约束关系:

    s22=(λk)2+(0k)2+(0k)2s_2^2 = (\lambda-k)^2 + (0-k)^2 + (0-k)^2

    s22=3k22λk+λ2\mathbf{s_2^2 = 3k^2 - 2\lambda k + \lambda^2}

4.3 面内角和二面角

TOH 的 24 个面是全等的等腰三角形,面内角完全由棱长 s1s_1s2s_2 决定,因此它们也是 λ\lambdakk 的函数。

  • 顶角 θobtuse\theta_{obtuse} 位于 VλV_{\lambda} 处,夹在两条长棱 s2s_2 之间。由余弦定理:

s12=s22+s222s22cos(θobtuse)s_1^2 = s_2^2 + s_2^2 - 2s_2^2 \cos(\theta_{obtuse})

cos(θobtuse)=2s22s122s22\cos(\theta_{obtuse}) = \frac{2s_2^2 - s_1^2}{2s_2^2}

cos(θobtuse)=1s122s22\mathbf{\cos(\theta_{obtuse}) = 1 - \frac{s_1^2}{2s_2^2}}

  • 底角 ϕacute\phi_{acute} 位于 VkV_k 处,夹在长棱 s2s_2 和短棱 s1s_1 之间。其角度 cos(ϕacute)\cos(\phi_{acute}) 同样由余弦定理确定:

s22=s12+s222s1s2cos(ϕacute)s_2^2 = s_1^2 + s_2^2 - 2s_1 s_2 \cos(\phi_{acute})

0=s122s1s2cos(ϕacute)0 = s_1^2 - 2s_1 s_2 \cos(\phi_{acute})

2s1s2cos(ϕacute)=s122s_1 s_2 \cos(\phi_{acute}) = s_1^2

cos(ϕacute)=s12s2\mathbf{\cos(\phi_{acute}) = \frac{s_1}{2s_2}}

  • 二面角 δ\delta 的计算必须依赖于两个相邻面 F1F_1F2F_2 的法向量 N1\vec{N}_1N2\vec{N}_2

    I. 确定相邻面的法向量

    我们考虑 TOH 上共享一条长棱 VλVkV_{\lambda}V_{k} 的两个相邻面 F1F_1F2F_2

    1. 确定面 F1F_1 的顶点

    λ=(λ,0,0)_{\lambda} = (\lambda, 0, 0)

    k1=(k,k,k)_{k1} = (k, k, k)

    k2=(k,k,k)_{k2} = (k, -k, k)

    1. 确定面 F2F_2 的顶点

    λ=(λ,0,0)_{\lambda} = (\lambda, 0, 0)

    k1=(k,k,k)_{k1} = (k, k, k)

    k3=(k,k,k)_{k3} = (k, k, -k)

    1. 计算 F1F_1 上的两个向量 u1\vec{u}_1v1\vec{v}_1

    vecu1=VλVk1=(kλ,k,k)vec{u}_1 = \vec{V_{\lambda}V_{k1}} = (k-\lambda, k, k)

    vecv1=VλVk2=(kλ,k,k)vec{v}_1 = \vec{V_{\lambda}V_{k2}} = (k-\lambda, -k, k)

    1. 计算 F1F_1 的法向量 N1\vec{N}_1

    vecN1=u1×v1=((k)(k)(k)(k),(k)(kλ)(k)(kλ),(kλ)(k)(k)(kλ))vec{N}_1 = \vec{u}_1 \times \vec{v}_1 = \left( (k)(k) - (k)(-k), \quad (k)(k-\lambda) - (k)(k-\lambda), \quad (k-\lambda)(-k) - (k)(k-\lambda) \right)

    vecN1=(k2(k2),0,k(kλ)k(kλ))vec{N}_1 = \left( k^2 - (-k^2), \quad 0, \quad -k(k-\lambda) - k(k-\lambda) \right)

    mathbfN1=(2k2,0,2k(kλ))mathbf{\vec{N}_1 = (2k^2, \quad 0, \quad -2k(k-\lambda))}

    1. 计算 F2F_2 的法向量 N2\vec{N}_2

    vecu2=VλVk1=(kλ,k,k)vec{u}_2 = \vec{V_{\lambda}V_{k1}} = (k-\lambda, k, k)

    vecv2=VλVk3=(kλ,k,k)vec{v}_2 = \vec{V_{\lambda}V_{k3}} = (k-\lambda, k, -k)

    vecN2=u2×v2=((k)(k)(k)(k),(k)(kλ)(k)(kλ),(kλ)(k)(k)(kλ))vec{N}_2 = \vec{u}_2 \times \vec{v}_2 = \left( (k)(-k) - (k)(k), \quad (k)(k-\lambda) - (-k)(k-\lambda), \quad (k-\lambda)(k) - (k)(k-\lambda) \right)

    vecN2=(k2k2,2k(kλ),0)vec{N}_2 = \left( -k^2 - k^2, \quad 2k(k-\lambda), \quad 0 \right)

    mathbfN2=(2k2,2k(kλ),0)mathbf{\vec{N}_2 = (-2k^2, \quad 2k(k-\lambda), \quad 0)}

    II. 二面角 δ\delta 的通用公式

    二面角 δ\delta 是两个法向量夹角 α\alpha 的补角,cos(δ)=cos(α)\cos(\delta) = -\cos(\alpha)

    mathbfcos(δ)=N1N2N1N2mathbf{\cos(\delta)} = - \frac{\vec{N}_1 \cdot \vec{N}_2}{||\vec{N}_1|| \cdot ||\vec{N}_2||}

    1. 计算法向量点积 N1N2\vec{N}_1 \cdot \vec{N}_2

    vecN1N2=(2k2)(2k2)+(0)(2k(kλ))+(2k(kλ))(0)vec{N}_1 \cdot \vec{N}_2 = (2k^2)(-2k^2) + (0)(2k(k-\lambda)) + (-2k(k-\lambda))(0)

    mathbfN1N2=4k4mathbf{\vec{N}_1 \cdot \vec{N}_2 = -4k^4}

    1. 计算法向量模长 N1||\vec{N}_1||N2||\vec{N}_2||

    N12=(2k2)2+0+(2k(kλ))2|\vec{N}_1||^2 = (2k^2)^2 + 0 + (-2k(k-\lambda))^2

    N12=4k4+4k2(kλ)2|\vec{N}_1||^2 = 4k^4 + 4k^2(k-\lambda)^2

    N22=(2k2)2+(2k(kλ))2+0|\vec{N}_2||^2 = (-2k^2)^2 + (2k(k-\lambda))^2 + 0

    N22=4k4+4k2(kλ)2|\vec{N}_2||^2 = 4k^4 + 4k^2(k-\lambda)^2

    由于对称性, N1=N2=4k4+4k2(kλ)2||\vec{N}_1|| = ||\vec{N}_2|| = \sqrt{4k^4 + 4k^2(k-\lambda)^2}$

    1. 代入 cos(δ)\cos(\delta) 公式

    cos(δ)=4k44k4+4k2(kλ)2cos(\delta) = - \frac{-4k^4}{4k^4 + 4k^2(k-\lambda)^2}

    mathbfcos(δ)=k2k2+(kλ)2mathbf{\cos(\delta) = \frac{k^2}{k^2 + (k-\lambda)^2}}

4.4 面积与体积

4.4.1 单面面积 AfA_f

三角形面积 Af=12s1hA_f = \frac{1}{2} \cdot s_1 \cdot h,其中 hh 是高。

h2=s22(s12)2h^2 = s_2^2 - \left(\frac{s_1}{2}\right)^2

Af=12s1s22s124A_f = \frac{1}{2} s_1 \sqrt{s_2^2 - \frac{s_1^2}{4}}

Af=14s14s22s12A_f = \frac{1}{4} s_1 \sqrt{4s_2^2 - s_1^2}

s1=2ks_1=2ks22=3k22λk+λ2s_2^2=3k^2-2\lambda k+\lambda^2 代入:

Af=k8k28λk+4λ2\mathbf{A_f = k \sqrt{8k^2 - 8\lambda k + 4\lambda^2}}

4.4.2 总表面积 AA

总表面积 AA 是 24 个全等等腰三角形的面积总和,最终的总表面积公式为:

A=24k8k28λk+4λ2\mathbf{A = 24k \sqrt{8k^2 - 8\lambda k + 4\lambda^2}}

4.4.3 体积 VV

体积 VV 可以视为由原始八面体体积 VoctV_{oct} 加上 8 个金字塔帽体积 VcapV_{cap} 构成。

V=Voct+8VcapV = V_{oct} + 8 \cdot V_{cap}

V=43λ3+8VcapV = \frac{4}{3}\lambda^3 + 8 \cdot V_{cap}

进一步推导可以采取两种办法:

4.4.3.1 金字塔体积法

由于 VcapV_{cap} 的高度 hcaph_{cap} 复杂,总体积 VV 是 24 个全等金字塔(四面体)的体积总和,更简洁的几何约束关系是:

V=24VpyramidV = 24 \cdot V_{pyramid}

其中 VpyramidV_{pyramid} 是一个以原点为顶点,以 AfA_f 为底的棱锥体积 13AfRinscribed\frac{1}{3} A_f \cdot R_{inscribed},其中 RinscribedR_{inscribed} 是内切圆半径(原点到面的垂直距离)。

V=24×Vpyramid=24×13AfRinscribedV = 24 \times V_{\text{pyramid}} = 24 \times \frac{1}{3} A_f \cdot R_{\text{inscribed}}

V=8AfRinscribed\mathbf{V = 8 \cdot A_f \cdot R_{\text{inscribed}}}

RinscribedR_{\text{inscribed}} 是原点 (0,0,0)(0, 0, 0) 到面平面 Ax+By+CzDplane=0Ax + By + Cz - D_{\text{plane}} = 0 的垂直距离。

使用我们4.5节推导出的第一象限简化面平面方程:

kx+(λk)z=kλ\mathbf{kx + (\lambda - k)z = k\lambda}

对应于标准形式的系数:

A=k,B=0,C=λk,Dplane=kλA = k, \quad B = 0, \quad C = \lambda - k, \quad D_{\text{plane}} = k\lambda

将原点 (0,0,0)(0, 0, 0) 代入距离公式:

Rinscribed=A(0)+B(0)+C(0)kλA2+B2+C2R_{\text{inscribed}} = \frac{|A(0) + B(0) + C(0) - k\lambda|}{\sqrt{A^2 + B^2 + C^2}}

Rinscribed=kλk2+02+(λk)2R_{\text{inscribed}} = \frac{|-k\lambda|}{\sqrt{k^2 + 0^2 + (\lambda - k)^2}}

Rinscribed=kλ2k22λk+λ2\mathbf{R_{\text{inscribed}} = \frac{k\lambda}{\sqrt{2k^2 - 2\lambda k + \lambda^2}}}

单面面积 AfA_f 的公式:

Af=k2k22λk+λ2\mathbf{A_f = k \sqrt{2k^2 - 2\lambda k + \lambda^2}}

AfA_fRinscribedR_{\text{inscribed}} 代入 V=8AfRinscribedV = 8 \cdot A_f \cdot R_{\text{inscribed}}

V=8(k2k22λk+λ2)(kλ2k22λk+λ2)V = 8 \cdot \left( k \sqrt{2k^2 - 2\lambda k + \lambda^2} \right) \cdot \left( \frac{k\lambda}{\sqrt{2k^2 - 2\lambda k + \lambda^2}} \right)

由于分子和分母上的平方根项完全相同,可以抵消:

V=8kkλV = 8 \cdot k \cdot k\lambda

V=8λk2\mathbf{V = 8 \cdot \lambda k^2}

4.4.3.2 标量三重积法

或者采取另一种推导方式:三角化八面体(TOH)是一种中心对称多面体,它有 24 个面。因此,可以将整个 TOH 的体积 VV 分解为 24 个全等四面体(金字塔)的体积总和,每个四面体的顶点都是原点 O=(0,0,0)O=(0, 0, 0)

V=24×VtetrahedronV = 24 \times V_{\text{tetrahedron}}

第 1 步:确定四面体的顶点

我们选取一个位于第一象限的代表性三角形面 FF。这个面与原点 OO 共同构成一个四面体 TT。该四面体 TT 的四个顶点为:

  • 顶点 1 (原点): O=(0,0,0)O = (0, 0, 0)
  • 顶点 2 (八面体顶点): Vλ=(λ,0,0)V_{\lambda} = (\lambda, 0, 0)
  • 顶点 3 (新增顶点 1): Vk1=(k,k,k)V_{k1} = (k, k, k)
  • 顶点 4 (新增顶点 2): Vk2=(k,k,k)V_{k2} = (k, -k, k)

我们取三个顶点向量作为 v1,v2,v3\mathbf{v}_1, \mathbf{v}_2, \mathbf{v}_3

v1=Vλ=(λ,0,0)\mathbf{v}_1 = V_{\lambda} = (\lambda, 0, 0)

v2=Vk1=(k,k,k)\mathbf{v}_2 = V_{k1} = (k, k, k)

v3=Vk2=(k,k,k)\mathbf{v}_3 = V_{k2} = (k, -k, k)

第 2 步:计算向量叉积 v2×v3\mathbf{v}_2 \times \mathbf{v}_3

v2×v3=ijkkkkkkk\mathbf{v}_2 \times \mathbf{v}_3 = \begin{vmatrix} \mathbf{i} & \mathbf{j} & \mathbf{k} \\ k & k & k \\ k & -k & k \end{vmatrix}

v2×v3=i(k2(k2))j(k2k2)+k(k2k2)\mathbf{v}_2 \times \mathbf{v}_3 = \mathbf{i}(k^2 - (-k^2)) - \mathbf{j}(k^2 - k^2) + \mathbf{k}(-k^2 - k^2)

v2×v3=(2k2,0,2k2)\mathbf{v}_2 \times \mathbf{v}_3 = (2k^2, \quad 0, \quad -2k^2)

第 3 步:计算标量三重积 v1(v2×v3)\mathbf{v}_1 \cdot (\mathbf{v}_2 \times \mathbf{v}_3)

四面体体积公式中的标量三重积 v1(v2×v3)\mathbf{v}_1 \cdot (\mathbf{v}_2 \times \mathbf{v}_3)

v1(v2×v3)=(λ)(2k2)+(0)(0)+(0)(2k2)\mathbf{v}_1 \cdot (\mathbf{v}_2 \times \mathbf{v}_3) = (\lambda)(2k^2) + (0)(0) + (0)(-2k^2)

v1(v2×v3)=2λk2\mathbf{v}_1 \cdot (\mathbf{v}_2 \times \mathbf{v}_3) = 2\lambda k^2

第 4 步:计算单个四面体体积 VtetrahedronV_{\text{tetrahedron}}

四面体体积公式为 Vtetrahedron=16标量三重积V_{\text{tetrahedron}} = \frac{1}{6} | \text{标量三重积} |

Vtetrahedron=162λk2V_{\text{tetrahedron}} = \frac{1}{6} | 2\lambda k^2 |

由于 λ\lambdakk 都是正数:

Vtetrahedron=13λk2V_{\text{tetrahedron}} = \frac{1}{3} \lambda k^2

最终结果:TOH 总体积 VV

总体积 VV 是 24 个全等四面体体积的总和:

V=24×Vtetrahedron=24×13λk2V = 24 \times V_{\text{tetrahedron}} = 24 \times \frac{1}{3} \lambda k^2

V=8λk2\mathbf{V = 8 \cdot \lambda k^2}

4.5 面平面方程的精确代数表示

对于参数化三角化八面体(TOH),面平面方程 Ax+By+Cz=D\mathbf{Ax + By + Cz = D} 的系数 A,B,C,DA, B, C, D 必须是 λ\lambdakk 的函数。

I. 确定单个面

我们选取一个位于第一象限的三角形面 FF 进行推导,该面由以下三个顶点构成:

  1. 八面体顶点:

    Vλ=(λ,0,0)V_{\lambda} = (\lambda, 0, 0)

  2. 新增顶点 1:

    Vk1=(k,k,k)V_{k1} = (k, k, k)

  3. 新增顶点 2:

    Vk2=(k,k,k)V_{k2} = (k, -k, k)

II. 法向量 (A,B,C)(A, B, C) 的计算

法向量 N=(A,B,C)\vec{N} = (A, B, C) 垂直于平面 FF,由该平面上的两个向量 u\vec{u}v\vec{v} 的叉积给出:

u=VλVk1=(kλ,k,k)\vec{u} = \vec{V_{\lambda}V_{k1}} = (k-\lambda, k, k)

v=VλVk2=(kλ,k,k)\vec{v} = \vec{V_{\lambda}V_{k2}} = (k-\lambda, -k, k)

法向量 N\vec{N} 的分量 A,B,CA, B, Cu×v\vec{u} \times \vec{v} 的结果。我们在推导二面角时已经计算过:

N=u×v=(2k2,0,2k(kλ))\vec{N} = \vec{u} \times \vec{v} = \left( 2k^2, \quad 0, \quad -2k(k-\lambda) \right)

为了简化,我们可以除以公因式 2k2k(因为 kk 必须大于 0),得到一个简化的法向量 N\vec{N}':

N=(k,0,(kλ))\vec{N}' = \left( k, \quad 0, \quad -(k-\lambda) \right)

因此,平面方程的系数为:

A=k\mathbf{A = k}

B=0\mathbf{B = 0}

C=λk\mathbf{C = \lambda - k}

III. 平面常数 DD 的计算

平面常数 DD 可以通过将平面上的任意一个顶点坐标代入方程 Ax+By+Cz=DAx + By + Cz = D 来求得。我们代入八面体顶点 Vλ=(λ,0,0)V_{\lambda} = (\lambda, 0, 0)

D=A(λ)+B(0)+C(0)D = A(\lambda) + B(0) + C(0)

D=(k)(λ)+0+0D = (k)(\lambda) + 0 + 0

D=kλ\mathbf{D = k\lambda}

IV. 最终面平面方程(第一象限 xzxz 平面上的面)

A,B,C,DA, B, C, D 代入 Ax+By+Cz=DAx + By + Cz = D,我们得到第一象限的简化平面方程:

kx+(λk)z=kλ\mathbf{kx + (\lambda - k)z = k\lambda}


5 三角化八面体模型的可变调整

5.1 变量控制与数学映射

该模型通过调整表面三角形的顶角 θ\theta(默认设置为 9090^\circ),固定 s=2\mathbf{s=\sqrt{2}}(即 λ=1\lambda=1),实现了对关键几何参数 s2s_2(长棱)和 kk(顶点位置)的连续控制。

5.1.1 s2s_2(长棱)的计算:

为了实现模型的可变性,长棱 s2s_2 必须通过等腰三角形的顶角 θ\theta 来控制。根据余弦定理,腰长 s2s_2、底边 ss 和顶角 θ\theta 之间满足关系 s2=2s22(1cosθ)s^2 = 2s_2^2 (1 - \cos\theta)。由于原始八面体的棱长 ssλ\lambda 的关系为 s=λ2\mathbf{s = \lambda\sqrt{2}},因此 s2s_2θ\theta 的依赖关系可以表示为:

s2=λ22(1cosθ)\mathbf{s_{2} = \frac{\lambda\sqrt{2}}{\sqrt{2(1 - \cos\theta)}}}

5.1.2 顶点参数 (k)(\boldsymbol{k}) 的计算:

最后,通过对长棱 s22s_2^2 的约束公式进行代数反解,可以得到参数 kkλ\lambdas2s_2 的依赖关系。此公式是实现模型可变调整的核心计算公式:

k=λ+3s222λ23=1+3s2223\mathbf{k = \frac{\lambda + \sqrt{3s_2^2 - 2\lambda^2}}{3}} = \frac{1 + \sqrt{3s_2^2 - 2}}{3}

5.2 模型形态与尖锐度的量化控制

这种参数化设计使得 Au-TOH NPs 成为研究纳米光学中几何尖锐度对等离激元效应影响的理想系统。

  • θ\theta 增大 (θ>90\theta > 90^\circ): kk 减小,模型更平坦(降低凸起),探索 LSPR 模式的稳定性。
  • θ\theta 减小 (θ<90\theta < 90^\circ): kk 增大,模型更尖锐(增加凸起),增强尖端效应,最大化热点区域的电场强度。

6 模型构建与 FDTD 仿真实施

6.1 高精度几何模型构建(Blender Python 脚本)

建模过程在 Blender 的 Python API 环境中执行,旨在确保模型满足 FDTD 仿真对几何精度的严苛要求。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
import bpy
import numpy as np
import bmesh
import math
from mathutils import Vector

# --- 0. 清理场景与设置单位 ---

def setup_scene_and_clear():
# 清理场景中所有对象
if bpy.context.mode == 'EDIT':
bpy.ops.object.mode_set(mode='OBJECT')
bpy.ops.object.select_all(action='SELECT')
bpy.ops.object.delete(use_global=False)

# 设置 1 BU = 1 nm 约定,通过 MICROMETERS 实现
scene_units = bpy.context.scene.unit_settings
scene_units.length_unit = 'MICROMETERS'
# 1 BU = 0.001 μm = 1 nm
scene_units.scale_length = 0.001

print("场景已清理。单位已设置为 1 BU = 1 nm 约定。")

# --- 1. 几何参数定义 ---

NAME = "Gold_Triakis_Octahedron_Scaled"

# --- 2. 几何参数 (单位:纳米 nm) ---
R_TRI_OCT = 37.5 # 三棱八面体半径 (75 nm 直径的一半)
SCALE_FACTOR = 1.0 / 1000.0 # 统一缩小 1000 倍

# 目标直径:75 nm,应用 1/1000 缩放因子。
# 目标直径 (在 Blender Unit 中) = 75.0 nm * (1/1000) = 0.075 BU
TARGET_DIAMETER_BLENDER_UNITS = 2 * R_TRI_OCT * SCALE_FACTOR

# 原始模型的直径是 2.0 (从 -1 到 1)
ORIGINAL_DIAMETER = 2.0
THETA_DEGREES = 90.0

# --- 3. 几何体计算与预缩放 ---

def calculate_geometry(target_diameter, theta_degrees):

# 确保缩放因子正确计算
scale_factor = target_diameter / ORIGINAL_DIAMETER

# 几何计算
theta = math.radians(theta_degrees)
s = math.sqrt(2)
a = s / math.sqrt(2 * (1 - math.cos(theta)))

# 计算 k 值
discriminant = 3 * a ** 2 - 2
k = (1 + math.sqrt(discriminant)) / 3

# 生成未缩放的顶点列表
original_vertices_unscaled = np.array([
[1, 0, 0], [-1, 0, 0], [0, 1, 0], [0, -1, 0], [0, 0, 1], [0, 0, -1]
])

# 修复 signs 数组的生成逻辑
signs = np.array([(x, y, z) for x in (-1, 1) for y in (-1, 1) for z in (-1, 1)])

new_vertices_unscaled = k * signs

# 合并所有顶点并应用全局缩放 (坐标范围在 [ -0.0375, 0.0375 ] 内)
vertices_np = np.vstack([original_vertices_unscaled, new_vertices_unscaled]) * scale_factor
vertices = [tuple(v) for v in vertices_np.tolist()]

# 生成24个三角形面坐标 (使用缩放后的坐标)
face_coord_list = []
for vertex_unscaled in new_vertices_unscaled:
sign = np.sign(vertex_unscaled)

v_k = tuple(vertex_unscaled * scale_factor)
v_x = tuple(np.array([sign[0], 0, 0]) * scale_factor)
v_y = tuple(np.array([0, sign[1], 0]) * scale_factor)
v_z = tuple(np.array([0, 0, sign[2]]) * scale_factor)

face_coord_list.extend([(v_k, v_x, v_y), (v_k, v_x, v_z), (v_k, v_y, v_z)])

return vertices, face_coord_list

# --- 4. BMesh 创建、法线修复与后处理 ---

def create_triakis_octahedron_mesh(name, vertices, face_coord_list):
"""使用 BMesh 创建网格,并强制统一法线,以确保 FDTD 兼容性。"""

mesh_data = bpy.data.meshes.new(name + "_Mesh")
bm = bmesh.new()

# 1. 创建顶点映射
vert_map = {}
ROUND_PRECISION = 7 # 足够高的精度
for coord in vertices:
rounded_coord = tuple(round(c, ROUND_PRECISION) for c in coord)
v = bm.verts.new(rounded_coord)
vert_map[rounded_coord] = v
bm.verts.ensure_lookup_table()

# 2. 添加面
for f_coords in face_coord_list:
try:
rounded_coords = [tuple(round(c, ROUND_PRECISION) for c in coord) for coord in f_coords]
verts_to_use = [vert_map[coord] for coord in rounded_coords]
bm.faces.new(verts_to_use)
except:
pass

# 3. 强制法线修复 (FDTD 兼容性关键)
bmesh.ops.recalc_face_normals(bm, faces=bm.faces)

# 4. 写入网格数据
bm.to_mesh(mesh_data)
bm.free()

# 5. 创建对象并链接到场景
obj = bpy.data.objects.new(name, mesh_data)
bpy.context.collection.objects.link(obj)

# 6. 后处理和视图设置
bpy.context.view_layer.objects.active = obj
bpy.ops.object.select_all(action='DESELECT')
obj.select_set(True)
bpy.ops.object.shade_smooth()

# 7. 调整 3D 视图的剪裁距离和对焦
for area in bpy.context.screen.areas:
if area.type == 'VIEW_3D':
for space in area.spaces:
if space.type == 'VIEW_3D':
# 剪裁起始设为 1e-5 μm = 0.01 nm。适用于缩小后的 0.075 BU 模型。
space.clip_start = 1e-5

# 尝试对焦选中的对象
try:
override = {'area': area, 'region': [r for r in area.regions if r.type == 'WINDOW'][0]}
bpy.ops.view3d.view_selected(override, align_active=False)
except:
pass
break

# 输出验证
bpy.context.view_layer.update()

# 尺寸将显示为 0.075 μm (根据 1 BU = 1 nm 的约定)
print(f"\n模型 {name} 已创建并修复法线。")
print(f"Blender 尺寸显示: {obj.dimensions.x:.3f} μm (即 {TARGET_DIAMETER_BLENDER_UNITS:.3f} 个 Blender Unit)")

return obj


# --- 5. 主执行代码 ---

if __name__ == "__main__":
setup_scene_and_clear()

# 1. 计算几何数据
V, F_coords = calculate_geometry(TARGET_DIAMETER_BLENDER_UNITS, THETA_DEGREES)

if V and F_coords:
# 2. 创建并修复网格
final_object = create_triakis_octahedron_mesh(NAME, V, F_coords)


print("✅ 金24面体网格创建完毕。")
print("模型直径为 75 nm,并已按 FDTD 要求缩小 1000 倍。")
print("最终 FDTD 导入尺寸:0.075 nm。")
print("【FDTD 导出约定】请在 FDTD 软件中将 ‘1 个单位’ 视为 ‘1 纳米’。")

以下是建模效果:
img

A. 纳米尺度单位约定与缩放

  1. Blender 单位设置: 设置 Blender 场景单位为 MICROMETERS,长度比例因子为 0.001\mathbf{0.001}

    1 BU=0.001 μm=1 nm\mathbf{1 \text{ BU} = 0.001 \text{ μm}} = 1 \text{ nm}

  2. 几何缩放: 目标直径 D=75 nmD = \mathbf{75 \text{ nm}}。Python 脚本计算缩放因子,将原始直径为 2.0 BU2.0 \text{ BU} 的模型缩放至 0.075 BU\mathbf{0.075 \text{ BU}},精确对应 75 nm75 \text{ nm} 的物理尺寸。

B. 网格创建、法线修复与精度保证

在将模型导出为 STL 文件之前,脚本执行了以下关键的拓扑修复步骤,以确保 FDTD 软件能正确识别模型边界:

  1. 高精度舍入: 在创建和映射顶点时,采用高精度(例如 7 位小数)的四舍五入,消除浮点数误差,确保网格顶点闭合。
  2. 法线修复(FDTD 兼容性关键): 执行 bmesh.ops.recalc_face_normals 操作,强制统一所有面的法线方向(全部指向外部),这确保了网格的拓扑封闭性,是 FDTD 软件将其识别为一个实心(Solid)几何体。

6.2 FDTD 仿真参数与初步结果

将模型导入 FDTD Solutions 软件后的仿真设置,这里参考论文 [5]进行设置。
img

A. 仿真参数设置

参数类型 参数设置 物理意义/目标
模型 单个75 nm\mathbf{75 \text{ nm}} 金 Trisoctahedron 研究单个纳米颗粒的 LSPR 响应
材料 金(Au-Johnson and Christy ) 采用权威文献中的实验介电常数数据
环境 背景折射率n=1.33n=1.33 模拟水或生物介质环境
激发光源 λ=785 nm,\lambda = 785 \text{ nm}, z-z方向传输的平面波,偏振沿 xx 模拟 SERS 实验常用的近红外激发光
边界条件 x,yx, y 周期性边界(Periodic);zz 完美匹配层 (PML) 模拟无限阵列 (周期性) 和吸收边界 (PML)
网格精度 x,yx, y 方向 0.1 nm0.1 \text{ nm}zz 方向 1 nm1 \text{ nm} 高精度网格用于精确捕捉尖端附近的电场梯度

B. 初步仿真结果与分析

img
文章中电场强度计算结果(中心剖面 xOyxOy 视图)表明:

  • 显著增强: 金 Trisoctahedron 尖端附近产生了显著的局部电场增强(热点效应)。
  • 强度: 归一化电场强度最高可达 8\approx \mathbf{8}
  • 物理机制: 增强归因于尖端效应。在几何尖锐的顶点处,电荷高度聚集,产生集中在尖端的强电场。

文件资料

协力帮助

  • Gemini
  • deepseek

参考文献


  1. 易于合成具有可控尺寸和二面角的金面体纳米晶体 ↩︎

  2. {331}面面体金纳米晶体:合成、卓越的电催化性能和高效的SERS活性 ↩︎

  3. 快速简便地合成用于表面增强拉曼光谱和折射率传感的金三面体 ↩︎

  4. 三角化八面体-wiki ↩︎

  5. 基于金三八面体的致密组装实现光纤LSPR传感器 ↩︎