如何绘制带有向外指向向量的虚线圆?

时间:2019-06-12 14:57:39

标签: python python-3.x matplotlib

我已经画了一个虚线圆。每个点代表一个行人,其中每个人也应具有速度。这就是为什么我要为每个行人绘制一个朝外的向量,代表其速度。 我还需要每个行人的坐标及其速度,因为我希望能够更改他们的速度。 Example image of the desired circle

我用下面的代码绘制了圆圈。

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 :(得分:0)

您需要一些数学运算。

让我们作为水平方向的单位矢量:

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

根据对应的角度theta旋转向量以获得尽可能多的数据点:

 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(..)!

答案 1 :(得分:0)

只需添加一个将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