- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个随时间旋转的风矢量网格。我有这些向量的 u
和 v
分量(东西向和南北向)。
这是一个将所有时间的矢量叠加在一个网格点上的示例。
quiver(zeros((8,1)), zeros((8,1)),u[:,1,1], v[:,1,1])
我想通过在每个网格点绘制椭圆来总结这些向量在一个图中的旋转,这些椭圆基本上跟踪向量随时间变化的路径。
我基本上是想在这里做这个图中所做的事情: https://mdc.coaps.fsu.edu/scatterometry/meeting/docs/2015/NewProductsAndApplications/gille_ovwst15.pdf
椭圆有点微弱,但它们确实存在。
我猜我应该以某种方式使用matplotlib.patches.ellipse
,但我不确定如何从我的数据中获取椭圆角度。
最佳答案
这个问题有两个主要组成部分。
拟合椭圆。实际上,在 this site 上找到了一个关于如何在 python 中将椭圆拟合到数据点的很好的示例。 。因此我们可以使用它从数据中获取旋转角度以及椭圆的二维尺寸。
将所有椭圆绘制成图形。获得椭圆参数后,可以使用 matplotlib.patches.Ellipse
绘制椭圆。
完整代码如下:
import numpy as np
from numpy.linalg import eig, inv
import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse
######################
### Ellipse fitting ##
######################
# taken from
# http://nicky.vanforeest.com/misc/fitEllipse/fitEllipse.html
def fitEllipse(x,y):
x = x[:,np.newaxis]
y = y[:,np.newaxis]
D = np.hstack((x*x, x*y, y*y, x, y, np.ones_like(x)))
S = np.dot(D.T,D)
C = np.zeros([6,6])
C[0,2] = C[2,0] = 2; C[1,1] = -1
try:
E, V = eig(np.dot(inv(S), C))
n = np.argmax(np.abs(E))
a = V[:,n]
return a
except:
return [np.nan]*5
def ellipse_center(a):
b,c,d,f,g,a = a[1]/2, a[2], a[3]/2, a[4]/2, a[5], a[0]
num = b*b-a*c
x0=(c*d-b*f)/num
y0=(a*f-b*d)/num
return np.real(np.array([x0,y0]))
def ellipse_angle_of_rotation( a ):
b,c,d,f,g,a = a[1]/2, a[2], a[3]/2, a[4]/2, a[5], a[0]
return np.real(0.5*np.arctan(2*b/(a-c)))
def ellipse_axis_length( a ):
b,c,d,f,g,a = a[1]/2, a[2], a[3]/2, a[4]/2, a[5], a[0]
up = 2*(a*f*f+c*d*d+g*b*b-2*b*d*f-a*c*g)
down1=(b*b-a*c)*( (c-a)*np.sqrt(1+4*b*b/((a-c)*(a-c)))-(c+a))
down2=(b*b-a*c)*( (a-c)*np.sqrt(1+4*b*b/((a-c)*(a-c)))-(c+a))
res1=np.sqrt(up/down1)
res2=np.sqrt(up/down2)
return np.real(np.array([res1, res2]))
########################
### Data Generation ###
########################
n_el = 8 # number of ellipse points
# define grid
x = np.linspace(-7,7, 15)
y = np.linspace(4,18, 15)
# data (2 for x,y (west, north), n_el, dimensions of grid in x and y )
data = np.zeros((2, n_el,len(x), len(y) ))
for i in range(len(y)):
for j in range(len(x)):
#generate n_el points on an ellipse
r = np.linspace(0,2*np.pi, n_el)
data[0,:,j,i] = 0.5*(0.9*np.random.random(1)+0.1) * np.cos(r+2*np.random.random(1)*np.pi)
data[1,:,j,i] = 0.5*(0.9*np.random.random(1)+0.1) * np.sin(r)
# Test case: fit an ellipse and print the parameters
a = fitEllipse(data[0,:,0,0], data[1,:,0,0])
ang = ellipse_angle_of_rotation(a)
l = ellipse_axis_length( a )
center = ellipse_center(a)
print "\tangle: {}\n\tlength: {}\n\tcenter: {}".format(ang, l, center)
######################
####### plotting ###
######################
fig, (ax, ax2) = plt.subplots(ncols=2, figsize=(11,5))
# First, draw the test case ellipse
# raw data
ax.scatter(data[0,:,0,0], data[1,:,0,0], s=30, c="r", zorder=10)
# Fitted Ellipse
# matplotlib.patches.Ellipse
# http://matplotlib.org/api/patches_api.html#matplotlib.patches.Ellipse
# takes width and height as diameter instead of half width and rotation in degrees
e = Ellipse(xy=(0,0), width=2*l[0], height=2*l[1], angle=ang*180./np.pi, facecolor="b", alpha=0.2, zorder=0 )
ec = Ellipse(xy=(0,0), width=2*l[0], height=2*l[1], angle=ang*180./np.pi, fill=False, zorder=1 )
ax.add_artist(e)
ax.add_artist(ec)
ax.set_aspect("equal")
ax.set_xlim([-1,1])
ax.set_ylim([-1,1])
# Fit ellipse for every datapoint on grid and place in figure
for i in range(len(y)):
for j in range(len(x)):
a = fitEllipse(data[0,:,j,i], data[1,:,j,i])
ang = ellipse_angle_of_rotation(a)
l = ellipse_axis_length( a )
e = Ellipse(xy=(x[j],y[i]), width=2*l[0], height=2*l[1], angle=ang*180./np.pi, fill=False, zorder=1 )
ax2.add_artist(e)
ax2.set_ylim([y.min()-0.5, y.max()+0.5 ])
ax2.set_xlim([x.min()-0.5, x.max()+0.5 ])
ax2.set_aspect("equal")
# load some background image.
image = "https://upload.wikimedia.org/wikipedia/commons/thumb/c/ca/Singapore-OutlineMap-20050606.png/600px-Singapore-OutlineMap-20050606.png"
image = np.rot90(plt.imread(image))
im = ax2.imshow(image,extent=[x.min()-0.5, x.max()+0.5, y.min()-0.5, y.max()+0.5, ] )
plt.show()
关于python - 用椭圆显示矢量随时间的旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40940693/
我正在尝试将字符串列表转换为字符向量的向量: import collection.breakOut def stringsToCharVectors(xs: List[String]) = x
我正在尝试使用 Pytorch 通过 2D 向量(嘈杂语音帧序列)的回归来预测 1D 向量(干净语音数据帧) data) - 之前已经完成过。帧序列为帧提供时间上下文,以更准确地预测干净帧。这些向量可
在尝试构建时,我收到此错误: Operator '+=' is ambiguous on operands of type 'Vector3' and 'Vector2' 这是问题出处的脚本代码: u
是否存在实现 FIFO 意义上的循环数组或向量的 R 包? 假设我们有这个数组: 2 4 7 1 当在位置 1 插入一个新的观察值(比如 3)时,我希望第 n 个元素被第 n-1 个元素替换: 3 2
我在游戏中有两个对象,为此可以将其视为 2d 平面上的点,但我使用 Vector3s,因为游戏本身是 3d。 我有一个游戏相机,我想将其与两个物体垂直(也在平面上)对齐,以便它们都在相机的视野中。由于
我做了一个Telegram robot ,它的工作之一是从音频文件创建样本。现在对于发送给它的大多数音频,样本都非常好;像这样: 但是,对于一些音频,样本看起来有点奇怪: 如您所见,此文件中的波形未显
由于对 JavaScript 非常陌生,我在使用 JQuery VectorMaps 时遇到了以下问题: 当我用这种语法突出显示一个国家时,一切都很完美: jQuery('#vmap').vector
我正在使用 ChartJS 在我的网站中包含一些 map ,但 ChartJS 库没有我想要的 map 。 我想知道这种类型的矢量 map 是否很容易在网上免费找到,还是必须从头开始构建? Chart
我需要创建一个函数。在此范围内,我需要发生以下事情: List 1: '(a 5 6) List 2: '(c 8 10) List 3: '(d 4 9) 以上是列表。我需要忽略每个列表的第一列(这
我在地球表面有一个点,我正在将其从地球中心转换为向量。 我有一个以度数表示的真北航向,描述了该点将在地球表面行进的路径。 我需要计算一个向量,该向量垂直于该点沿地球表面的路径所创建的平面。 我尝试
大家好,这是我的 JavaScript 代码,用于为矢量 map 制作 ip 标记以显示在线 ip.. 所有 ips 都有 3 个不同的端口,例如:ip1:1020 或 ip2:5050 或 ip3:
我正在使用 Three.js 透视相机,我需要了解相机所注视的点。 如何使用相机的矩阵/旋转向量计算它? 最佳答案 相机向下看它的内部负 z 轴。所以选择相机负 z 轴上的任意点,如下所示: var
重要提示:请注意这个问题是关于 VECTOR map 的。不是高度图。 我正在尝试在 Scenekit 中实现 Vector 位移,如 apple 演示文稿中所述: https://www.youtu
我正在处理一个稳定增长的语料库。我使用用 Python 实现的 Doc2Vec 来训练我的文档向量。 是否可以更新文档向量? 我想使用文档向量进行文档推荐。 最佳答案 单个向量可以更新,但是 gens
我正在努力寻找一种比较(测量)两个不同信号之间相似性的好方法。我不想找出一个信号到另一个信号的时间延迟,但我想看看它们之间有何相似之处。例如,我有以下两个信号,比如说 s1 ans s2。这两个信号看
我想绘制 y 与 x 线,然后在它上面我想绘制向量。我可以使用 matplotlib 的 plot 和 quiver 函数来做到这一点。但是,矢量将始终绘制在线的后面,而不是在线的顶部。也就是说,线将
包含复数的向量 a 的大小为 N×1。任务是找到乘法a * a^HA (N-by-N) >,其中 H 是 Hermitian 算子(共轭转置),因此矩阵 A 是 Hermitian。 有没有比 O(N
三天来,我一直在努力从我的响应中获取复杂类型(列表),但总是收到 ClassCastException D/SOAPEnvelope(1552): Error: java.lang.ClassCast
在我的 android 项目中,我想要离线 map 。使用图 block ,我的 map 占用 500 MB 的空间,我还想在 map 上离线搜索地址。我认为减小尺寸并使搜索成为可能的唯一方法是矢量
什么是 Android Compose 方法来平铺图像以用小图案填充我的背景? 没有旋转的位图的天真方法可能是这样的: @Composable fun TileImage() { val pa
我是一名优秀的程序员,十分优秀!