Python 3.x python中的磁偶极子

Python 3.x python中的磁偶极子,python-3.x,matplotlib,Python 3.x,Matplotlib,我看了看: 如下图所示: 有可能得到一条力线的坐标吗?我不明白它是如何打印的。返回一个包含两部分的容器对象“StreamplotSet”: 线:流线的线集合 箭头:包含FancyRowPatch对象的补丁集合(这些是三角形箭头) c.lines.get_path()给出所有段。通过迭代这些段,可以检查它们的顶点。当一段从上一段结束的地方开始时,两段都属于同一条曲线。请注意,每段都是一条短直线;许多线段一起使用以形成流线曲线 下面的代码演示如何迭代这些段。为了显示正在发生的情况,将每个线段转

我看了看:

如下图所示:

有可能得到一条力线的坐标吗?我不明白它是如何打印的。

返回一个包含两部分的容器对象“StreamplotSet”:

  • 线:流线的线集合
  • 箭头:包含FancyRowPatch对象的补丁集合(这些是三角形箭头)
c.lines.get_path()
给出所有段。通过迭代这些段,可以检查它们的顶点。当一段从上一段结束的地方开始时,两段都属于同一条曲线。请注意,每段都是一条短直线;许多线段一起使用以形成流线曲线

下面的代码演示如何迭代这些段。为了显示正在发生的情况,将每个线段转换为适合于
plt.plot
的2D点阵列。默认情况下,
plt.plot
使用新颜色为每条曲线着色(每10次重复一次)。点显示每个短直线段的位置

要找到一条特定的曲线,可以将鼠标悬停在起点上,并记下该点的x坐标。然后测试代码中的坐标。例如,在
x=0.48附近开始的曲线以特殊方式绘制

将numpy导入为np
从matplotlib导入pyplot作为plt
从matplotlib导入修补程序
def偶极子(m、r、r0):
R=np.减法(np.转置(R),r0).T
norm_R=np.sqrt(np.einsum(“i…,i…”,R,R))
m_dot_R=np.tensordot(m,R,轴=1)
B=3*m\u点\u R*R/norm\u R**5-np.tensordot(m,1/norm\u R**3,轴=0)
B*=1e-7
返回B
X=np.linspace(-1,1)
Y=np.linspace(-1,1)
Bx,By=偶极子(m=[0,1],r=np.meshgrid(X,Y),r0=[-0.2,0.8])
plt.图(figsize=(8,8))
c=plt.流线图(X,Y,Bx,By)
c、 行。设置_可见(假)
路径=c.lines.get_路径()
上一次结束=无
开始索引=[]
对于索引,枚举中的段(路径):
如果不是np.array_equal(上一个端点,段顶点[0]):#新段
开始索引。追加(索引)
prev_end=段顶点[-1]
对于i0,zip中的i1(开始索引,开始索引[1::]+[len(路径)]:
#获取从索引i0开始的曲线的所有点
curve=np.array([paths[i]。范围(i0,i1)]中i的顶点[0]+[paths[i1-1]。顶点[-1]]))
特殊坐标=0.48
对于i0,zip中的i1(开始索引,开始索引[1::]+[len(路径)]:
#获取从索引i0开始的曲线的所有点
curve=np.array([paths[i]。范围(i0,i1)]中i的顶点[0]+[paths[i1-1]。顶点[-1]]))
如果abs(曲线[0,0]-特殊坐标)<0.01:#以特殊方式绘制一条曲线
plt.绘图(曲线[:,0],曲线[:,1],“-”,lw=10,alpha=0.3)
其他:
plt.plot(曲线[:,0],曲线[:,1],'.',ls='-'))
利润率(0,0)
plt.show()

一种方法是在绘图上单击鼠标获取:。或者你想打印坐标,你需要知道种子坐标。我想得到一个坐标列表,从图中画出一条线。这能回答你的问题吗?非常感谢你。来自
打印(c.lines.get_path()[5])
的信息意味着什么?它给出:
路径(数组([[-0.78391976,-0.83498001],-0.73309273,-0.78981674]),无)
如何绘制它?当我绘制它时,它是一条直线。如何绘制曲线?它们都是非常短的线段。如果需要整条曲线,则需要收集一条曲线的所有短线段(使用此测试:线段的起点等于上一条线段的终点)。如果你需要更弯曲的东西,你可以从这些点创建一个splne。请问splne是什么意思?谢谢,a可以在点之间进行平滑插值。但您可能不需要它们,因为streamplot的段已经很短了。
import numpy as np
from matplotlib import pyplot as plt

def dipole(m, r, r0):
    """
    Calculation of field B in point r. B is created by a dipole moment m located in r0.
    """
# R = r - r0 - subtraction of elements of vectors r and r0, transposition of array
    R = np.subtract(np.transpose(r), r0).T
# Spatial components of r are the outermost axis
    norm_R = np.sqrt(np.einsum("i...,i...", R, R)) # einsum - Einsteinova sumace
# Dot product of R and m
    m_dot_R = np.tensordot(m, R, axes=1)
# Computation of B
    B = 3 * m_dot_R * R / norm_R**5 - np.tensordot(m, 1 / norm_R**3, axes=0)
    B *= 1e-7   # abbreviation for B = B * 1e-7, multiplication B of 1e-7, permeability of vacuum: 4\pi * 10^(-7)
# The result is the magnetic field B
    return B

X = np.linspace(-1, 1)
Y = np.linspace(-1, 1)

Bx, By = dipole(m=[0, 1], r=np.meshgrid(X, Y), r0=[-0.2,0.8])

plt.figure(figsize=(8, 8))
plt.streamplot(X, Y, Bx, By)
plt.margins(0, 0)

plt.show()