first draft

This commit is contained in:
nik
2025-10-14 14:37:58 +03:00
parent 2589f778c1
commit 05cde69e59
12 changed files with 222 additions and 72 deletions

View File

@@ -0,0 +1,92 @@
from collections import defaultdict
from sys import argv
import matplotlib.pyplot as plt
import numpy as np
def read_points(filename: str) -> list[tuple[float, float, str]]:
points = []
with open(filename, "r", encoding="utf-8") as f:
for line in f:
line = line.strip()
if line and not line.startswith("#"):
parts = line.split()
if len(parts) >= 3:
x = float(parts[0])
y = float(parts[1])
label = parts[2]
points.append((x, y, label))
return points
def main() -> None:
points = read_points(argv[1])
plt.figure(figsize=(8.27, 11.69))
plt.xlim(0, 30)
plt.ylim(0, 20)
plt.gca().set_aspect("equal", adjustable="box")
plt.grid(True, linewidth=0.3)
plt.xticks(range(0, 31, 2))
plt.yticks(range(0, 21, 2))
grouped = defaultdict(list)
for x, y, phi in points:
grouped[phi].append((x, y))
for x, y, label in points:
plt.scatter(x, y, color="red", s=15)
plt.text(x + 0.3, y + 0.3, label, fontsize=9)
for phi, coords in grouped.items():
coords.sort(key=lambda p: p[1])
xs, ys = zip(*coords)
plt.plot(xs, ys, linewidth=0.8, label=f"φ={phi} В")
if int(argv[2]):
theta = np.linspace(0, 2 * np.pi, 200)
cx, cy = 15, 9
for r in [5, 6]:
x = cx + r * np.cos(theta)
y = cy + r * np.sin(theta)
plt.plot(x, y, color="blue", linewidth=1)
emax_x, emax_y = 22.4, 10
emin_x, emin_y = 15, 9
plt.arrow(
emax_x + 2,
emax_y + 2,
-1.5,
-1.2,
head_width=0.4,
head_length=0.3,
fc="darkgreen",
ec="darkgreen",
linewidth=2,
)
plt.text(emax_x + 2.3, emax_y + 2.3, "E_max", fontsize=11, color="darkgreen")
plt.arrow(
emin_x - 3,
emin_y + 3,
1.5,
-1.5,
head_width=0.4,
head_length=0.3,
fc="darkgreen",
ec="darkgreen",
linewidth=2,
)
plt.text(emin_x - 4.2, emin_y + 3.2, "E_min", fontsize=11, color="darkgreen")
plt.xlabel("X (см)")
plt.ylabel("Y (см)")
plt.title("Эквипотенциальные линии")
plt.savefig("points.png", dpi=300)
if __name__ == "__main__":
main()