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

如何可视化Ising格点规范模型中键上的自旋?

二维Ising格点规范理论键上自旋的可视化方案(Python PIL实现)

二维Ising格点规范理论的自旋位于位点间的连接键上,分为水平键(相邻水平位点间)和垂直键(相邻垂直位点间)。对于N×N的位点网格,水平键数量为N×(N-1),垂直键数量为(N-1)×N,我们可以通过分别绘制这两类键来实现可视化。

核心思路

  1. 定义可视化参数:位点边长、键的宽度、自旋对应的颜色(比如+1用黑色,-1用白色)
  2. 计算画布尺寸:基于位点和键的尺寸,确保所有键和位点都能容纳
  3. 依次绘制水平键和垂直键,根据自旋值填充对应颜色(可选绘制位点作为参考)

代码实现

from PIL import Image, ImageDraw

# 1. 设置参数
N = 20  # 位点网格的大小(N×N)
site_size = 15  # 每个位点的边长(像素)
bond_width = 5  # 键的宽度(像素)
color_map = {1: (0, 0, 0), -1: (255, 255, 255)}  # 自旋对应的颜色:+1黑,-1白

# 2. 计算画布尺寸
canvas_width = N * site_size + (N - 1) * bond_width
canvas_height = N * site_size + (N - 1) * bond_width

# 创建空白画布(白色背景)
img = Image.new("RGB", (canvas_width, canvas_height), (255, 255, 255))
draw = ImageDraw.Draw(img)

# 3. 生成模拟的键自旋数据(可替换为你的真实数据)
# 水平键:horiz_bonds[i][j] 表示第i行、第j个水平键(连接位点(i,j)和(i,j+1))
horiz_bonds = [[1 if (i+j)%2 ==0 else -1 for j in range(N-1)] for i in range(N)]
# 垂直键:vert_bonds[i][j] 表示第i个垂直键、第j列(连接位点(i,j)和(i+1,j))
vert_bonds = [[-1 if (i+j)%2 ==0 else 1 for j in range(N)] for i in range(N-1)]

# 4. 绘制水平键
for i in range(N):
    for j in range(N-1):
        spin = horiz_bonds[i][j]
        # 计算水平键的位置:x起始为位点右侧,y起始为当前行位点的y坐标
        x_start = j * (site_size + bond_width) + site_size
        y_start = i * (site_size + bond_width)
        x_end = x_start + bond_width
        y_end = y_start + site_size
        draw.rectangle([x_start, y_start, x_end, y_end], fill=color_map[spin])

# 5. 绘制垂直键
for i in range(N-1):
    for j in range(N):
        spin = vert_bonds[i][j]
        # 计算垂直键的位置:x起始为当前列位点的x坐标,y起始为位点下方
        x_start = j * (site_size + bond_width)
        y_start = i * (site_size + bond_width) + site_size
        x_end = x_start + site_size
        y_end = y_start + bond_width
        draw.rectangle([x_start, y_start, x_end, y_end], fill=color_map[spin])

# 可选:绘制位点(灰色,作为参考)
for i in range(N):
    for j in range(N):
        x = j * (site_size + bond_width)
        y = i * (site_size + bond_width)
        draw.rectangle([x, y, x+site_size, y+site_size], fill=(200, 200, 200))

# 保存或显示图像
img.save("ising_gauge_bonds.png")
img.show()

调整与优化

  • 若不需要显示位点,可删除“绘制位点”的代码块,只保留键的绘制
  • 可以修改color_map使用其他颜色(比如红色/蓝色)区分自旋
  • 调整site_size和bond_width的比例,让键的显示更清晰(比如键宽设为位点边长的1/3)
  • 若你的自旋数据存储格式不同,只需调整horiz_bonds和vert_bonds的读取逻辑即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 09:05:18