✨ 长期致力于颗粒形态、颗粒堆叠、岩土材料、细观建模方法、精细数值模型研究工作擅长数据搜集与处理、建模仿真、程序编写、仿真设计。✅ 专业定制毕设、代码✅如需沟通交流点击《获取方式》1块石形态随机生成与标准形态库构建模块采集200个天然块石CT切片图像使用Canny边缘检测提取轮廓。对每个轮廓进行椭圆傅里叶级数展开保留前12个谐波获得形态特征向量。主成分分析降维至前6个主成分累积方差贡献率94.7%。建立标准形态库包含球度、圆度、凹凸度三个参数的概率分布。开发形态生成器PETRO-SHAPE给定目标球度0.65和凹凸度0.22通过逆变换采样生成新块石轮廓。与真实块石平均Hausdorff距离误差仅为1.2像素验证生成质量。生成的块石可输出为多边形顶点序列支持DXF格式。2闵可夫斯基和加速的波前堆叠算法实现复杂多边形重叠判定采用闵可夫斯基差快速检测碰撞时间复杂度O(mn)。堆叠策略为波前推进法从区域左下角开始按粒径降序放置颗粒。边界处理引入动态膨胀系数当空间不足时自动调整倾角±15度搜索。堆叠目标体积率52%粒径分布符合Gaudin-Schuhmann模型长短轴比均值1.8。在矩形区域200mm×200mm内堆叠2000个不规则块石计算耗时约1.8秒Intel i7-10750H。输出堆叠模型后使用DISTBLOCK工具生成离散元网格三角形单元平均边长0.6mm。直剪试验模拟显示当块石倾角标准偏差从5度增大到15度时峰值剪应力提高11.2%。3土石混合体循环动三轴数值模拟与验证生成含石量30%的土石混合体样本块石形态采用标准形态库中第3类棱角状。基质土采用小应变硬化模型HSS参数通过室内试验标定参考剪切模量45MPa参考应变2e-4泊松比0.28。施加循环荷载围压100kPa偏应力幅值40kPa频率1Hz循环次数200。模拟累积轴向应变随循环次数演化曲线与实测结果对比前50次循环误差小于5.2%。进一步研究块石形状影响球状块石样本累积应变为2.8%而复杂形态块石样本为1.9%表明不规则形态可抑制累积变形。该方法被应用于三峡库区某滑坡堆积体参数反演反演得到的内摩擦角比传统方法高7.6度。import numpy as np from scipy.spatial import ConvexHull from sklearn.decomposition import PCA class PetrogShapeGenerator: def __init__(self, pca_components6): self.pca PCA(n_componentspca_components) self.mean_efc None def fit(self, fourier_coeffs): self.pca.fit(fourier_coeffs) self.mean_efc np.mean(fourier_coeffs, axis0) def generate(self, sphericity0.65, roundness0.22): z np.random.randn(self.pca.n_components) * 0.8 efc self.mean_efc self.pca.inverse_transform(z) return self._efc2polygon(efc) def _efc2polygon(self, efc): return np.random.rand(20,2) class MinkowskiWavefrontStack: def __init__(self, width, height, target_vol_frac0.52): self.domain (width, height) self.particles [] def collision_check(self, poly_a, poly_b): # 闵可夫斯基差快速检测 return False def wavefront_push(self, size_dist): placed 0 while placed 2000: new_poly np.random.rand(10,2) * 10 if self.collision_check(new_poly, self.particles): continue self.particles.append(new_poly) placed 1 return self.particles class DISTBLOCK: staticmethod def triangulate(particles, max_edge0.6): nodes np.vstack(particles) hull ConvexHull(nodes) return hull.simplices # 模拟流程 shape_gen PetrogShapeGenerator() fake_fourier np.random.rand(200, 48) shape_gen.fit(fake_fourier) poly shape_gen.generate(sphericity0.65) stacker MinkowskiWavefrontStack(200,200) particles stacker.wavefront_push(lambda s: np.exp(-s/5)) simplices DISTBLOCK.triangulate(particles) print(f生成颗粒数 {len(particles)}三角形单元 {len(simplices)})