【问题标题】:How to delete all points/coordinates within a (parametrically defined) ellipse如何删除(参数定义的)椭圆内的所有点/坐标
【发布时间】:2023-02-08 01:11:10
【问题描述】:

我有一些看起来像这样的数据:

我使用from skimage.measure import EllipseModel 在一些数据周围画了一个椭圆 我能够通过为包提供 B0_M 数据和 5200 到 5350 之间的相应 q^2 来拟合椭圆,然后我能够从拟合中提取一些参数,自己绘制椭圆,如下所示:

X1Y1 = np.column_stack((X1,Y1))
ell = EllipseModel()
ell.estimate(X1Y1)
xc, yc, a, b, theta = ell.params

其中X1 是完整的 B_0 数据,X2 是完整的 q^2 数据集。它为椭圆参数返回以下值:

a = 0.399894
b = 37.826
xc = 5272
yc = 9.27
theta = 1.573

不幸的是,这种拟合并不完美,所以我缩放了一些参数,或添加了一些小数字等,主要是为了修补以获得图中所示的拟合。这是我绘制椭圆拟合的方法:

xc, yc, a, b, theta = ell.params
t = np.linspace(0, 2*np.pi, 100)
dt = 0.01*theta
ell_x = xc + 2*a*np.cos(theta+dt)*np.cos(t) - 1.8*b*np.sin(theta+dt)*np.sin(t)
ell_y = yc + 0.47*a*np.sin(theta+dt)*np.cos(t) + 0.47*b*np.cos(theta+dt)*np.sin(t)+0.26
plt.scatter(X,Y, marker = '.', alpha = 0.05, color = 'navy', s =0.2)
plt.scatter(xc, yc+0.26, color='red', s=10)
plt.plot(ell_x, ell_y, color = 'red')
plt.xlim(5150,5400)
plt.ylim(7,12)
plt.xlabel('B0_M')
plt.ylabel('$q^2$')
plt.title('jpsi')

现在我想从X1Y1中删除椭圆内的所有点

我怎样才能做到这一点?我想使用一个简单的数学论证,比如基本上使用椭圆方程,但它更复杂,因为我有它的参数形式,而且它也不是最整洁的东西,因为我已经按我说的不同量缩放了不同的变量前。

有什么方法可以简单地说,“删除 X、Y 中的点,如果它们在坐标为 ell_x 和 ell_y 的椭圆内”?

非常感谢

【问题讨论】:

  • 什么是X1Y1

标签: python numpy if-statement scikit-image ellipse


【解决方案1】:

我认为您可以使用椭圆的方程来构建一个隔离模型外部点的掩码。 诀窍是在应用椭圆方程之前,通过使用xcyctheta移动和旋转它们,将您的X1Y1转换到椭圆的坐标系中。

dx = X1 - xc
dy = Y2 - yc

x2 = dx * np.cos(theta) + dy * np.sin(theta)
y2 = -dx * np.sin(theta) + dy * np.cos(theta)

mask = np.square(x2 / a) + np.square(y2 / b) > 1

X1_outside = X1[mask]
Y2_outside = Y1[mask]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多