С Новым годом! Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/64: Рейтинг темы: голосов - 64, средняя оценка - 4.95
5 / 5 / 1
Регистрация: 17.10.2015
Сообщений: 390

Вектор на графике

05.04.2019, 14:13. Показов 12403. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Давно хотел научиться отображать вектор на графике (стрелочку). Не так как это делает arrow, т.е. задавать не координаты от 0 до 1, а реальные точки на графике. Чтобы ничего не съезжало никогда. Знаю, есть функция перевода в координаты. Но это тоже не выход. Эта функция как я понимаю всегда должна находиться где-то рядом.
Недавно вышел ролик про вектора, не знаю, можно ли здесь привести ссылку, ну вот она: https://www.youtube.com/watch?v=U7r3OteyFng&t=113s
Там каким-то образом всё очень классно. Так вот объясните мне, это чудеса новой версии матлаб или что? На 2017 можно построить такую стрелку, написав нужную строчку?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.04.2019, 14:13
Ответы с готовыми решениями:

Как сделать так, чтобы на графике (лабиринт) рандомно строился вектор
Добрый день, у меня такой вопрос. Есть лабиринт, по которому должен ходить робот. Стенки этого лабиринта задал в матлабе в виде массива....

QCustomPlot. Позиция точки на нарисованном графике, выделение областей на графике
Доброго времени суток! Необходима помощь сообщества. Для ведущейся работы назрела необходимость создания интерфейса для работы с графиками...

Сделать интерполяцию между кривыми на полярном графике, чтобы найти на графике заданную точку
Здравствуйте, мне необходимо сделать интерполяцию между кривыми на полярном графике, чтобы найти на графике заданную точку x=40, y=30. ...

7
 Аватар для Krasme
7244 / 5097 / 2151
Регистрация: 02.02.2014
Сообщений: 13,454
05.04.2019, 14:19
https://uk.mathworks.com/matla... with-arrow
1
5 / 5 / 1
Регистрация: 17.10.2015
Сообщений: 390
05.04.2019, 15:51  [ТС]
ну да, но чтобы эти три строки
Matlab M
1
2
3
p0 = [1 2]; 
p1 = [4 5]; 
vectarrow(p0,p1)
работали, нужно рядом иметь код:
Кликните здесь для просмотра всего текста
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
function vectarrow(p0,p1)
%Arrowline 3-D vector plot.
%   vectarrow(p0,p1) plots a line vector with arrow pointing from point p0
%   to point p1. The function can plot both 2D and 3D vector with arrow
%   depending on the dimension of the input
%
%   Example:
%       3D vector
%       p0 = [1 2 3];   % Coordinate of the first point p0
%       p1 = [4 5 6];   % Coordinate of the second point p1
%       vectarrow(p0,p1)
%
%       2D vector
%       p0 = [1 2];     % Coordinate of the first point p0
%       p1 = [4 5];     % Coordinate of the second point p1
%       vectarrow(p0,p1)
%
%   See also Vectline
%   Rentian Xiong 4-18-05
%   $Revision: 1.0
  if max(size(p0))==3
      if max(size(p1))==3
          x0 = p0(1);
          y0 = p0(2);
          z0 = p0(3);
          x1 = p1(1);
          y1 = p1(2);
          z1 = p1(3);
          plot3([x0;x1],[y0;y1],[z0;z1]);   % Draw a line between p0 and p1
          
          p = p1-p0;
          alpha = 0.1;  % Size of arrow head relative to the length of the vector
          beta = 0.1;  % Width of the base of the arrow head relative to the length
          
          hu = [x1-alpha*(p(1)+beta*(p(2)+eps)); x1; x1-alpha*(p(1)-beta*(p(2)+eps))];
          hv = [y1-alpha*(p(2)-beta*(p(1)+eps)); y1; y1-alpha*(p(2)+beta*(p(1)+eps))];
          hw = [z1-alpha*p(3);z1;z1-alpha*p(3)];
          
          hold on
          plot3(hu(:),hv(:),hw(:))  % Plot arrow head
          grid on
          xlabel('x')
          ylabel('y')
          zlabel('z')
          hold off
      else
          error('p0 and p1 must have the same dimension')
      end
  elseif max(size(p0))==2
      if max(size(p1))==2
          x0 = p0(1);
          y0 = p0(2);
          x1 = p1(1);
          y1 = p1(2);
          plot([x0;x1],[y0;y1]);   % Draw a line between p0 and p1
          
          p = p1-p0;
          alpha = 0.1;  % Size of arrow head relative to the length of the vector
          beta = 0.1;  % Width of the base of the arrow head relative to the length
          
          hu = [x1-alpha*(p(1)+beta*(p(2)+eps)); x1; x1-alpha*(p(1)-beta*(p(2)+eps))];
          hv = [y1-alpha*(p(2)-beta*(p(1)+eps)); y1; y1-alpha*(p(2)+beta*(p(1)+eps))];
          
          hold on
          plot(hu(:),hv(:))  % Plot arrow head
          grid on
          xlabel('x')
          ylabel('y')
          hold off
      else
          error('p0 and p1 must have the same dimension')
      end
  else
      error('this function only accepts 2D or 3D vector')
  end

Да и стрелка какая-то здоровенная получается. Сложно как-то...
0
 Аватар для Krasme
7244 / 5097 / 2151
Регистрация: 02.02.2014
Сообщений: 13,454
05.04.2019, 15:55
верно, функция самописная... корректируйте под свои запросы...
в отдельном файле пусть лежит, не мешает же... зато стрелочные вектора на свой вкус
0
5 / 5 / 1
Регистрация: 17.10.2015
Сообщений: 390
05.04.2019, 15:57  [ТС]
Вроде же есть встроенная функция. Неужели нельзя получить красивую стрелочку например с её помощью?
Matlab M
1
2
u=[1 1]; v=[2 2];
quiver(u,v)
0
 Аватар для Krasme
7244 / 5097 / 2151
Регистрация: 02.02.2014
Сообщений: 13,454
05.04.2019, 16:19
такой примерчик покажет, что quiver не есть гуд для построения вектора, имеющего конкретные начало и конец
Matlab M
1
2
3
4
5
6
7
8
9
clf;
quiver(0,0,1,4)
hold on
quiver(0,0,-4,-4)
quiver(1,1,1,-5)
quiver(1,1,-5,0)
quiver(1,1,3,3)
axis equal
grid on
0
5 / 5 / 1
Регистрация: 17.10.2015
Сообщений: 390
05.04.2019, 16:29  [ТС]
Пока что для меня лучшее что нашёл это вот:
Matlab M
1
2
3
4
5
6
7
8
9
clear, clc
t = 0:0.1:10;
b=t;
plot(t,b)
hold on
x = [4 6];
y = [3 5];
[arrowx,arrowy] = dsxy2figxy(gca, x, y);
annotation('arrow',arrowx,arrowy);
При этом рядом нужно иметь:
Кликните здесь для просмотра всего текста
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
function varargout = dsxy2figxy(varargin)
if length(varargin{1}) == 1 && ishandle(varargin{1}) ...
                            && strcmp(get(varargin{1},'type'),'axes')   
    hAx = varargin{1};
    varargin = varargin(2:end); % Remove arg 1 (axes handle)
else
    hAx = gca;
end;
 
% Remaining args are either two point locations or a position vector
if length(varargin) == 1        % Assume a 4-element position vector
    pos = varargin{1};
else
    [x,y] = deal(varargin{:});  % Assume two pairs (start, end points)
end
 
% Get limits
axun = get(hAx,'Units');
set(hAx,'Units','normalized');  % Make axes units normalized 
axpos = get(hAx,'Position');    % Get axes position
axlim = axis(hAx);              % Get the axis limits [xlim ylim (zlim)]
axwidth = diff(axlim(1:2));
axheight = diff(axlim(3:4));
 
% Transform from data space coordinates to normalized figure coordinates 
if exist('x','var')     % Transform a and return pair of points
    varargout{1} = (x - axlim(1)) * axpos(3) / axwidth + axpos(1);
    varargout{2} = (y - axlim(3)) * axpos(4) / axheight + axpos(2);
else                    % Transform and return a position rectangle
    pos(1) = (pos(1) - axlim(1)) / axwidth * axpos(3) + axpos(1);
    pos(2) = (pos(2) - axlim(3)) / axheight * axpos(4) + axpos(2);
    pos(3) = pos(3) * axpos(3) / axwidth;
    pos(4) = pos(4) * axpos(4 )/ axheight;
    varargout{1} = pos;
end
 
% Restore axes units
set(hAx,'Units',axun)
1
0 / 0 / 0
Регистрация: 26.02.2021
Сообщений: 1
26.02.2021, 15:18
Илья007, Илья007, Илья007,

Здравствуйте. оказывается достаточно сложно найти как построить вектор по двум точкам в matlab, ваш метод лучший из того что я нашел. Мне нужно нарисовать векторное поле, но не интегральные линии решения ДУ, а соединить векторами точку и ее образ согласно действию отображения из R^2 \to R^2, чтобы по получившемуся портрету определить структуру векторного поля.

Стрелки получаются очень крупные, и сливаются в некоторых точках, а если брать меньше шаг, то некоторые точки можно пропустить. Не могли бы вы подсказать как уменьшить размер самих стрелок?
Вложения
Тип файла: rar untitled.rar (66.4 Кб, 9 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.02.2021, 15:18
Помогаю со студенческими работами здесь

Класс "вектор" с конструкторами, позволяющими создать нулевой вектор и вектор с произвольным числом элементов
Привет! Задача следующая. Нужно реализовать класс "вектор" с конструкторами, которые позволяют создать нулевой вектор и вектор с...

Создать иерархию классов вектор и безопасный вектор с проверкой выхода за пределы
Создать иерархию классов вектор и безопасный вектор с проверкой выхода за пределы. Безопасный вектор определяет переменные нижний и верхний...

Умножить одномерный массив (вектор-строка) на главную диагональ (вектор столбец)
Помогите исправить ошибки в коде, пожалуйста. Задание: задать матрицу 3х3 с помощью указателей, задать одномерный массив из 3-х...

Создать иерархию классов вектор и безопасный вектор с проверкой выхода за пределы
Создать иерархию классов вектор и безопасный вектор с проверкой выхода за пределы. Безопасный вектор определяет переменные нижний и верхний...

Вычислить и отнормировать вектор, полученный как произведение матрицы A на вектор B
Вычислить вектор , равный произведению матрицы А(15,15) и вектора B(b1,..b15) полученный вектор нормировать , т.е каждый элемент разделить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru