level 3
笛酱(๑❛ᴗ❛๑)
楼主
问题总结:给定几个点,绘制从原点到这几个点的垂直平分线,然后几个向量的垂直平分线相交围成的最小面积(三维情况下就是体积)的图形就是需要绘制的图形。如何能绘制出这个图形
背景:打算绘制一个布里渊区示意图;布里渊区图绘制方法:给定两个基矢量b1,b2;绘制所有G=n1*b1+n2*b2,其中n1,n2为整数,比如我们给定n从-10取值到10,一个晶格常数为1的简单格子的布里渊区就是{{-10pi,-10pi},{-10pi,-9pi},...,{-10pi,10pi},{-9pi,-10pi},{-9pi,-9pi},...,{-9pi,10pi},......,{10pi,10pi}}(不严谨但是不影响画图过程)。
第一布里渊区取从{0,0}点到上述格点的最短距离,也就是最近邻格点。绘制这个矢量的垂直平分线,最近邻格点的所有垂直平分线围成的最小面积就是第一布里渊区

第二布里渊区就是次近邻格点重复上述过程;
目前问题:
布里渊区的取值当然比较轻松,
Subscript[b, 1] = (2 \[Pi])/a {1, 0};
Subscript[b, 2] = (2 \[Pi])/a {0, 1};
Subscript[b, 1 t] = Table[n*Subscript[b, 1], {n, -10, 10}];
Subscript[b, 2 t] = Table[n*Subscript[b, 2], {n, -10, 10}];
Subscript[b, 1 t][[1]] + Subscript[b, 2 t][[1]];
input = Flatten[
Table[Subscript[b, 2 t][[j]] + Subscript[b, 1 t][[i]], {i, 1,
21}, {j, 1, 21}], 1];
这样可以得到所有布里渊区的格点的坐标。如果取n=10,则有441个格点。
接下来需要找到最近邻格点,我使用了For循环来找,因为如果直接求Norm,就会返回一个列表的模,我觉得这方面我不是很熟悉,我猜应该有更为简洁省力的方案。但是这个方法至少是可以找出来的。
我可以根据如上的方案找到最近邻、次近邻、次次近邻,.......的格点,绘制出他们的垂直平分线,首先我没有想明白这个垂直平分线该怎么绘制,因为我们需要让最近邻格点的垂直平分线互相相交,然后找到他们围成的最小面积。
2024年04月03日 05点04分
1
背景:打算绘制一个布里渊区示意图;布里渊区图绘制方法:给定两个基矢量b1,b2;绘制所有G=n1*b1+n2*b2,其中n1,n2为整数,比如我们给定n从-10取值到10,一个晶格常数为1的简单格子的布里渊区就是{{-10pi,-10pi},{-10pi,-9pi},...,{-10pi,10pi},{-9pi,-10pi},{-9pi,-9pi},...,{-9pi,10pi},......,{10pi,10pi}}(不严谨但是不影响画图过程)。
第一布里渊区取从{0,0}点到上述格点的最短距离,也就是最近邻格点。绘制这个矢量的垂直平分线,最近邻格点的所有垂直平分线围成的最小面积就是第一布里渊区

第二布里渊区就是次近邻格点重复上述过程;目前问题:
布里渊区的取值当然比较轻松,
Subscript[b, 1] = (2 \[Pi])/a {1, 0};
Subscript[b, 2] = (2 \[Pi])/a {0, 1};
Subscript[b, 1 t] = Table[n*Subscript[b, 1], {n, -10, 10}];
Subscript[b, 2 t] = Table[n*Subscript[b, 2], {n, -10, 10}];
Subscript[b, 1 t][[1]] + Subscript[b, 2 t][[1]];
input = Flatten[
Table[Subscript[b, 2 t][[j]] + Subscript[b, 1 t][[i]], {i, 1,
21}, {j, 1, 21}], 1];
这样可以得到所有布里渊区的格点的坐标。如果取n=10,则有441个格点。
接下来需要找到最近邻格点,我使用了For循环来找,因为如果直接求Norm,就会返回一个列表的模,我觉得这方面我不是很熟悉,我猜应该有更为简洁省力的方案。但是这个方法至少是可以找出来的。
我可以根据如上的方案找到最近邻、次近邻、次次近邻,.......的格点,绘制出他们的垂直平分线,首先我没有想明白这个垂直平分线该怎么绘制,因为我们需要让最近邻格点的垂直平分线互相相交,然后找到他们围成的最小面积。