carga imagen

electrostatica-1
# =========================================
# POTENCIAL DE UNA CARGA PUNTUAL
# Visualización 2D y 3D
# =========================================

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# =========================
# MALLA
# =========================
N = 200

x = np.linspace(-2, 2, N)
y = np.linspace(-2, 2, N)

X, Y = np.meshgrid(x, y)

# =========================
# PARÁMETRO DE SUAVIZADO
# =========================
epsilon = 0.1

# =========================
# CARGA
# =========================
q = 1.0
x0 = 0.0
y0 = 0.0

R = np.sqrt((X - x0)**2 + (Y - y0)**2 + epsilon**2)
phi = q / R

# =========================
# GRÁFICA 2D
# =========================
plt.figure(figsize=(6,5))

pcm = plt.pcolormesh(X, Y, phi, shading='auto', cmap='viridis')
plt.contour(X, Y, phi, levels=10, colors='white')

plt.colorbar(pcm, label='Potencial')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Potencial 2D')
plt.axis('equal')

plt.savefig("potencial_2D.png", dpi=300)
plt.show()

# =========================
# GRÁFICA 3D
# =========================
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

surf = ax.plot_surface(X, Y, phi, cmap='viridis')

fig.colorbar(surf, shrink=0.6)

ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('Potencial')
ax.set_title('Superficie 3D del potencial')

plt.savefig("potencial_3D.png", dpi=300)
plt.show()
electrostatica-3
import numpy as np
import matplotlib.pyplot as plt

N = 200

x = np.linspace(-2, 2, N)
y = np.linspace(-2, 2, N)

X, Y = np.meshgrid(x, y)

epsilon = 0.1
q = 1.0
x0 = 0.0
y0 = 0.0

R = np.sqrt((X - x0)**2 + (Y - y0)**2 + epsilon**2)
phi = q / R

dx = x[1] - x[0]
dy = y[1] - y[0]

dphidy, dphidx = np.gradient(phi, dy, dx)

Ex = -dphidx
Ey = -dphidy

plt.figure(figsize=(6,5))

pcm = plt.pcolormesh(X, Y, phi,
                     shading='auto',
                     cmap='viridis')

plt.contour(X, Y, phi,
            levels=10,
            colors='white')

step = 8

plt.quiver(X[::step, ::step],
           Y[::step, ::step],
           Ex[::step, ::step],
           Ey[::step, ::step],
           color='white',
           scale=40)

plt.colorbar(pcm, label='Potencial')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Potencial y Campo Eléctrico')
plt.axis('equal')

plt.savefig("campo_electrico.png", dpi=300)
plt.show()
electrostatica-6-1
import numpy as np
import matplotlib.pyplot as plt

N = 200

x = np.linspace(-2, 2, N)
y = np.linspace(-2, 2, N)

X, Y = np.meshgrid(x, y)

epsilon = 0.05
q = 1.0
a = 0.8

# Carga real
R1 = np.sqrt(X**2 + (Y - a)**2 + epsilon**2)

# Carga imagen
R2 = np.sqrt(X**2 + (Y + a)**2 + epsilon**2)

phi = q/R1 - q/R2

dx = x[1] - x[0]
dy = y[1] - y[0]

dphidy, dphidx = np.gradient(phi, dy, dx)

Ex = -dphidx
Ey = -dphidy

plt.figure(figsize=(6,5))

pcm = plt.pcolormesh(X, Y, phi,
                     shading='auto',
                     cmap='viridis')

plt.axhline(0, color='white', linewidth=2)

step = 8

plt.quiver(X[::step, ::step],
           Y[::step, ::step],
           Ex[::step, ::step],
           Ey[::step, ::step],
           color='white',
           scale=60)

plt.colorbar(pcm, label='Potencial')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Carga Imagen frente a Plano Conductor')
plt.axis('equal')

plt.savefig("carga_imagen.png", dpi=300)
plt.show()
electrostatica-6-1 electrostatica-7-1
import numpy as np
import matplotlib.pyplot as plt

plt.style.use("dark_background")

N = 400
x = np.linspace(-2, 2, N)
y = np.linspace(-2, 2, N)
X, Y = np.meshgrid(x, y)

epsilon = 0.03
q = 1.0
a = 0.8

R1 = np.sqrt(X**2 + (Y - a)**2 + epsilon**2)
R2 = np.sqrt(X**2 + (Y + a)**2 + epsilon**2)

phi = q/R1 - q/R2

dx = x[1] - x[0]
dy = y[1] - y[0]

dphidy, dphidx = np.gradient(phi, dy, dx)
Ex = -dphidx
Ey = -dphidy

E_mag = np.sqrt(Ex**2 + Ey**2)

fig, ax = plt.subplots(figsize=(8,8))

ax.pcolormesh(X, Y, phi,
              shading='auto',
              cmap='plasma')

ax.streamplot(X, Y, Ex, Ey,
              color=E_mag,
              cmap='inferno',
              density=2.5,
              linewidth=1.5)

ax.axhline(0, color='white', linewidth=3)

ax.set_xticks([])
ax.set_yticks([])
ax.set_frame_on(False)
ax.set_aspect('equal')

plt.tight_layout()
plt.savefig("portada_carga_imagen.png",
            dpi=600,
            bbox_inches='tight',
            pad_inches=0)

plt.show()