MATLAB Answers


Plotting a 2D crystal lattice from two primitive lattice vectors

Asked by Jennifer Garrison on 7 Sep 2019
Latest activity Answered by John D'Errico
on 8 Sep 2019
I am trying generate a plot of a crystal lattice based on two prmitive lattice vectors:
v1= -0.5i + -sqrt(3)/2j
v2= 1i
where i and j are orhtogonal unit vecotors to represent the x and y directions.
I am not sure where to begin.


That is what you want?
It only needs to be 2D but yes. I basically need to define my own coordinate system that is not the standard cartesian one with those vectors and display the lattice points like you did.

Sign in to comment.


2 Answers

Answer by John D'Errico
on 8 Sep 2019
 Accepted Answer

First, you need to understand that MATLAB does not understand what you intend by this notation:
v1= -0.5i + -sqrt(3)/2j
Both i and j are sqrt(-1) in MATLAB. They are not distinct. Instead, just write them as vectors:
v1= [-0.5, -sqrt(3)/2];
v2= [1 , 0];
[x,y] = meshgrid(0:10,0:5);
xy = [x(:),y(:)];
T = [v1;v2];
xyt = xy*T;
xt = reshape(xyt(:,1),size(x));
yt = reshape(xyt(:,2),size(y));
hold on
axis equal
axis square


Sign in to comment.

Answer by Bjorn Gustavsson on 8 Sep 2019

If you do it stepwise it becomes "not too tricky":
e1 = [-0.5; -sqrt(3)/2]; % Your unit
e2 = [1; 0]; % vectors
[I1,I2] = meshgrid(-10:10,-8:8); % A 2-D set of points
r_crystal = [e1,e2]*[I1(:)';I2(:)']; % calculate r_c = n*e1 + m*e2 for all points
You can dood.e with how big crystal you want or what shape, but this should give you something.

  1 Comment

Thank you so much that's exactly what I needed!

Sign in to comment.