Как построить точечный круг с направленными наружу векторами? - PullRequest
0 голосов
/ 12 июня 2019

Я уже нарисовал пунктирный круг. Каждая точка представляет собой пешехода, где каждая из них также должна иметь скорость. Вот почему я хочу построить вектор, направленный наружу, для каждого пешехода, представляющего его скорость. Мне также нужны координаты каждого пешехода и их скорости, потому что я хочу иметь возможность изменять их скорость. Пример изображения нужного круга .

Я нарисовал круг с кодом ниже.

import numpy as np
import pdb
import matplotlib
import matplotlib.pyplot as plt

fig, axes = plt.subplots()

theta = np.linspace(0, 2*np.pi, 100)
r = 0.5
x = r*np.cos(theta)
y = r*np.sin(theta)

plt.gcf().gca().plot(x, y, 'ko')
plt.axis('equal')
plt.show()

Ответы [ 2 ]

0 голосов
/ 12 июня 2019

Просто добавьте колчан с координатами x и y в качестве векторов, ax.quiver(x,y,x,y).

import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots()

theta = np.linspace(0, 2*np.pi, 100)
r = 0.5
x = r*np.cos(theta)
y = r*np.sin(theta)

ax.plot(x, y, 'ko')
ax.quiver(x,y,x,y)


plt.axis('equal')
plt.show()

enter image description here

0 голосов
/ 12 июня 2019

Тебе нужна математика.

Пусть u будет единичным вектором в горизонтальном направлении:

u = np.array([1, 0])

Поворот вектора для максимально возможного количества точек данных на соответствующий угол тета:

 def rotate_z(theta):
     R =np.array([
         [np.cos(theta), -np.sin(theta)],
         [np.sin(theta), np.cos(theta)]])
     return R

Теперь для всех ваших точек данных вы можете:

 vecs =[]     
 for i in range(len(theta)):
     R = rotate_z(theta[i])
     vec = R @ u  # matrix multiply
     vec = vec + np.array([x[i], y[i]])
     vecs.append(vec)

Теперь у вас есть все ваши векторы, готовые для построения графиков (я думаю, вы можете использовать plt.quiver (..)!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...