如何用Python选取石墨烯六角布里渊区k点周围的三角扇区?
在石墨烯六角布里渊区三角区域内生成随机k点
看起来你已经找对了三角形内随机点采样的核心方法,我来帮你把这个实现补全,顺便补充一些适配石墨烯布里渊区场景的细节~
你的trisample函数用的是均匀采样三角形内部点的经典算法,通过对随机数做平方根变换,避免了简单线性组合带来的采样点偏向顶点的问题,非常适合布里渊区k点的采样需求。下面是完整的可运行代码:
import random import numpy as np def trisample(A, B, C): # 生成两个0-1区间的随机数 r1 = random.random() r2 = random.random() # 平方根变换保证采样点在三角形内均匀分布 s1 = np.sqrt(r1) x = A[0] * (1.0 - s1) + B[0] * (1.0 - r2) * s1 + C[0] * r2 * s1 y = A[1] * (1.0 - s1) + B[1] * (1.0 - r2) * s1 + C[1] * r2 * s1 return (x, y) # 设置随机种子,确保采样结果可复现 random.seed(5) # 定义三角区域的三个顶点(这里可以替换为你实际需要的布里渊区k点坐标) # 示例坐标:你提供的初始值,实际使用时可换成围绕K/K'等高对称点的三角区域 A = (0.2, 0.1) B = (0.5, 0.1) C = (0.5, 0.0) # 生成指定数量的采样k点 num_points = 1000 points = [trisample(A, B, C) for _ in range(num_points)] # 可选:转换为numpy数组,方便后续能带计算等处理 points_np = np.array(points)
额外适配建议
- 布里渊区坐标转换:如果你的k点是基于石墨烯倒格矢定义的,比如标准倒格矢$b_1 = \frac{4\pi}{3a}(1, 0)$、$b_2 = \frac{4\pi}{3a}(\frac{1}{2}, \frac{\sqrt{3}}{2})$,直接把
A/B/C替换为倒空间中目标三角区域的顶点坐标即可,比如围绕K点的小三角区域。 - 采样结果验证:可以用matplotlib可视化采样点,确认是否均匀分布在三角区域内:
import matplotlib.pyplot as plt # 绘制三角顶点(红色标记) plt.scatter(*zip(A, B, C), c='crimson', s=60, label='Triangle Vertices') # 绘制采样的k点(半透明蓝色) plt.scatter(points_np[:,0], points_np[:,1], c='deepskyblue', s=8, alpha=0.6, label='Sampled k-points') plt.legend() plt.xlabel('$k_x$') plt.ylabel('$k_y$') plt.title('Random k-points in Graphene Brillouin Zone Triangle') plt.show()
内容的提问来源于stack exchange,提问作者Vaswati Biswas
相关产品推荐
相关产品推荐

