二维角度直方图中cos(θ)=0处出现高密度均匀条带的问题求助
各位同行好!我最近在做分子界面取向的模拟分析,遇到了一个百思不得其解的问题,想请教下大家的看法。
我的研究内容是:分析近似线性的分子相对于界面的取向随其与界面距离的变化。具体来说,我选取分子内两个原子的连线作为线性向量,计算它与界面法向量的夹角θ,计算方式是通过单位向量的点积得到cosθ。之后我绘制了二维直方图,x轴是分子到界面的距离,y轴是cosθ,用来统计不同cosθ区间的分子数分布。
我已经反复核对过角度计算的代码,确认逻辑没有问题,但在所有体系的结果里,都出现了一个共性的异常:cosθ=0的位置有一条密度显著偏高的均匀条带(没有渐变,就是一条清晰的带状区域),范围大概在cosθ=-0.04到0.04之间,就像图1展示的那样。
下面是我计算角度的核心代码片段:
def unit_vectors(vectors): norms = np.linalg.norm(vectors, axis=2) return vectors / np.expand_dims(norms, axis=2) def calculate_angles(vectors): dot_products = np.sum(unit_vectors(vectors) * reference, axis=2) return dot_products
最开始我猜测这是角度测量的对称性伪影:因为θ在0-180度之间,θ=90度的分子只会对应cosθ=0这一个点,但θ=45度和135度的分子(本质是同一取向,只是向量方向相反)会分别落在cosθ≈0.707和cosθ≈-0.707两个位置,这样理论上90度的分子数会是其他角度的两倍,这似乎能解释密度偏高的现象。但实际这条带的宽度有0.08左右,不是一个点,这就让我对这个猜想产生了怀疑。
另外我也了解三维空间中随机取向的分布遵循sinθ规律,但这个问题明显不同——这里是cosθ=0处有非常尖锐的密度峰值,而且即使我用sinθ对直方图做归一化处理,这条高密度条带依然没有消失。
有没有大佬遇到过类似的问题?或者能帮我分析下可能的原因?非常感谢大家的帮助!
备注:内容来源于stack exchange,提问作者H W

