2017-06-01 2 views
2

J'ai écrit un code pour créer un film de points en mouvement. J'ai utilisé la dispersion pour rendre les points colorés (la couleur des points dépend de la densité des points de la zone). x et y sont position des points et je mets ci-dessous le code dans une boucle pour le temps qui passe:Scatter ne fonctionne pas correctement Matlab

figure(h1); % set figure 1 as current figure 
cla 
dens = zeros(size(x)); 
% Tolerence is distance betweeen points (squared) 
tol = 1; 
for ii = 1:numel(x) 
    % Loop through all points, count neighbours within tolerence 
    dens(ii) = sum((x - x(ii)).^2 + (y - y(ii)).^2 < tol); 
end 
% Normalise density onto range 0-1 
dens = (dens/max(dens)); 
hold on 
scatter(x,y, [], dens,'filled','d') 
drawnow 
currFrame = getframe; 
writeVideo(vidObj,currFrame); 

Quand je lance le code, le film est créé, mais tous les points sont verts. Quelqu'un pourrait-il deviner quelle est la raison et comment le résoudre?

+0

Le quatrième argument est supposé être une matrice à trois colonnes de 'double' où chaque ligne est un tuple RVB avec chaque élément étant' [0,1] '. Est-ce la même chose pour votre tableau 'dens'? – rayryeng

+0

J'essaie ça mais ça n'a rien changé: figure (h1); cla dens = zéros (taille (x)); % La tolérance est la distance entre les points (au carré) tol = 1; pour ii = 1: numel (x) % Boucle dans tous les points, compte les voisins dans la tolérance tanières (ii) = somme ((x - x (ii)).^2 + (y - y (ii)) .^2

+0

Il devient correct en changeant tol à 100 @EBH –

Répondre

0

Votre calcul dens dépend de la relation entre les valeurs de x et y, et la valeur de tol. Si tol est trop grand, alors tous les points ont compté comme "dans la région" de tous les autres points, si c'est trop petit, alors tous les points sont "seuls". Dans les deux cas, dens a les mêmes valeurs pour tous les points et scatter les colorie tous en vert.