如何解决matlibplot中两个向量之间的填充区域
以下代码计算以下向量: 方向 矢量 (红色) 和 两个矢量(蓝色),它们是通过将红色矢量旋转 60 度时钟 - 和逆时针方向而产生的。
import matplotlib.pyplot as plt
import numpy as np
def Visualize(orienVector,vector1,vector2):
# Create figure and subplot
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
# Plot data points
#ax.scatter(vector1[0],vector1[1],color='blue')
#ax.scatter(vector2[0],vector2[1],color='orange')
# Set limits for x and y axes
plt.xlim(-1,1)
plt.ylim(-1,1)
# ===== Important bits start here =====
# Set properties of spines
ax.spines['top'].set_color('none')
ax.spines['left'].set_position('zero')
ax.spines['right'].set_color('none')
ax.spines['bottom'].set_position('zero')
# Set axis tick positions
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
# Set specific tick locations
ax.set_xticks([-10,-5,5,10])
ax.set_yticks([-10,10])
# ===== End Of Important Bits =====
# Draw arrows
ax.arrow(0,vector1[0][0],vector1[1][0],head_width=0.03,head_length=0.1,lw=1,fc='blue',ec='blue',length_includes_head=True)
ax.arrow(0,vector2[0][0],vector2[1][0],length_includes_head=True)
ax.arrow(0,orienVector[0][0],orienVector[1][0],lw=2,fc='red',ec='red',length_includes_head=True)
plt.show()
# rotation matrix clockwise
def rotMatrixClockWise(angle):
c,s = np.cos(angle),np.sin(angle)
R = np.array([[c,-s],[s,c]])
return R
# rotation matrix clockwise
def rotMatrixCounterClockWise(angle):
c,s],[-s,c]])
return R
# center of the poit of interests POIS
POI_X = [10,12,15,17,20,50]
POI_Y = [20,30,25,22,19,35]
# position of the pedestrian
pedPostion = np.array([[3],[4]])
# range of the horisontal angel view
spanningAngle = np.radians(60)
# calculate the cone
for angle in range(0,360,5):
# calculating the component of orientation vector V0,where the length |V0| = 1
x0 = 5*np.cos(np.radians(angle))
y0 = 5*np.sin(np.radians(angle))
v0 = np.array([[x0],[y0]])
v1 = rotMatrixCounterClockWise(spanningAngle).dot(v0)
v2 = rotMatrixClockWise(spanningAngle).dot(v0)
Visualize(v0,v1,v2)
这个向量的输出看起来像
我正在尝试填充蓝色矢量之间的区域以获得如下所示的锥体:
圆锥的头部 (0,0) 与圆弧之间的距离始终为 5
但是,我无法让它工作。我是 Matlibplot 的新手
解决方法
您可以通过分析找出圆弧中的点(圆的一部分,因此 y = +- (1-x^2)**0.5),将它们添加到由红色的原点和末端定义的多边形中和黄色向量,然后使用 https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.fill.html
。
也许不完全是你要找的,但你可以在向量之间创建一个楔子。拟合椭圆并填充其间的坐标会更合适。这是楔形的示例。
import matplotlib.pyplot as plt,numpy as np
from matplotlib import patches
v1 = np.array((1,2))
v2 = np.array((1,-2))
base = np.array((0,0))
theta1 = np.rad2deg(np.arctan(v1[1] / v1[0]))
theta2 = np.rad2deg(np.arctan(v2[1] / v2[0]))
fig,ax = plt.subplots()
a,b = theta1,theta2
if b > a:
a,b = b,a
artist = patches.Arc(base,width = 1,height = 1,theta1 = a,theta2 = b,color = 'green')
ax.arrow(*base,*v1,color = 'black')
ax.arrow(*base,*v2,*(v2 + v1),color = 'red')
wedge = patches.Wedge(base,r = 1,theta1 = theta2,theta2 = theta1,color = 'green')
ax.add_patch(wedge)
fig.show()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。