2015-09-07 3 views
1

Мне нужно построить блок точек с малыми отклонениями от их состояний равновесия. Использование quiver это будет выглядеть следующим образом:Построение только конечной точки колчана

enter image description here

А теперь я хочу, чтобы построить только маркеры, расположенные на кончиках стрелок. Как это сделать?

Входные данные являются отклонениями U и V (на декартовых осях), получение координат X, Y векторного происхождения не является проблемой.

+2

Если вы знаете X, Y происхождение точки и U, V отклонения, то вы знаете, конечные точки, то не вы? Затем просто запишите их с помощью 'plot (x, y, '.')' –

+0

@AnderBiguri Но 'quiver' применяет масштаб к этим' U', 'V'. Вы должны включить эту шкалу, которая не известна априори –

+0

@ LuisMendo, но у колчана есть опция ввода «масштаба»! –

ответ

3

Вы не можете просто использовать что-то вроде plot(X+U, Y+V, 'o'), потому что quiver применяет автоматически вычисленной масштаб к U и V так, что все стрелки подходят хорошо на рисунке. Вы должны включить эту шкалу.

Глядя в код quiver «s и тиражирования той части, которая вычисляет эту шкалу, вы можете выполнить следующие действия:

%// Example data 
x = rand(1,20); 
y = rand(1,20); 
u = rand(1,20); 
v = rand(1,20); 

%// Taken from "quiver.m". Computes autoscale 
if min(size(x))==1, n=sqrt(numel(x)); m=n; else [m,n]=size(x); end 
delx = diff([min(x(:)) max(x(:))])/n; 
dely = diff([min(y(:)) max(y(:))])/m; 
del = delx.^2 + dely.^2; 
if del>0 
    len = sqrt((u.^2 + v.^2)/del); 
    maxlen = max(len(:)); 
else 
    maxlen = 0; 
end 
if maxlen>0 
    autoscale = 0.9/maxlen; 
else 
    autoscale = 0.9; 
end 

%// quiver plot 
quiver(x, y, u, v) 
hold on 

%// plot marker at arrow tips, including computed autoscale 
plot(x+autoscale*u, y+autoscale*v, 'o') 

Если указать масштабный аргумент к quiver, что аргумент является, что умножает фактор внутренне вычисленный масштаб. Таким образом, вы должны включать, что в plot, а также:

%// quiver plot including manual scale factor 
quiver(x, y, u, v, .5) 
hold on 

%// plot marker at arrow tips, including computed autoscale and manual scale 
plot(x+.5*autoscale*u, y+.5*autoscale*v, 'o') 

enter image description here

+0

Ницца! Я бы ограбил вас от этого ответа, если бы у меня был Matlab: P Good one –

+0

@AnderBiguri Спасибо :-) –

Смежные вопросы