You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中沿A[1]-B[0]轴平移分子B以增大与分子A的距离?

分子B沿指定轴平移的计算方法与Python实现

核心逻辑

要实现固定分子A、沿A[1]-B[0]轴移开B且保持B内部结构不变,本质是刚体平移——只需给B的所有原子加上同一个平移向量,关键是计算这个平移向量:

  • 确定方向与当前距离:取A的锚点P=A[1]、B的锚点Q=B[0],向量PQ=Q-P代表从A锚点指向B锚点的方向,当前距离为该向量的模长(你已算出约4.99)
  • 计算平移向量:设目标距离为d_target(如6、7、8),需增加的距离Δd=d_target-d_current;将PQ归一化为单位方向向量后,乘以Δd得到平移向量
  • 应用平移:给B的每个原子坐标加上平移向量,即可得到结构不变、锚点距离达标的新B坐标

Python代码实现

用NumPy处理向量运算更简洁高效:

import numpy as np

# 原始分子坐标
A = np.array([[-3.046233, -5.4e-05, 0.182027],
              [-2.084295, 5.1e-05, 0.033334],
              [-3.450141, 0.000367, -0.693385]])
B = np.array([[2.911769, 4.4e-05, -0.165016],
              [3.305155, 0.771695, 0.262288],
              [3.305, -0.772028, 0.261672]])

# 定义锚点
P = A[1]
Q = B[0]

# 计算当前锚点向量与距离
PQ = Q - P
d_current = np.linalg.norm(PQ)
print(f"当前锚点距离: {d_current:.2f}")

# 目标距离列表,可按需修改
target_distances = [6, 7, 8]

for d_target in target_distances:
    # 计算平移向量
    delta_d = d_target - d_current
    unit_dir = PQ / d_current
    translation_vec = delta_d * unit_dir
    
    # 平移B的所有原子
    B_translated = B + translation_vec
    
    # 验证结果
    new_distance = np.linalg.norm(B_translated[0] - P)
    print(f"\n目标距离: {d_target}")
    print(f"平移向量: {translation_vec}")
    print(f"平移后B坐标:\n{B_translated}")
    print(f"验证新距离: {new_distance:.2f}")

关键说明

  • 平移后B内部原子距离完全不变:所有原子同步平移,相对位置未发生任何改变
  • 若需向靠近A的方向平移,只需将目标距离设为小于4.99的值,代码会自动生成负方向的平移向量
  • NumPy数组的向量运算避免了手动循环,代码简洁且运算效率更高

内容的提问来源于stack exchange,提问作者Pro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 14:42:49