J'essaie d'écrire une simulation qui va déplacer une source de lumière sur la surface d'un objet, à chaque étape mesurer l'intensité de la lumière réfléchie à la source de lumière.Intensité de surface pour une source de lumière en mouvement
Puis tracez l'intensité de chaque point de la surface. Avec chaque étape ajoutant à la première intrigue. Construisant ainsi une image de la topographie de surface.
Il est un peu brouillon si vous pouvez suggérer un moyen de ranger.
x = -10:0.25:10;
y = -10:0.25:10;
xlength=length(x);
ylength=length(y);
ymin=min(y);
ymax=max(y);
xmin=min(x);
xmax=max(x);
D=zeros(xlength);
[X,Y] = meshgrid(x,y);
z = 10-(X.^2)-(Y.^2)+5*sin(X);
rnd=rand(xlength);
c=randi(xlength);
d=randi(xlength);
s=1;
t=0;
for i=1:ylength
t=t+1;
for j=1:xlength
if s==c
if t==d
D(s,t)=z(s,t);
elseif t==d+1
D(s,t)=z(s,t);
elseif t==d+2
D(s,t)=z(s,t);
elseif t==d+3
D(s,t)=z(s,t);
elseif t==d+4
D(s,t)=z(s,t);
elseif t==d+5
D(s,t)=z(s,t);
else
D(s,t)=0;
end
elseif s==c+1
if t==d
D(s,t)=z(s,t);
elseif t==d+1
D(s,t)=z(s,t);
elseif t==d+2
D(s,t)=z(s,t);
elseif t==d+3
D(s,t)=z(s,t);
elseif t==d+4
D(s,t)=z(s,t);
elseif t==d+5
D(s,t)=z(s,t);
else
D(s,t)=0;
end
elseif s==c+2
if t==d
D(s,t)=z(s,t);
elseif t==d+1
D(s,t)=z(s,t);
elseif t==d+2
D(s,t)=z(s,t);
elseif t==d+3
D(s,t)=z(s,t);
elseif t==d+4
D(s,t)=z(s,t);
elseif t==d+5
D(s,t)=z(s,t);
else
D(s,t)=0;
end
elseif s==c+3
if t==d
D(s,t)=z(s,t);
elseif t==d+1
D(s,t)=z(s,t);
elseif t==d+2
D(s,t)=z(s,t);
elseif t==d+3
D(s,t)=z(s,t);
elseif t==d+4
D(s,t)=z(s,t);
elseif t==d+5
D(s,t)=z(s,t);
else
D(s,t)=0;
end
elseif s==(c+4)
if t==d
D(s,t)=z(s,t);
elseif t==d+1
D(s,t)=z(s,t);
elseif t==d+2
D(s,t)=z(s,t);
elseif t==d+3
D(s,t)=z(s,t);
elseif t==d+4
D(s,t)=z(s,t);
elseif t==d+5
D(s,t)=z(s,t);
else
D(s,t)=0;
end
else
D(s,t)=0;
end
s=s+1;
end
s=1;
end
z1=z -(D/20);
z2=z1-z;
s=0;
figure
surf(X,Y,z)
axis([xmin xmax ymin ymax])
xlabel('X')
ylabel('Y')
zlabel('Z')
for i=-10:2.5:10
hold on
light('position',[i,0,50])
surf(X,Y,z,'EdgeColor', 'none')
axis([xmin xmax ymin ymax])
drawnow
pause (1)
delete(findall(gcf,'Type','light'))
hold off
end
Ceci est aussi loin que je l'ai.
Il n'y a pas assez d'informations pour répondre (et quelle est la question exacte par le chemin?). Vous devez donner un échantillon minimal pour 'X',' Y' et 'z' afin que l'on puisse exécuter votre code. Vous devez également décrire plus ce qui ne fonctionne pas comme prévu dans votre code et ce qui devrait être la sortie désirée. – Hoki
Maintenant, le code fonctionne, merci. La question n'est toujours pas claire. Y a-t-il un problème avec la sortie? Ou voulez-vous juste "ranger"? Si plus tard vous pouvez commencer en supprimant toute la double boucle 'for' du haut où vous définissez' D, s, z1, z2, etc ... 'parce que vous ne les utiliserez jamais à l'écran plus tard. – Hoki
Cela pourrait être plus approprié sur [codereview.se]? – Dan