2015-04-26 3 views
0

Я пишу сценарий для построения следующих рисОптические решетки в MATLAB

enter image description here

Следующий код прекрасно работает и сюжет такой же формы, как и выше, без сфер.

clear all 
PS=zeros(100,100); 
A=2.4; 
B=3.4; 

for i=1:100 

    for j=1:100   
    PS(i,j) = cos((.1*i)*A)*cos((.1*j)*B); 
    end 
end 
surfc(PS) 

Мой вопрос: как построить эти сферы?

+0

Так @Adrian пытались ли вы мое предложение? –

+0

Спасибо Бенуа. Он работает нормально. просто нужно изменить 0,6 до 0,2 или меньше, чтобы изменить высоту для атмосферы/сфер. Я действительно ценю твою помощь. – Adrian

+0

Хорошо! Если это работает, можете ли вы пометить ответ как «принятый»? Вы можете нажать зеленую галочку рядом с ней. Благодаря! –

ответ

0

Построение атомов/сфер может быть выполнено довольно легко, если у вас есть координаты на вашей решетке, то есть вам нужно найти (как указано в статье в Википедии) потенциальные минимумы. Я предполагаю, что вы можете понять, что эта часть. Если нет, я неправильно понял ваш вопрос извините!

Для демонстрации я использую меньшую сетку с таким количеством атомов и использую scatter3, чтобы нарисовать сферы. Затем вы можете заменить мои приблизительные значения точными минимумами.

Вот весь код:

clear 
clc 
close all 

N = 30; 
PS=zeros(N,N); 
A=2.4; 
B=3.4; 

for i=1:N 

    for j=1:N 

     PS(i,j) = cos((.1*i)*A)*cos((.1*j)*B); 
    end 

end 

%// Approximate locations of the atoms. You can calculate this more 
%// accurately of course. 
xAtom = [1 10 10 19 28 28]; 
yAtom = [13 2 27 13 2 27]; 

%// Plot atoms at height of .6. 
zAtom = repmat(.6,1,numel(xAtom)); 

surfc(PS) 

hold on 

%// Scatter plot. You can customize the parameters. 
scatter3(xAtom,yAtom,zAtom,200,'k','filled') 

rotate3d on 

И выход:

enter image description here