首页 > 其他分享 >电场的绘制

电场的绘制

时间:2024-11-16 16:18:12浏览次数:1  
标签:plt 电场 PointCharge field charge magnitude np 绘制

详见python小程序

 

import numpy as np
import matplotlib.pyplot as plt

# 定义常量
k = 8.99e9  # 库仑常数 (N m^2/C^2)

# 定义电荷类
class PointCharge:
    def __init__(self, charge, position):
        self.charge = charge
        self.position = np.array(position)

    def electric_field(self, X, Y):
        # 计算电场
        r_vector = np.dstack((X, Y)) - self.position
        r_magnitude = np.linalg.norm(r_vector, axis=2)
        # 防止除以零
        r_magnitude[r_magnitude == 0] = np.inf
        E_magnitude = k * self.charge / r_magnitude**2
        E_direction = r_vector / r_magnitude[:, :, np.newaxis]  # 单位矢量
        return E_magnitude[:, :, np.newaxis] * E_direction

    @staticmethod
    def calculate_electric_field(charges,X, Y):
        # 初始化电场
        E_field = np.zeros((X.shape[0], X.shape[1], 2))

        # 计算每个电荷的电场并叠加
        for charge in charges:
            E_field += charge.electric_field(X, Y)

        # 计算电场的分量
        Ex = E_field[:, :, 0]
        Ey = E_field[:, :, 1]
        return Ex, Ey

    @staticmethod
    def plot_electric_field(X,Y,Ex,Ey):
        # 绘制电场线
        plt.figure(figsize=(10, 10))

        # 使用 streamplot 绘制电场线
        plt.streamplot(X, Y, Ex, Ey, color='b', linewidth=1.5, density=1.5)

        # 绘制电荷位置
        for charge in charges:
            plt.plot(charge.position[0], charge.position[1], 'ro' if charge.charge > 0 else 'bo', markersize=10)

        plt.xlim(-5, 5)
        plt.ylim(-5, 5)
        plt.title('Electric Field of Multiple Point Charges')
        plt.xlabel('x (m)')
        plt.ylabel('y (m)')
        plt.grid()
        plt.axis('equal')
        plt.show()

if __name__ == '__main__':
    # 创建多个电荷
    charges = [
        PointCharge(1e-6, (-2, -2)),   # 正电荷
        # PointCharge(-1e-6, (2, 0)),   # 负电荷
        PointCharge(1e-6, (2, 2)),     # 正电荷
        # PointCharge(-1e-6, (0, -2)),   # 负电荷
    ]

    # 定义网格
    x = np.linspace(-5, 5, 20)
    y = np.linspace(-5, 5, 20)
    X, Y = np.meshgrid(x, y)

    Ex,Ey= PointCharge.calculate_electric_field(charges, X, Y)

    # 绘制电场线
    PointCharge.plot_electric_field(X, Y, Ex, Ey)

 

标签:plt,电场,PointCharge,field,charge,magnitude,np,绘制
From: https://www.cnblogs.com/dogingate/p/18549450

相关文章

  • 小程序21-绘制轮播图
    在小程序中,提供了swiper和swiper-item组件实现轮播图swiper:滑块视图容器,其中只能放置swiper-item组件swiper-item:只可放置在swiper组件中,宽高自动设置为100%,代表swiper中的每一项文档所在位置:wswiper文档链接swiper常用属性autoplay:是否自动切换circular:是......
  • 绘制层次结构图
    绘制层次结构图WPS的智能图形要收费,先做个免费的不美观的版本。基于matplotlib,networkx,graphviz,pydot按需修改输入内容input_data为输入的文本。外观rankdir为指定方向。mpatches.Rectangle为节点外形。比例缩放matplotlib窗口,调整节点长宽。调整字体大小,当前为pl......
  • QT中使用图表之QChart绘制饼图
    饼图没有坐标轴,也不需要坐标轴使用的系列是QPieSeries饼图里面一个一个的块称为切片举例:绘制一个饼图,点击对应切片可以让切片分离1、创建图表视图并开启抗锯齿//1、创建图表视图QChartView*view=newQChartView(this);//开启抗锯齿view->setRenderHint(QPainte......
  • 16章15节:五大ROC曲线扩展包的对比,和其它评估曲线的绘制
    在机器学习和统计建模中,评估模型性能是至关重要的步骤。为了帮助研究人员和数据科学家更好地评估和可视化分类模型的效果,R语言提供了多个扩展包。本文将介绍几种常见的扩展包,主要包括ROCR、PROC、PRROC、以及ROCit等。首先,我们将详细探讨ROCR包的功能,重点介绍如何利用该包绘制R......
  • 2- R语言基本图形绘制之直方图——基于ggplot2
      直方图通过在x轴上将值域分割为一定数量的数据桶,在y轴上显示相应值的频数,展示了连续型变量的分布。  ggplot(data,aes(x=contvar))+geom_histogram()  #data是一个数据框;contvar是一个连续型变量。  下面我们使用ggplot包中的mpg数据框,分析2008年117个汽......
  • View绘制流程;
    ......
  • Origin图表技巧之绘制带辅助面的3D折线图
    折线图是科研中经常用到的图表之一,它通过线的升降变化显示数据的变化趋势,今天给大家分享绘制三维折线图的操作方法:操作步骤:1、先打开Origin2024软件,然后在Book1中输入如下示例数据:2、鼠标右击将C(Y)和E(Y)列设置为Z:3、将数据调整为XYZ型数据,如下:4、先选中所有数据:5......
  • 在线性坐标系中绘制对数函数图象
    本文记述了用Matplotlib在线性坐标系中绘制对数函数图象的例子。代码主体内容如下:...defmain():fig,ax=plt.subplots(figsize=(8,8))#1ax=configure_axes(ax,'LogarithmicFunction',8,3,1,0.25,1,0.25)#2x=np.linspace(......
  • [js] 突发奇想, 使用canvas绘制一个动态的扫描仪
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document</title&g......
  • Python绘制循环渐变圆
    通过改变颜色,圆的半径,及旋转角度来形成圆图形importturtleimportcolorsysascs#导入颜色转换模块#设置显示屏幕screen=turtle.Screen()screen.title("渐变色的圆")screen.bgcolor('#AFEEEE')#设置画笔p=turtle.Turtle()p.pensize(1)p.speed(0)#设置......