Python从4点创建一个椭圆形

卡梅伦·格林沃尔特(Cameron Greenwalt)

我试图做一个非常基本的形状,连接4个点。我有一个目前看起来像这样的情节但是,我似乎找不到能适当生成连接所有四个点的椭圆的模块。这四个点都将有所不同(它们是测试的结果,旨在显示某人每个属性的数量)。我发现有许多模块可以创建矩形,椭圆形或圆形,但是这些形状都不能始终与这些点对齐。是否有更通用的模块可以将所有四个点连接成更像椭圆的形状?

我还看到了一些可以在两点之间创建弧的模块,我认为这可能很有用,我可以对所有四个点都这样做。当我尝试执行此操作时,它需要与弧角相关的输入,而我不知道该如何计算。任何帮助对此表示感谢!

这是我用来生成所示图像的代码。

import matplotlib.pyplot as plt
import numpy as np

# Axes go from 0 to 100%
fig,ax = plt.subplots(figsize=(15,12))

x = [-40,-20,20,20]
y = [-40,20,20,-20]

plt.scatter(x,y)
ax.fill_between([-100, 0],-100,0,alpha=0.3, color='#1F98D0')  # blue
ax.fill_between([0, 100], -100, 0, alpha=0.3, color='#F9D307')  # yellow
ax.fill_between([-100, 0], 0, 100, alpha=0.3, color='#F38D25')  # orange
ax.fill_between([0, 100], 0, 100, alpha=0.3, color='#DA383D')  # red
plt.axis('off')
plt.show()
约翰·C

以下方法通过4个点创建插值样条,以创建“基本形式”。优点是,当存在3个或4个以上的点时,它也可以工作。

import matplotlib.pyplot as plt
from scipy import interpolate
import numpy as np

fig, ax = plt.subplots(figsize=(15, 12))

x = [-40, -20, 20, 20]
y = [-40, 20, 20, -20]

ax.scatter(x, y, zorder=3)
ax.fill_between([-100, 0], -100, 0, alpha=0.3, color='#1F98D0')  #blue
ax.fill_between([0, 100], -100, 0, alpha=0.3, color='#F9D307')  #yellow
ax.fill_between([-100, 0], 0, 100, alpha=0.3, color='#F38D25')  #orange
ax.fill_between([0, 100], 0, 100, alpha=0.3, color='#DA383D')  #red

tck, u = interpolate.splprep([x + x[:1], y + y[:1]], s=0, per=True)
unew = np.linspace(0, 1, 100)
basic_form = interpolate.splev(unew, tck)
ax.plot(basic_form[0], basic_form[1], color='lime', lw=2)
ax.fill(basic_form[0], basic_form[1], color='lime', alpha=0.3)

ax.axis('off')
plt.show()

结果图

当椭圆形无法放置或太大时,同样的方法也适用:

不同点的位置

请注意,要唯一定义一个椭圆,需要5个点(但并非每5个随机点都可以拟合一个椭圆)。如果您确实需要椭圆形,那么找到最小的1到4点非常麻烦。

这是将椭圆定义为到两个焦点((x0,y0)(x1,y1)的距离之为常数的点的开始a然后a可以搜索解决方案存在的一些最小值

from sympy import symbols, sqrt, Eq, nsolve

a, x0, y0, x1, y1, xi, yi = symbols('a x0 y0 x1 y1 xi yi', real=True)
ellipse = Eq(sqrt((xi - x0) ** 2 + (yi - y0) ** 2) + sqrt((xi - x1) ** 2 + (yi - y1) ** 2), a)

x = [-40, -20, 20, 20]
y = [-40, 20, 20, -20]

ai = 85
sol = nsolve([ellipse.subs(xi, i).subs(yi, j).subs(a, ai) for i, j in zip(x, y)], (x0, y0, x1, y1), (-10, 0, 10, 0))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何创建一个椭圆形的UIView?

来自分类Dev

如何制作一个圆形的椭圆形按钮?

来自分类Dev

我想用箭头将一个椭圆形的css形状变成椭圆形

来自分类Dev

我想用箭头将一个椭圆形的css形状变成椭圆形

来自分类Dev

如何在Flutter中在屏幕顶部创建一个半椭圆形?

来自分类Dev

LWJGL Circle程序创建一个椭圆形的形状

来自分类Dev

在OpenGL中创建椭圆形或椭圆形光源?

来自分类Dev

帆布弹跳球,显示一个椭圆形的黑色球

来自分类Dev

如何在css中制作一个椭圆形?

来自分类Dev

Android从canvis中删除一个椭圆形的部分

来自分类Dev

帆布弹跳球,显示一个椭圆形的黑球

来自分类Dev

使用CSS创建一半垂直的椭圆形

来自分类Dev

当我分配一个 backgroundImage 时,我不能让 CircleAvatar 变成一个椭圆形

来自分类Dev

创建椭圆形的弯曲边框

来自分类Dev

CALayer:创建带有圆形边缘的椭圆形吗?

来自分类Dev

使用Java Swing将点绘制为椭圆形

来自分类Dev

在圆的圆周上绘制点,但以椭圆形出现

来自分类Dev

Android:如何创建椭圆形的可绘制资源?

来自分类Dev

如何创建椭圆形几何体

来自分类Dev

在Java中链接两个椭圆形

来自分类Dev

两个重叠的椭圆形-可见的文物

来自分类Dev

矩形,椭圆形底部

来自分类Dev

CaptureElement为椭圆形

来自分类Dev

椭圆形气泡排序

来自分类Dev

如何填充椭圆形?

来自分类Dev

椭圆形的 RecyclerView 动画

来自分类Dev

在Python中绘制椭圆形轨道(使用numpy,matplotlib)

来自分类Dev

Unity椭圆形绘制椭圆

来自分类Dev

opengl绘制椭圆形而不是圆形