如何在圆环表面绘制点格?

如何在圆环表面绘制点格?

我正在做一份关于伊辛模型的报告,不深入探讨该模型的复杂细节,它的二维形式涉及一个点格。

点格

当施加周期性边界条件时,可以将其看作是在环面上。

为了澄清起见,“周期性边界条件”的意思是,最右侧一列中某个点的右邻居是同一行最左侧一列中的某个点,而最底部一行中某个点的底部邻居是同一列最顶部一行中的某个点。

圆环

因此,我想要做的是在圆环上绘制一个网格,并在该网格上放置点。

我最终还想在圆环上放置从一个点到另一个点的箭头,就像我在这里对晶格所做的那样:

扫过格子

我只是在尝试将所有内容整合在一起时遇到了很多麻烦。如何使用 Tikz 实现这一点?如果不使用 Tikz,那么如何实现呢?

提前感谢您的任何回答或评论。

我对绘制圆环面做了大量研究:

还有一些其他的事情:

如果有帮助的话,这里是我在这篇文章中所绘制的图画的源代码:

\begin{tikzpicture}
    \clip (-1,-1) rectangle (6cm,6cm); 
    \draw[style=help lines,thick] (0,0) grid[step=.5cm] (5,5);

    \foreach \x in {0,1,...,10}
    {
        \foreach \y in {0,1,...,10}
        {
            \node[draw,circle,inner sep=2pt,fill] at (.5*\x,.5*\y) {};
        }
    }
\end{tikzpicture}

和...

\begin{tikzpicture}
    \clip (-1,-1) rectangle (6cm,6cm); 

    \foreach \x in {0,1,...,10}
    {
        \foreach \y in {10,9,...,0}
        {
            \node[draw,circle,inner sep=1pt,fill] at (.5*\x,.5*\y) {};
            \draw[thick,->] (.5*\x,.5*\y) -- (.5*\x+.4,.5*\y);
            \draw[thick,->] (.5*\x,.5*\y) -- (.5*\x,.5*\y-.4);
        }
    }
\end{tikzpicture}

我唯一的要求是不要建议使用非 LaTeX 应用程序(例如 InkScape、Blender 等)创建的图形。

答案1

在此处输入图片描述

编辑修复了一个错误(正如@Dror 指出的那样,外赤道中点计算不正确)。

MWE使用Asymptote,文件lattice.asy

size(200);
import graph3;

pen surfPen=rgb(1,0.7,0);
pen xarcPen=deepblue+0.7bp;
pen yarcPen=deepred+0.7bp;

currentprojection=perspective(5,4,4);

real R=2;
real a=1;

triple fs(pair t) {
  return ((R+a*Cos(t.y))*Cos(t.x),(R+a*Cos(t.y))*Sin(t.x),a*Sin(t.y));
}

surface s=surface(fs,(0,0),(360,360),8,8,Spline);
draw(s,surfPen,render(compression=Low,merge=true));

int m=20;
int n=10;
real arcFactor=0.85;

pair p,q,v;

for(int i=1;i<=n;++i){
  for(int j=0;j<m;++j){
    p=(j*360/m,(i%n)*360/n);
    q=(((j+arcFactor)%m)*360/m,i*360/n);
    v=(((j+arcFactor/2)%m)*360/m,i*360/n);
    draw(fs(p)..fs(v)..fs(q),xarcPen,Arrow3(size=4));
    q=(j*360/m,((i%n)-arcFactor)*360/n);
    draw(fs(p)..fs((p+q)/2)..fs(q),yarcPen,Arrow3(size=3));
    dot(fs(p));
  }
}

编译以asy -f pdf -noprc -render=4 lattice.asy获得独立的lattice.pdf

答案2

您是否正在考虑这样的事情?

\documentclass{standalone}
\usepackage{asymptote}

\begin{document}

\begin{asy}[width=10cm,height=10cm]
import graph3;
import three;

size3(200);
currentprojection=orthographic(3,3,5);
currentlight=light(gray(0.4),specularfactor=3,viewport=true,
           (-0.5,-0.25,0.45),(0.5,-0.5,0.5),(0.5,0.5,0.75));

int nb = 20, ns = 10;
real rb = 5.0, rs = 2.0;

triple torus(pair z) {

  return ((rb + rs*cos(2*pi*z.x/ns))*cos(2*pi*z.y/nb),
      (rb + rs*cos(2*pi*z.x/ns))*sin(2*pi*z.y/nb),
      rs*sin(2*pi*z.x/ns));

}

surface site = scale3(0.1)*unitsphere;

for(int k1=0; k1<ns; ++k1) {
  for(int k2=0; k2<nb; ++k2) {
    draw(surface(torus((k1,k2))--torus((k1+1,k2))--torus((k1+1,k2+1))--torus((k1,k2+1))--cycle),
     lightgray);
    draw(torus((k1,k2))--torus((k1+1,k2)),Arrow3);
    draw(torus((k1,k2))--torus((k1,k2+1)),Arrow3);
    draw(shift(torus((k1,k2)))*site,red);
  }
}
\end{asy}

\end{document}

在此处输入图片描述

它采用渐近线

相关内容