from manim import *
from manim_physics import *
from manim_circuit import *
import random as rn


class ef1(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        charge1 = Charge(3, 2 * LEFT)
        charge2 = Charge(-3, 2 * RIGHT)

        self.add(charge1, charge2)


class ef2(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        charge1 = Charge(3, 2 * LEFT)
        charge2 = Charge(3, 2 * RIGHT)

        fv1 = LabeledArrow(
            r"\vec{F}_e",
            label_color=BLACK,
            frame_fill_color=WHITE,
            start=2 * LEFT,
            end=4 * LEFT,
            color=BLACK,
        )
        fv2 = LabeledArrow(
            r"\vec{F}_e",
            label_color=BLACK,
            frame_fill_color=WHITE,
            start=2 * RIGHT,
            end=4 * RIGHT,
            color=BLACK,
        )

        self.add(charge1, charge2, fv1, fv2)


class ef3(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        charge1 = Charge(3, 2 * LEFT)
        charge2 = Charge(-3, 2 * RIGHT)

        fv1 = LabeledArrow(
            r"\vec{F}_e",
            label_color=BLACK,
            frame_fill_color=WHITE,
            start=2 * LEFT,
            end=ORIGIN,
            color=BLACK,
        )
        fv2 = LabeledArrow(
            r"\vec{F}_e",
            label_color=BLACK,
            frame_fill_color=WHITE,
            start=2 * RIGHT,
            end=ORIGIN,
            color=BLACK,
        )

        self.add(charge1, charge2, fv1, fv2)


class ef4(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        charge = Charge(3, ORIGIN)
        field = ElectricField(charge)

        self.add(charge, field)


class ef5(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        charge = Charge(3)
        field = ElectricField(charge)

        p = LabeledDot(MathTex("P_1"), color=BLACK).move_to([3, 3, 0])

        dv1 = LabeledArrow(
            r"\vec{r}",
            label_color=BLACK,
            frame_fill_color=WHITE,
            start=ORIGIN,
            end=[3, 3, 0],
            color=RED,
        )
        dv2 = LabeledArrow(
            r"\vec{e}_r",
            label_color=BLACK,
            frame_fill_color=WHITE,
            start=ORIGIN,
            end=[1.3, 1.3, 0],
            color=BLUE,
        )

        self.add(
            field,
            dv1,
            dv2,
            charge,
            p,
        )


class ef7(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        charge1 = Charge(3, 2 * LEFT)
        charge2 = Charge(3, 2 * RIGHT)
        field = ElectricField(charge1, charge2)

        fv1 = LabeledArrow(
            r"\vec{e}_r",
            label_color=BLACK,
            frame_fill_color=WHITE,
            start=2 * RIGHT,
            end=4 * RIGHT,
            color=BLACK,
        )
        fv2 = LabeledArrow(
            r"\vec{e}_r",
            label_color=BLACK,
            frame_fill_color=WHITE,
            start=2 * LEFT,
            end=4 * LEFT,
            color=BLACK,
        )

        self.add(
            field,
            charge1,
            charge2,
            fv1,
            fv2,
        )


class ef6(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        charge1 = Charge(3, 2 * LEFT)
        charge2 = Charge(3, 2 * RIGHT)

        fv = LabeledArrow(
            r"\vec{e}_r",
            label_color=BLACK,
            frame_fill_color=WHITE,
            start=2 * RIGHT,
            end=4 * RIGHT,
            color=BLACK,
        )

        self.add(charge1, charge2, fv)


class ef8(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        charge1 = Charge(6)
        charge2 = Charge(3, 2 * RIGHT)
        charge3 = Charge(-3, 2 * LEFT)
        field = ElectricField(charge1)

        fv1 = LabeledArrow(
            r"\vec{e}_r",
            label_color=BLACK,
            frame_fill_color=WHITE,
            start=2 * RIGHT,
            end=4 * RIGHT,
            color=BLACK,
        )
        fv2 = LabeledArrow(
            r"\vec{e}_r",
            label_color=BLACK,
            frame_fill_color=WHITE,
            start=2 * LEFT,
            end=ORIGIN,
            color=BLACK,
        )

        self.add(
            field,
            charge1,
            charge2,
            charge3,
            fv1,
            fv2,
        )


class ef9(ThreeDScene):
    def construct(self):

        self.camera.background_color = WHITE

        plate = Polygon(
            [0, -2.5, 2.5],
            [0, 3.5, 2.5],
            [0, 3.5, -1.5],
            [0, -2.5, -1.5],
            color=GREY,
            fill_color=GREY,
            fill_opacity=0.25,
        )
        vec1 = Arrow3D(start=[-2, 0, 0], end=[2, 0, 0], color=BLUE)
        vec2 = Arrow3D(start=[-2, -1, 0], end=[2, -1, 0], color=BLUE)
        vec3 = Arrow3D(start=[-2, 1, 0], end=[2, 1, 0], color=BLUE)
        vec4 = Arrow3D(start=[-2, 0, -1], end=[2, 0, -1], color=BLUE)
        vec5 = Arrow3D(start=[-2, 0, 1], end=[2, 0, 1], color=BLUE)

        self.set_camera_orientation(PI / 3, PI / 4)

        self.add(vec1, vec2, vec3, vec4, vec5, plate)


class ef10(ThreeDScene):
    def construct(self):

        self.camera.background_color = WHITE

        line = Line(
            [4, -6, 0],
            [2, -2, 0],
            color=BLACK,
        )
        chargel1 = Charge(1, [4, -6.3, 0])
        chargel2 = Charge(1, [4, -5.8, 0])
        chargel3 = Charge(-1, [2, -2.2, 0])
        chargel4 = Charge(-1, [2, -1.8, 0])

        plane = Polygon(
            [0, -2, 0],
            [2, 0, 0],
            [0, 2, 0],
            [-2, 0, 0],
            color=GREY,
            fill_color=GREY,
            fill_opacity=0.25,
        )
        chargep1 = Charge(1, [0.5, -1.5, 0])
        chargep2 = Charge(1, [1.5, -0.5, 0])
        chargep3 = Charge(-1, [-1.5, 0.5, 0])
        chargep4 = Charge(-1, [-0.5, 1.5, 0])

        sphere = Sphere(
            [-3, 3, 0],
            fill_opacity=0.5,
            checkerboard_colors=[BLUE, BLUE],
            stroke_width=0,
        )
        charges1 = Charge(1, [-2, 2, 0])
        charges2 = Charge(-1, [-4, 4, 0])

        self.set_camera_orientation(PI / 3, PI / 4)

        self.add(
            line,
            chargel1,
            chargel2,
            chargel3,
            chargel4,
            plane,
            chargep1,
            chargep2,
            chargep3,
            chargep4,
            sphere,
            charges1,
            charges2,
        )


class ef11(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        randc = VGroup()

        x1 = rn.randint(-4, 4)
        y1 = rn.randint(-4, 4)
        x2 = rn.randint(-4, 4)
        y2 = rn.randint(-4, 4)
        x3 = rn.randint(-4, 4)
        y3 = rn.randint(-4, 4)
        x4 = rn.randint(-4, 4)
        y4 = rn.randint(-4, 4)
        x5 = rn.randint(-4, 4)
        y5 = rn.randint(-4, 4)
        x6 = rn.randint(-4, 4)
        y6 = rn.randint(-4, 4)
        x7 = rn.randint(-4, 4)
        y7 = rn.randint(-4, 4)
        x8 = rn.randint(-4, 4)
        y8 = rn.randint(-4, 4)
        x9 = rn.randint(-4, 4)
        y9 = rn.randint(-4, 4)
        x10 = rn.randint(-4, 4)
        y10 = rn.randint(-4, 4)

        charge1 = Charge(
            1,
            [x1, y1, 0],
        )
        charge2 = Charge(
            1,
            [x2, y2, 0],
        )
        charge3 = Charge(
            1,
            [x3, y3, 0],
        )
        charge4 = Charge(
            1,
            [x4, y4, 0],
        )
        charge5 = Charge(
            1,
            [x5, y5, 0],
        )
        charge6 = Charge(
            1,
            [x6, y6, 0],
        )
        charge7 = Charge(
            1,
            [x7, y7, 0],
        )
        charge8 = Charge(
            1,
            [x8, y8, 0],
        )
        charge9 = Charge(
            1,
            [x9, y9, 0],
        )
        charge10 = Charge(
            1,
            [x10, y10, 0],
        )
        field = ElectricField(
            charge1,
            charge2,
            charge3,
            charge4,
            charge5,
            charge6,
            charge7,
            charge8,
            charge9,
            charge10,
        )

        plane = Polygon(
            [-2, 2, 0],
            [2, 2, 0],
            [2, -2, 0],
            [-2, -2, 0],
            color=GREY,
            fill_color=GREY,
            fill_opacity=0.25,
        )

        self.add(field, plane)


class ef12(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        charge = Charge(1, [0, -1000, 0])
        field = ElectricField(charge, color=BLUE, x_range=[-2, 2], y_range=[-2, 1.5])

        plane = Polygon(
            [-2, 2, 0],
            [2, 2, 0],
            [2, -2, 0],
            [-2, -2, 0],
            color=GREY,
            fill_color=GREY,
            fill_opacity=0.25,
        )

        vece = Arrow([-4, -2, 0], [-4, 2, 0], color=YELLOW)

        self.add(field, plane, vece)


class ef13(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        plane1 = Polygon(
            [3, 10, 0],
            [-10, 10, 0],
            [-10, -10, 0],
            [-3, -10, 0],
            color=BLUE,
            fill_color=BLUE,
            fill_opacity=0.25,
        )
        plane2 = Polygon(
            [3, 10, 0],
            [10, 10, 0],
            [10, -10, 0],
            [-3, -10, 0],
            color=RED,
            fill_color=RED,
            fill_opacity=0.25,
        )

        vec1 = Arrow([-4, -2, 0], [0, 0, 0], color=GREEN)
        vec2 = Arrow([0, 0, 0], [4, 1, 0], color=GREEN)

        text1 = MathTex(r"\epsilon_1", color=BLACK).move_to([-5, 3, 0])
        text2 = MathTex(r"\epsilon_2", color=BLACK).move_to([5, 3, 0])

        self.add(plane1, plane2, vec1, vec2, text1, text2)


class ef15(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        plane1 = Line([-1, 2, 0], [-1, -2, 0], color=RED)
        plane2 = Line([1, 2, 0], [1, -2, 0], color=BLUE)

        evec1 = Arrow([-0.8, 2, 0], [0.8, 2, 0], color=RED)
        evec2 = Arrow([-0.8, 1, 0], [0.8, 1, 0], color=RED)
        evec3 = Arrow([-0.8, 0, 0], [0.8, 0, 0], color=RED)
        evec4 = Arrow([-0.8, -1, 0], [0.8, -1, 0], color=RED)
        evec5 = Arrow([-0.8, -2, 0], [0.8, -2, 0], color=RED)

        box = Polygon(
            [-3, 3, 0], [3, 3, 0], [3, -3, 0], [-3, -3, 0], color=RED, fill_opacity=0
        )

        self.add(plane1, plane2, evec1, evec2, evec3, evec4, evec5, box)


class ef14(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        cabell = Line([-5, 0, 0], [-1, 0, 0], color=BLACK)
        cabelr = Line([1, 0, 0], [5, 0, 0], color=BLACK)
        plane1 = Line([-1, 2, 0], [-1, -2, 0], color=RED)
        plane2 = Line([1, 2, 0], [1, -2, 0], color=BLUE)

        evec1 = Arrow([-0.8, 2, 0], [0.8, 2, 0], color=RED)
        evec2 = Arrow([-0.8, 1, 0], [0.8, 1, 0], color=RED)
        evec3 = Arrow([-0.8, 0, 0], [0.8, 0, 0], color=RED)
        evec4 = Arrow([-0.8, -1, 0], [0.8, -1, 0], color=RED)
        evec5 = Arrow([-0.8, -2, 0], [0.8, -2, 0], color=RED)

        text1 = MathTex(r"+", color=BLACK).move_to([-1, 3, 0])
        text2 = MathTex(r"-", color=BLACK).move_to([1, 3, 0])

        self.add(
            cabell,
            cabelr,
            plane1,
            plane2,
            evec1,
            evec2,
            evec3,
            evec4,
            evec5,
            text1,
            text2,
        )


class ef17(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        cabell = Line([-5, 0, 0], [-1, 0, 0], color=BLACK)
        cabelr = Line([1, 0, 0], [5, 0, 0], color=BLACK)
        plane1 = Line([-1, 2, 0], [-1, -2, 0], color=RED)
        plane2 = Line([1, 2, 0], [1, -2, 0], color=BLUE)

        evec1 = Arrow([-0.8, 2, 0], [0.8, 2, 0], color=RED)
        evec2 = Arrow([-0.8, 1, 0], [0.8, 1, 0], color=RED)
        evec3 = Arrow([-0.8, 0, 0], [0.8, 0, 0], color=RED)
        evec4 = Arrow([-0.8, -1, 0], [0.8, -1, 0], color=RED)
        evec5 = Arrow([-0.8, -2, 0], [0.8, -2, 0], color=RED)

        text1 = MathTex(r"+", color=BLACK).move_to([-1, 3, 0])
        text2 = MathTex(r"-", color=BLACK).move_to([1, 3, 0])

        text3 = MathTex(
            r"\vec{E}",
            color=RED,
        ).move_to([0, 0.5, 0])
        text4 = MathTex(r"\vec{s}", color=ORANGE).move_to([0, -3, 0])
        line = Arrow([1.3, 0, 0], [-1.3, 0, 0], color=ORANGE)

        self.add(
            cabell,
            cabelr,
            plane1,
            plane2,
            evec1,
            evec2,
            evec3,
            evec4,
            evec5,
            text1,
            text2,
            text3,
            text4,
            line,
        )


class ef16(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        cabell = Line([-5, 0, 0], [-1, 0, 0], color=BLACK)
        cabelr = Line([1, 0, 0], [5, 0, 0], color=BLACK)
        plane1 = Line([-1, 2, 0], [-1, -2, 0], color=RED)
        plane2 = Line([1, 2, 0], [1, -2, 0], color=BLUE)

        evec1 = Arrow([-0.8, 2, 0], [0.8, 2, 0], color=RED)
        evec2 = Arrow([-0.8, 1, 0], [0.8, 1, 0], color=RED)
        evec3 = Arrow([-0.8, 0, 0], [0.8, 0, 0], color=RED)
        evec4 = Arrow([-0.8, -1, 0], [0.8, -1, 0], color=RED)
        evec5 = Arrow([-0.8, -2, 0], [0.8, -2, 0], color=RED)

        text1 = MathTex(r"+", color=BLACK).move_to([-1, 3, 0])
        text2 = MathTex(r"-", color=BLACK).move_to([1, 3, 0])

        text3 = MathTex(
            r"\vec{D}",
            color=RED,
        ).move_to([0, 0.5, 0])
        text4 = MathTex(r"A", color=ORANGE).move_to([-0.75, -3, 0])
        line = Line([-0.75, 2, 0], [-0.75, -2, 0], color=ORANGE)

        self.add(
            cabell,
            cabelr,
            plane1,
            plane2,
            evec1,
            evec2,
            evec3,
            evec4,
            evec5,
            text1,
            text2,
            text3,
            text4,
            line,
        )


class ef18(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        cabell = Line([-5, 0, 0], [-1, 0, 0], color=BLACK)
        cabelr = Line([1, 0, 0], [5, 0, 0], color=BLACK)
        plane1 = Line([-1, 2, 0], [-1, -2, 0], color=RED)
        plane2 = Line([1, 2, 0], [1, -2, 0], color=BLUE)

        text1 = MathTex(r"+", color=BLACK).move_to([-1, 3, 0])
        text2 = MathTex(r"-", color=BLACK).move_to([1, 3, 0])

        diel = Polygon(
            [-1, 2, 0],
            [0, 2, 0],
            [0, -2, 0],
            [-1, -2, 0],
            color=GREEN,
            fill_color=GREEN,
            fill_opacity=0.75,
        )

        self.add(diel, cabell, cabelr, plane1, plane2, text1, text2)


class ef19(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        cabell = Line([-5, 0, 0], [-1, 0, 0], color=BLACK)
        cabelr = Line([1, 0, 0], [5, 0, 0], color=BLACK)
        plane1 = Line([-1, 2, 0], [-1, -2, 0], color=RED)
        plane2 = Line([1, 2, 0], [1, -2, 0], color=BLUE)

        text1 = MathTex(r"+", color=BLACK).move_to([-1, 3, 0])
        text2 = MathTex(r"-", color=BLACK).move_to([1, 3, 0])

        diel = Polygon(
            [-1, 2, 0],
            [1, 2, 0],
            [1, 0, 0],
            [-1, 0, 0],
            color=GREEN,
            fill_color=GREEN,
            fill_opacity=0.75,
        )

        self.add(diel, cabell, cabelr, plane1, plane2, text1, text2)


class ef20(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        c0 = (
            Capacitor(
                label="",
            )
            .move_to([0, 2, 0])
            .rotate(90 * DEGREES)
        )
        c1 = (
            Capacitor(
                label="",
                polarized=False,
            )
            .rotate(90 * DEGREES)
            .move_to([-1, 0, 0])
            .set_color(BLACK)
        )
        c2 = (
            Capacitor(
                label="",
                polarized=False,
            )
            .rotate(90 * DEGREES)
            .move_to([0, 0, 0])
            .set_color(BLACK)
        )
        cn = (
            Capacitor(
                label="",
                polarized=False,
            )
            .rotate(90 * DEGREES)
            .move_to([1, 0, 0])
            .set_color(BLACK)
        )
        gnd = Ground(ground_type="earth").move_to([0, -2, 0])

        circuit = Circuit()
        self.add(circuit)
        circuit.add_components(c1, c2, cn)

        circuit.add_wire(c0.get_terminals("left"), c2.get_terminals("right"))
        circuit.add_wire(
            c1.get_terminals("right"),
            [c1.get_terminals("right")[0], 1, 0],
        )
        circuit.add_wire(
            cn.get_terminals("right"),
            [cn.get_terminals("right")[0], 1, 0],
        )
        circuit.add_wire(
            [c1.get_terminals("right")[0], 1, 0], [c2.get_terminals("right")[0], 1, 0]
        )
        circuit.add_wire(
            [c2.get_terminals("right")[0], 1, 0], [cn.get_terminals("right")[0], 1, 0]
        )
        circuit.add_wire(c1.get_terminals("left"), [c1.get_terminals("left")[0], -1, 0])
        circuit.add_wire(c2.get_terminals("left"), gnd.get_terminals())
        circuit.add_wire(cn.get_terminals("left"), [cn.get_terminals("left")[0], -1, 0])
        circuit.add_wire(
            [c1.get_terminals("left")[0], -1, 0], [c2.get_terminals("left")[0], -1, 0]
        )
        circuit.add_wire(
            [cn.get_terminals("left")[0], -1, 0], [c2.get_terminals("left")[0], -1, 0]
        )

        circuit.set_color(BLACK)


class ef21(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        c0 = (
            Capacitor(
                label="",
            )
            .move_to([0, 2, 0])
            .rotate(90 * DEGREES)
        )
        c1 = (
            Capacitor(
                label="",
                polarized=False,
            )
            .rotate(90 * DEGREES)
            .move_to([0, 1, 0])
            .set_color(BLACK)
        )
        c2 = (
            Capacitor(
                label="",
                polarized=False,
            )
            .rotate(90 * DEGREES)
            .move_to([0, 0, 0])
            .set_color(BLACK)
        )
        cn = (
            Capacitor(
                label="",
                polarized=False,
            )
            .rotate(90 * DEGREES)
            .move_to([0, -1, 0])
            .set_color(BLACK)
        )
        gnd = Ground(ground_type="earth").move_to([0, -2, 0])

        circuit = Circuit()
        self.add(circuit)
        circuit.add_components(c1, c2, cn)

        circuit.add_wire(c0.get_terminals("left"), c1.get_terminals("right"))
        circuit.add_wire(c1.get_terminals("left"), c2.get_terminals("right"))
        circuit.add_wire(c2.get_terminals("left"), cn.get_terminals("right"))
        circuit.add_wire(cn.get_terminals("left"), gnd.get_terminals())

        circuit.set_color(BLACK)


class magnet1(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        charge1 = Charge(-1, LEFT)
        charge2 = Charge(1, RIGHT)
        field = ElectricField(charge1, charge2)
        fieldI = Arrow([-1, 0, 0], [1, 0, 0], color=YELLOW)

        magnetP = Polygon(
            [-1.5, 0.5, 0],
            [-1.5, -0.5, 0],
            [0, -0.5, 0],
            [0, 0.5, 0],
            color=BLUE,
            fill_color=BLUE,
            fill_opacity=1,
        )
        textP = Text("S").move_to([-1, 0, 0])
        magnetN = Polygon(
            [1.5, 0.5, 0],
            [1.5, -0.5, 0],
            [0, -0.5, 0],
            [0, 0.5, 0],
            color=RED,
            fill_color=RED,
            fill_opacity=1,
        )
        textN = Text("N").move_to([1, 0, 0])

        self.add(field, magnetP, magnetN, fieldI, textP, textN)


class ssf1(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        charge1 = Charge(1, 1 * LEFT)
        charge2 = Charge(-1, 1 * RIGHT)
        wire = Line(1 * LEFT, 1 * RIGHT, color=BLACK)

        vec = LabeledArrow(
            "I",
            label_color=BLACK,
            frame_fill_color=WHITE,
            start=0.75 * LEFT + 0.5 * UP,
            end=0.75 * RIGHT + 0.5 * UP,
            color=BLACK,
        )

        self.add(charge1, charge2, wire, vec)


class ssf2(ThreeDScene):
    def construct(self):

        self.camera.background_color = WHITE

        plate = Polygon(
            [0, -2.5, 2.5],
            [0, 2.5, 2.5],
            [0, 2.5, -2.5],
            [0, -2.5, -2.5],
            color=GREY,
            fill_color=GREY,
            fill_opacity=0.25,
        )
        vec1 = Arrow3D(start=[-2, 0, 0], end=[2, 0, 0], color=BLUE)
        vec2 = Arrow3D(start=[-2, -1, 0], end=[2, -1, 0], color=BLUE)
        vec3 = Arrow3D(start=[-2, 1, 0], end=[2, 1, 0], color=BLUE)
        vec4 = Arrow3D(start=[-2, 0, -1], end=[2, 0, -1], color=BLUE)
        vec5 = Arrow3D(start=[-2, 0, 1], end=[2, 0, 1], color=BLUE)

        label1 = (
            MathTex(
                r"\Delta A",
                color=BLACK,
            )
            .rotate(160 * DEGREES, [0, 1, 1])
            .move_to([-2, 0, 2])
        )
        label2 = (
            MathTex(r"\vec{J}", color=BLUE)
            .rotate(160 * DEGREES, [0, 1, 1])
            .move_to([0, 0, 0.3])
        )

        self.set_camera_orientation(PI / 3, PI / 4)

        self.add(vec1, vec2, vec3, vec4, vec5, plate, label1, label2)


class ssf3(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        c0 = Charge(1, [1000, 0, 0])
        ef = ElectricField(c0)

        c1 = Charge(1, [2, 3, 0])
        c2 = Charge(1, [-2, 2, 0])
        c3 = Charge(1, [1, -3, 0])
        c4 = Charge(1, [-1, -1, 0])
        c5 = Charge(1, [2, -1, 0])

        c6 = Charge(-1, [2, 0, 0])
        c7 = Charge(-1, [-4, -1, 0])
        c8 = Charge(-1, [0, -2, 0])
        c9 = Charge(-1, [3, -2, 0])
        c10 = Charge(-1, [4, 2, 0])

        a1 = Arrow([2, 0, 0], [3, 2, 0], color=BLACK, path_arc=-90 * DEGREES)
        a2 = Arrow([-4, -1, 0], [-3, 1, 0], color=BLACK, path_arc=-90 * DEGREES)
        a3 = Arrow([4, 2, 0], [5, 4, 0], color=BLACK, path_arc=-90 * DEGREES)
        a4 = Arrow([0, -2, 0], [1, 0, 0], color=BLACK, path_arc=-90 * DEGREES)
        a5 = Arrow([3, -2, 0], [4, 0, 0], color=BLACK, path_arc=-90 * DEGREES)

        self.add(ef, a1, a2, a3, a4, a5, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10)


class ssf4(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        plane1 = Polygon(
            [3, 10, 0],
            [-10, 10, 0],
            [-10, -10, 0],
            [-3, -10, 0],
            color=BLUE,
            fill_color=BLUE,
            fill_opacity=0.25,
        )
        plane2 = Polygon(
            [3, 10, 0],
            [10, 10, 0],
            [10, -10, 0],
            [-3, -10, 0],
            color=RED,
            fill_color=RED,
            fill_opacity=0.25,
        )

        vec1 = Arrow([-4, -2, 0], [0, 0, 0], color=GREEN)
        vec2 = Arrow([0, 0, 0], [4, 1, 0], color=GREEN)

        text1 = MathTex(r"\kappa_1", color=BLACK).move_to([-5, 3, 0])
        text2 = MathTex(r"\kappa_2", color=BLACK).move_to([5, 3, 0])

        self.add(plane1, plane2, vec1, vec2, text1, text2)


class een1(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        r1 = Polygon(
            [-0.5, 1, 0], [-0.5, 1.5, 0], [0.5, 1.5, 0], [0.5, 1, 0], color=BLACK
        )
        r1c1 = Line([-2, 1.25, 0], [-0.5, 1.25, 0], color=BLACK)
        r1c2 = Line([0.5, 1.25, 0], [2, 1.25, 0], color=BLACK)
        i1 = Arrow([0.75, 1.25, 0], [1.75, 1.25, 0], color=RED)
        vo1 = Arrow([-0.5, 1.75, 0], [0.5, 1.75, 0], color=BLUE)
        i = MathTex(r"I", color=RED).move_to([1.25, 1.75, 0])
        v = MathTex(r"V", color=BLUE).move_to([0, 2.25, 0])

        v1 = VoltageSource(direction=UP).rotate(-90 * DEGREES).move_to([0, -1, 0])
        i2 = Arrow(
            [0.75, v1.get_terminals("positive")[1], 0],
            [1.75, v1.get_terminals("positive")[1], 0],
            color=RED,
        )
        vo2 = Arrow([0.5, -0.25, 0], [-0.5, -0.25, 0], color=BLUE)

        circuit = Circuit()

        self.add(r1, r1c1, r1c2, i1, vo1, i, v, circuit, i2, vo2)
        circuit.add_components(v1)

        circuit.add_wire(
            [-2, v1.get_terminals("negative")[1], 0], v1.get_terminals("negative")
        )
        circuit.add_wire(
            [2, v1.get_terminals("positive")[1], 0], v1.get_terminals("positive")
        )

        circuit.set_color(BLACK)


class een2(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        c1 = (
            Capacitor(label=False, direction=LEFT)
            .move_to([-1, 0, 0])
            .rotate(90 * DEGREES)
        )
        r1 = Polygon(
            [0.75, 0.5, 0],
            [1.25, 0.5, 0],
            [1.25, -0.5, 0],
            [0.75, -0.5, 0],
            color=BLACK,
        )

        circuit = Circuit()

        self.add(circuit, r1)

        circuit.add_components(c1)

        circuit.add_wire(
            c1.get_terminals("right"),
            [c1.get_terminals("right")[0], 1.5, 0],
        )
        circuit.add_wire(
            [c1.get_terminals("right")[0], 1.5, 0], [1, 1.5, 0], junctions=False
        )
        circuit.add_wire([1, 1.5, 0], [1, 0.5, 0], junctions=False)
        circuit.add_wire([1, -0.5, 0], [1, -1.5, 0])
        circuit.add_wire(
            [1, -1.5, 0], [c1.get_terminals("left")[0], -1.5, 0], junctions=False
        )
        circuit.add_wire(
            [c1.get_terminals("left")[0], -1.5, 0],
            c1.get_terminals("left"),
            junctions=False,
        )

        circuit.set_color(BLACK)


class een3(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        v1 = VoltageSource().move_to([-1.5, 0, 0])
        i1 = CurrentSource().move_to([1.5, 0, 0])
        vo1 = Arrow([-0.25, 1.5, 0], [-0.25, -1.5, 0], color=BLUE)
        iv1 = Arrow(
            i1.get_terminals("positive"),
            [i1.get_terminals("positive")[0], 1.5, 0],
            color=RED,
        )

        circuit = Circuit()

        self.add(circuit, vo1, iv1)

        circuit.add_components(v1, i1)

        circuit.add_wire(
            v1.get_terminals("positive"), [v1.get_terminals("positive")[0], 1.5, 0]
        )
        circuit.add_wire(
            v1.get_terminals("negative"), [v1.get_terminals("negative")[0], -1.5, 0]
        )
        circuit.add_wire(
            i1.get_terminals("positive"), [i1.get_terminals("positive")[0], 1.5, 0]
        )
        circuit.add_wire(
            i1.get_terminals("negative"), [i1.get_terminals("negative")[0], -1.5, 0]
        )

        circuit.set_color(BLACK)


class een4(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        p = Dot([-1.5, 1.5, 0], radius=0.08, color=BLACK)
        r1 = Polygon(
            [-0.5, 1.25, 0],
            [-0.5, 1.75, 0],
            [0.5, 1.75, 0],
            [0.5, 1.25, 0],
            color=BLACK,
        )
        r1c1 = Line([-1.5, 1.5, 0], [-0.5, 1.5, 0], color=BLACK)
        r1c2 = Line([1.5, 1.5, 0], [0.5, 1.5, 0], color=BLACK)
        r2 = Polygon(
            [1.25, 0.5, 0],
            [1.75, 0.5, 0],
            [1.75, -0.5, 0],
            [1.25, -0.5, 0],
            color=BLACK,
        )
        r2c1 = Line([1.5, 1.5, 0], [1.5, 0.5, 0], color=BLACK)
        r2c2 = Line([1.5, -0.5, 0], [1.5, -1.5, 0], color=BLACK)
        r3 = Polygon(
            [-0.5, -1.25, 0],
            [-0.5, -1.75, 0],
            [0.5, -1.75, 0],
            [0.5, -1.25, 0],
            color=BLACK,
        )
        r3c1 = Line([1.5, -1.5, 0], [0.5, -1.5, 0], color=BLACK)
        r3c2 = Line([-1.5, -1.5, 0], [-0.5, -1.5, 0], color=BLACK)
        r4 = Polygon(
            [-1.25, -0.5, 0],
            [-1.75, -0.5, 0],
            [-1.75, 0.5, 0],
            [-1.25, 0.5, 0],
            color=BLACK,
        )
        r4c1 = Line([-1.5, -1.5, 0], [-1.5, -0.5, 0], color=BLACK)
        r4c2 = Line([-1.5, 1.5, 0], [-1.5, 0.5, 0], color=BLACK)

        pt = MathTex(r"P", color=BLACK).move_to([-1.5, 2, 0])
        u1t = MathTex(r"U_1", color=BLUE).move_to([0, 2.5, 0])
        u2t = MathTex(r"U_2", color=BLUE).move_to([2.5, 0, 0])
        u3t = MathTex(r"U_3", color=BLUE).move_to([0, -2.5, 0])
        u4t = MathTex(r"U_4", color=BLUE).move_to([-2.5, 0, 0])
        r1t = MathTex(r"R_1", color=BLACK).move_to([0, 1, 0])
        r2t = MathTex(r"R_2", color=BLACK).move_to([1, 0, 0])
        r3t = MathTex(r"R_3", color=BLACK).move_to([0, -1, 0])
        r4t = MathTex(r"R_4", color=BLACK).move_to([-1, 0, 0])

        u1a = Arrow([-0.5, 2, 0], [0.5, 2, 0], color=BLUE)
        u2a = Arrow([2, 0.5, 0], [2, -0.5, 0], color=BLUE)
        u3a = Arrow([0.5, -2, 0], [-0.5, -2, 0], color=BLUE)
        u4a = Arrow([-2, -0.5, 0], [-2, 0.5, 0], color=BLUE)

        self.add(
            p,
            r1,
            r1c1,
            r1c2,
            r2,
            r2c1,
            r2c2,
            r3,
            r3c1,
            r3c2,
            r4,
            r4c1,
            r4c2,
            pt,
            u1t,
            u2t,
            u3t,
            u4t,
            r1t,
            r2t,
            r3t,
            r4t,
            u1a,
            u2a,
            u3a,
            u4a,
        )


class een5(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        p = Dot(ORIGIN, radius=0.08, color=BLACK)
        c1 = Line([0, 2, 0], ORIGIN, color=BLACK)
        c2 = Line([2, 0, 0], ORIGIN, color=BLACK)
        c3 = Line([0, -2, 0], ORIGIN, color=BLACK)
        c4 = Line([-2, 0, 0], ORIGIN, color=BLACK)

        ia1 = Arrow([0, 1.5, 0], [0, 0.5, 0], color=RED)
        ia2 = Arrow([1.5, 0, 0], [0.5, 0, 0], color=RED)
        ia3 = Arrow([0, -1.5, 0], [0, -0.5, 0], color=RED)
        ia4 = Arrow([-0.5, 0, 0], [-1.5, 0, 0], color=RED)

        pt = MathTex(r"P", color=BLACK).move_to([0.5, -0.5, 0])
        it1 = MathTex(r"I_1", color=RED).move_to([0.5, 1, 0])
        it2 = MathTex(r"I_2", color=RED).move_to([1, 0.5, 0])
        it3 = MathTex(r"I_3", color=RED).move_to([0.5, -1, 0])
        it4 = MathTex(r"I_4", color=RED).move_to([-1, 0.5, 0])

        self.add(p, c1, c2, c3, c4, ia1, ia2, ia3, ia4, pt, it1, it2, it3, it4)


class een6(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        r1 = Polygon(
            [-0.25, 2.5, 0],
            [0.25, 2.5, 0],
            [0.25, 1.5, 0],
            [-0.25, 1.5, 0],
            color=BLACK,
        )
        r2 = Polygon(
            [-0.25, 0.5, 0],
            [0.25, 0.5, 0],
            [0.25, -0.5, 0],
            [-0.25, -0.5, 0],
            color=BLACK,
        )
        r3 = Polygon(
            [-0.25, -2.5, 0],
            [0.25, -2.5, 0],
            [0.25, -1.5, 0],
            [-0.25, -1.5, 0],
            color=BLACK,
        )
        c1 = Line([0, 3.5, 0], [0, 2.5, 0], color=BLACK)
        c2 = Line([0, 1.5, 0], [0, 0.5, 0], color=BLACK)
        c3 = Line([0, -0.5, 0], [0, -1.5, 0], color=BLACK)
        c4 = Line([0, -2.5, 0], [0, -3.5, 0], color=BLACK)

        r1t = MathTex(r"R_1", color=BLACK).move_to([1, 2, 0])
        r2t = MathTex(r"R_2", color=BLACK).move_to([1, 0, 0])
        r3t = MathTex(r"R_3", color=BLACK).move_to([1, -2, 0])

        self.add(r1, r2, r3, c1, c2, c3, c4, r1t, r2t, r3t)


class een7(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        r1 = Polygon(
            [-0.25, 0.5, 0],
            [0.25, 0.5, 0],
            [0.25, -0.5, 0],
            [-0.25, -0.5, 0],
            color=BLACK,
        )
        r2 = Polygon(
            [-1.25, 0.5, 0],
            [-0.75, 0.5, 0],
            [-0.75, -0.5, 0],
            [-1.25, -0.5, 0],
            color=BLACK,
        )
        r3 = Polygon(
            [1.25, 0.5, 0],
            [0.75, 0.5, 0],
            [0.75, -0.5, 0],
            [1.25, -0.5, 0],
            color=BLACK,
        )

        c1 = Line([0, 2.5, 0], [0, 0.5, 0], color=BLACK)
        c2 = Line([-1, 1.5, 0], [1, 1.5, 0], color=BLACK)
        c3 = Line([-1, 1.5, 0], [-1, 0.5, 0], color=BLACK)
        c4 = Line([1, 1.5, 0], [1, 0.5, 0], color=BLACK)
        c5 = Line([0, -2.5, 0], [0, -0.5, 0], color=BLACK)
        c6 = Line([-1, -1.5, 0], [1, -1.5, 0], color=BLACK)
        c7 = Line([-1, -1.5, 0], [-1, -0.5, 0], color=BLACK)
        c8 = Line([1, -1.5, 0], [1, -0.5, 0], color=BLACK)
        j1 = Dot([0, 1.5, 0], radius=0.08, color=BLACK)
        j2 = Dot([0, -1.5, 0], radius=0.08, color=BLACK)

        self.add(r1, r2, r3, c1, c2, c3, c4, c5, c6, c7, c8, j1, j2)


class een8(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        v1 = VoltageSource().move_to([-2, 0, 0]).set_color(BLACK)
        r1 = Polygon(
            [1.75, 1.5, 0], [2.25, 1.5, 0], [2.25, 0.5, 0], [1.75, 0.5, 0], color=BLACK
        )
        r2 = Polygon(
            [1.75, -1.5, 0],
            [2.25, -1.5, 0],
            [2.25, -0.5, 0],
            [1.75, -0.5, 0],
            color=BLACK,
        )
        c1 = Line(
            v1.get_terminals("positive"),
            [v1.get_terminals("positive")[0], 2.5, 0],
            color=BLACK,
        )
        c2 = Line([v1.get_terminals("positive")[0], 2.5, 0], [2, 2.5, 0], color=BLACK)
        c3 = Line([2, 2.5, 0], [2, 1.5, 0], color=BLACK)
        c4 = Line([2, 0.5, 0], [2, -0.5, 0], color=BLACK)
        c5 = Line([2, -2.5, 0], [2, -1.5, 0], color=BLACK)
        c6 = Line([v1.get_terminals("positive")[0], -2.5, 0], [2, -2.5, 0], color=BLACK)
        c7 = Line(
            v1.get_terminals("negative"),
            [v1.get_terminals("positive")[0], -2.5, 0],
            color=BLACK,
        )

        r1t = MathTex(r"R_1", color=BLACK).move_to([1, 1, 0])
        r2t = MathTex(r"R_2", color=BLACK).move_to([1, -1, 0])
        u1t = MathTex(r"U_1", color=BLUE).move_to([3, 1, 0])
        u2t = MathTex(r"U_2", color=BLUE).move_to([3, -1, 0])

        u1a = Arrow([2.5, 1.5, 0], [2.5, 0.5, 0], color=BLUE)
        u2a = Arrow([2.5, -0.5, 0], [2.5, -1.5, 0], color=BLUE)

        self.add(v1, r1, r2, c1, c2, c3, c4, c5, c6, c7, r1t, r2t, u1t, u2t, u1a, u2a)


class een9(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        i1 = CurrentSource().move_to([-4, 0, 0]).set_color(BLACK)
        r1 = Polygon(
            [-0.25, 0.5, 0],
            [0.25, 0.5, 0],
            [0.25, -0.5, 0],
            [-0.25, -0.5, 0],
            color=BLACK,
        )
        r2 = Polygon(
            [3.75, 0.5, 0],
            [4.25, 0.5, 0],
            [4.25, -0.5, 0],
            [3.75, -0.5, 0],
            color=BLACK,
        )

        c1 = Line(
            i1.get_terminals("positive"),
            [i1.get_terminals("positive")[0], 1.5, 0],
            color=BLACK,
        )
        c2 = Line([i1.get_terminals("positive")[0], 1.5, 0], [4, 1.5, 0], color=BLACK)
        c3 = Line([0, 1.5, 0], [0, 0.5, 0], color=BLACK)
        c4 = Line([4, 1.5, 0], [4, 0.5, 0], color=BLACK)
        c5 = Line([4, -0.5, 0], [4, -1.5, 0], color=BLACK)
        c6 = Line([4, -1.5, 0], [i1.get_terminals("negative")[0], -1.5, 0], color=BLACK)
        c7 = Line([0, -1.5, 0], [0, -0.5, 0], color=BLACK)
        c8 = Line(
            i1.get_terminals("negative"),
            [i1.get_terminals("negative")[0], -1.5, 0],
            color=BLACK,
        )
        j1 = Dot([0, 1.5, 0], radius=0.08, color=BLACK)
        j2 = Dot([0, -1.5, 0], radius=0.08, color=BLACK)

        i1a = Arrow([0, -0.5, 0], [0, -1.5, 0], color=RED)
        i2a = Arrow([4, -0.5, 0], [4, -1.5, 0], color=RED)

        r1t = MathTex(
            r"R_1",
            color=BLACK,
        ).move_to([1, 0, 0])
        r2t = MathTex(
            r"R_2",
            color=BLACK,
        ).move_to([5, 0, 0])

        self.add(i1, r1, r2, c1, c2, c3, c4, c5, c6, c7, c8, j1, j2, i1a, i2a, r1t, r2t)


class een10(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        v1 = VoltageSource().move_to([-2, -2, 0]).set_color(BLACK)
        mbody1 = Circle(radius=0.5, color=BLACK)
        mbody2 = Circle(radius=0.5, color=BLACK)
        marrow1 = Arrow([-0.5, -0.5, 0], [0.5, 0.5, 0], color=BLACK)
        marrow2 = Arrow([-0.5, -0.5, 0], [0.5, 0.5, 0], color=BLACK)
        m1 = VGroup(mbody1, marrow1).move_to([[-1.75, -2, 0]])
        m2 = VGroup(mbody2, marrow2).move_to([2.25, 0, 0])

        r1 = Polygon(
            [-2, 0.5, 0], [-2, 1.5, 0], [-1.5, 1.5, 0], [-1.5, 0.5, 0], color=BLACK
        )
        i1 = CurrentSource().move_to([2, 0, 0]).set_color(BLACK)
        r2 = Polygon(
            [3.75, 0.5, 0],
            [3.75, -0.5, 0],
            [4.25, -0.5, 0],
            [4.25, 0.5, 0],
            color=BLACK,
        )

        c1 = Line(
            [v1.get_terminals("negative")[0], -3, 0],
            v1.get_terminals("negative"),
            color=BLACK,
        )
        c2 = Line(
            v1.get_terminals("positive"),
            [v1.get_terminals("positive")[0], 0.5, 0],
            color=BLACK,
        )
        c3 = Line(
            [v1.get_terminals("positive")[0], 1.5, 0],
            [v1.get_terminals("positive")[0], 3, 0],
            color=BLACK,
        )
        c4 = Line(
            i1.get_terminals("positive"),
            [i1.get_terminals("positive")[0], 2, 0],
            color=BLACK,
        )
        c5 = Line([i1.get_terminals("positive")[0], 2, 0], [5, 2, 0], color=BLACK)
        c6 = Line([4, 2, 0], [4, 0.5, 0], color=BLACK)
        c7 = Line([4, -0.5, 0], [4, -2, 0], color=BLACK)
        c8 = Line([5, -2, 0], [i1.get_terminals("negative")[0], -2, 0], color=BLACK)
        c9 = Line(
            [i1.get_terminals("negative")[0], -2, 0],
            i1.get_terminals("negative"),
            color=BLACK,
        )

        r1t = MathTex(r"R_i", color=BLACK).move_to([-1.25, 1, 0])
        r2t = MathTex(r"R_i", color=BLACK).move_to([4.5, 0, 0])

        self.add(m1, r1, m2, r2, c1, c2, c3, c4, c5, c6, c7, c8, c9, r1t, r2t)


class een11(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        i1 = CurrentSource().move_to([-1, 0, 0]).set_color(BLACK)
        ri = Polygon(
            [0.75, 0.5, 0],
            [1.25, 0.5, 0],
            [1.25, -0.5, 0],
            [0.75, -0.5, 0],
            color=BLACK,
        )

        c1 = Line(
            [i1.get_terminals("negative")[0], -2, 0],
            i1.get_terminals("negative"),
            color=BLACK,
        )
        c2 = Line(
            i1.get_terminals("positive"),
            [i1.get_terminals("positive")[0], 2, 0],
            color=BLACK,
        )
        c3 = Line([i1.get_terminals("positive")[0], 2, 0], [2, 2, 0], color=BLACK)
        c4 = Line([1, 2, 0], [1, 0.5, 0], color=BLACK)
        c5 = Line([1, -2, 0], [1, -0.5, 0], color=BLACK)
        c6 = Line([i1.get_terminals("positive")[0], -2, 0], [2, -2, 0], color=BLACK)

        j1 = Dot(radius=0.08, color=BLACK).move_to([2, 2, 0])
        j2 = Dot(radius=0.08, color=BLACK).move_to([2, -2, 0])

        rit = MathTex(r"R_i", color=BLACK).move_to([1.5, 0, 0])

        self.add(i1, ri, c1, c2, c3, c4, c5, c6, j1, j2, rit)


class een12(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        v1 = VoltageSource().move_to([-0.25, -1, 0]).set_color(BLACK)
        ri = Polygon(
            [-0.25, 0.5, 0],
            [-0.25, 1.5, 0],
            [0.25, 1.5, 0],
            [0.25, 0.5, 0],
            color=BLACK,
        )

        c1 = Line([0, -3, 0], v1.get_terminals("negative"), color=BLACK)
        c2 = Line(v1.get_terminals("positive"), [0, 0.5, 0], color=BLACK)
        c3 = Line([0, 1.5, 0], [0, 3, 0], color=BLACK)

        j1 = Dot(radius=0.08, color=BLACK).move_to([0, 3, 0])
        j2 = Dot(radius=0.08, color=BLACK).move_to([0, -3, 0])

        rit = MathTex(r"R_i", color=BLACK).move_to([0.5, 1, 0])

        self.add(v1, ri, c1, c2, c3, j1, j2, rit)


class een13(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        v1 = VoltageSource().set_color(BLACK).move_to([-2, -1, 0])
        v2 = VoltageSource().set_color(BLACK).move_to([-2, 1, 0])
        v3 = VoltageSource().set_color(BLACK).move_to([1, 0, 0])
        v4 = VoltageSource().set_color(BLACK).move_to([3, 0, 0])

        c1 = Line(
            [v1.get_terminals("negative")[0], -3, 0],
            v1.get_terminals("negative"),
            color=BLACK,
        )
        c2 = Line(
            v2.get_terminals("negative"), v1.get_terminals("positive"), color=BLACK
        )
        c3 = Line(
            v2.get_terminals("positive"),
            [v2.get_terminals("positive")[0], 3, 0],
            color=BLACK,
        )
        c4 = Line(
            [v3.get_terminals("negative")[0], -2, 0],
            v3.get_terminals("negative"),
            color=BLACK,
        )
        c5 = Line(
            [v3.get_terminals("positive")[0], 2, 0],
            v3.get_terminals("positive"),
            color=BLACK,
        )
        c6 = Line(
            [v3.get_terminals("positive")[0], 2, 0],
            [4, 2, 0],
            color=BLACK,
        )
        c7 = Line(
            [v4.get_terminals("positive")[0], 2, 0],
            v4.get_terminals("positive"),
            color=BLACK,
        )
        c8 = Line(
            [v4.get_terminals("positive")[0], -2, 0],
            v4.get_terminals("negative"),
            color=BLACK,
        )
        c9 = Line(
            [4, -2, 0],
            [v3.get_terminals("positive")[0], -2, 0],
            color=BLACK,
        )

        j1 = Dot(radius=0.08, color=BLACK).move_to(
            [v1.get_terminals("positive")[0], 3, 0]
        )
        j2 = Dot(radius=0.08, color=BLACK).move_to(
            [v1.get_terminals("positive")[0], -3, 0]
        )
        j3 = Dot(radius=0.08, color=BLACK).move_to([4, 2, 0])
        j4 = Dot(radius=0.08, color=BLACK).move_to([4, -2, 0])

        self.add(v1, v2, v3, v4, c1, c2, c3, c4, c5, c6, c7, c8, c9, j1, j2, j3, j4)


class een14(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        v1 = VoltageSource().set_color(BLACK).move_to([-2, 0, 0])
        ri = Polygon(
            [-0.5, 0.25, 0],
            [0.5, 0.25, 0],
            [0.5, -0.25, 0],
            [-0.5, -0.25, 0],
            color=BLACK,
        ).move_to([0, 2, 0])
        rl = Polygon(
            [-0.25, 0.5, 0],
            [0.25, 0.5, 0],
            [0.25, -0.5, 0],
            [-0.25, -0.5, 0],
            color=BLACK,
        ).move_to([2, 0, 0])

        c1 = Line(
            v1.get_terminals("positive"),
            [v1.get_terminals("positive")[0], 2, 0],
            color=BLACK,
        )
        c2 = Line([v1.get_terminals("positive")[0], 2, 0], [-0.5, 2, 0], color=BLACK)
        c3 = Line([2, 2, 0], [2, 0.5, 0], color=BLACK)
        c4 = Line([2, -2, 0], [2, -0.5, 0], color=BLACK)
        c5 = Line([v1.get_terminals("positive")[0], -2, 0], [2, -2, 0], color=BLACK)
        c6 = Line(
            v1.get_terminals("negative"),
            [v1.get_terminals("positive")[0], -2, 0],
            color=BLACK,
        )
        c7 = Line([0.5, 2, 0], [2, 2, 0], color=BLACK)

        rit = MathTex(r"R_i", color=BLACK).move_to([0, 1.3, 0])
        rlt = MathTex(r"R_L", color=BLACK).move_to([1.3, 0, 0])

        self.add(v1, ri, rl, c1, c2, c3, c4, c5, c6, c7, rit, rlt)


class een15(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        ax = Axes(
            y_range=[0, 10, 10],
            x_range=[0, 5, 2.5],
            tips=False,
        ).set_color(BLACK)
        labels = ax.get_axis_labels(Tex("R"), Tex("P")).set_color(BLACK)

        f1 = ax.plot(lambda x: -1.6 * ((x - 2.5) ** 2) + 10, x_range=[0, 5]).set_color(
            BLACK
        )

        rit = MathTex(r"R_i", color=BLACK).move_to(ax.c2p(2.5, -0.5))

        self.add(ax, labels, f1, rit)


class een16(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        ax = Axes(
            y_range=[0, 10, 10],
            x_range=[0, 5, 2.5],
            tips=False,
        ).set_color(BLACK)
        labels = ax.get_axis_labels(Tex("R"), Tex("")).set_color(BLACK)

        f1 = ax.plot(lambda x: -1.6 * ((x - 2.5) ** 2) + 10, x_range=[0, 5]).set_color(
            BLACK
        )
        f2 = Line(ax.c2p(0, 0), ax.c2p(5, 10), color=BLACK)

        rit = MathTex(r"R_i", color=BLACK).move_to(ax.c2p(2.5, -0.5))

        self.add(ax, labels, f1, rit, f2)


class een17(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        v1 = VoltageSource().move_to([2, 0, 0]).set_color(BLACK)

        vmb = Circle(radius=0.5, color=BLACK)
        vma = Arrow([-0.5, -0.5, 0], [0.5, 0.5, 0], color=BLACK)
        vm = VGroup(vmb, vma).move_to([-1.5, 0, 0])

        r = Polygon(
            [-0.25, 0.5, 0],
            [0.25, 0.5, 0],
            [0.25, -0.5, 0],
            [-0.25, -0.5, 0],
            color=BLACK,
        ).move_to([-3, 2, 0])
        r1 = Polygon(
            [-0.25, 0.5, 0],
            [0.25, 0.5, 0],
            [0.25, -0.5, 0],
            [-0.25, -0.5, 0],
            color=BLACK,
        ).move_to([0, 2, 0])
        r2 = Polygon(
            [-0.25, 0.5, 0],
            [0.25, 0.5, 0],
            [0.25, -0.5, 0],
            [-0.25, -0.5, 0],
            color=BLACK,
        ).move_to([-3, -2, 0])

        rvr = Polygon(
            [-0.25, 0.5, 0],
            [0.25, 0.5, 0],
            [0.25, -0.5, 0],
            [-0.25, -0.5, 0],
            color=BLACK,
        )
        rva = Arrow([-0.75, -0.75, 0], [0.75, 0.75, 0], color=BLACK)
        rv = VGroup(rvr, rva).move_to([0, -2, 0])

        c1 = Line(
            v1.get_terminals("positive"),
            [v1.get_terminals("positive")[0], 3.5, 0],
            color=BLACK,
        )
        c2 = Line([v1.get_terminals("positive")[0], 3.5, 0], [0, 3.5, 0], color=BLACK)
        c3 = Line([0, 3.5, 0], [0, 2.5, 0], color=BLACK)
        c4 = Line([0, 1.5, 0], [0, -1.5, 0], color=BLACK)
        c5 = Line([0, -2.5, 0], [0, -3.5, 0], color=BLACK)
        c6 = Line([0, -3.5, 0], [-3, -3.5, 0], color=BLACK)
        c7 = Line([-3, -3.5, 0], [-3, -2.5, 0], color=BLACK)
        c8 = Line([-3, -1.5, 0], [-3, 1.5, 0], color=BLACK)
        c9 = Line([-3, 2.5, 0], [-3, 3.5, 0], color=BLACK)
        c10 = Line([-3, 3.5, 0], [0, 3.5, 0], color=BLACK)
        c11 = Line(
            v1.get_terminals("negative"),
            [v1.get_terminals("positive")[0], -3.5, 0],
            color=BLACK,
        )
        c12 = Line(
            [v1.get_terminals("positive")[0], -3.5, 0], [0, -3.5, 0], color=BLACK
        )
        c13 = Line([0, 0, 0], [-1, 0, 0], color=BLACK)
        c14 = Line([-2, 0, 0], [-3, 0, 0], color=BLACK)

        rt = MathTex(r"R", color=BLACK).move_to([-2.5, 2, 0])
        r1t = MathTex(r"R_1", color=BLACK).move_to([0.5, 2, 0])
        r2t = MathTex(r"R_2", color=BLACK).move_to([-2.5, -2, 0])
        rvt = MathTex(r"R_v", color=BLACK).move_to([0.5, -2, 0])

        self.add(
            v1,
            vm,
            r,
            r1,
            r2,
            rv,
            c1,
            c2,
            c3,
            c4,
            c5,
            c6,
            c7,
            c8,
            c9,
            c10,
            c11,
            c12,
            c13,
            c14,
            rt,
            r1t,
            r2t,
            rvt,
        )


class een18(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        ic = Polygon(
            [-2, 2, 0], [2, 2, 0], [2, -2, 0], [-2, -2, 0], color=BLACK
        ).move_to([-4, 0, 0])

        c1 = Line(ORIGIN, [1, 0, 0], color=BLACK).move_to([-1.5, 1.5, 0])
        c2 = Line(ORIGIN, [1, 0, 0], color=BLACK).move_to([-1.5, -1.5, 0])
        j1 = Dot(radius=0.08, color=BLACK).move_to([-1, 1.5, 0])
        j2 = Dot(radius=0.08, color=BLACK).move_to([-1, -1.5, 0])

        a = MathTex(r"\Rightarrow", color=BLACK)

        v1 = VoltageSource().move_to([1.5, -1, 0]).set_color(BLACK)
        ri = Polygon(
            [-0.25, 0.5, 0],
            [0.25, 0.5, 0],
            [0.25, -0.5, 0],
            [-0.25, -0.5, 0],
            color=BLACK,
        ).move_to([1.75, 1, 0])

        c3 = Line(
            v1.get_terminals("negative"),
            [v1.get_terminals("negative")[0], -2.5, 0],
            color=BLACK,
        )
        c4 = Line(
            v1.get_terminals("positive"),
            [v1.get_terminals("negative")[0], 0.5, 0],
            color=BLACK,
        )
        c5 = Line(
            [v1.get_terminals("negative")[0], 1.5, 0],
            [v1.get_terminals("negative")[0], 2.5, 0],
            color=BLACK,
        )

        self.add(ic, c1, c2, j1, j2, a, v1, ri, c3, c4, c5)


class een19(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        ic = Polygon(
            [-2, 2, 0], [2, 2, 0], [2, -2, 0], [-2, -2, 0], color=BLACK
        ).move_to([-4, 0, 0])

        c1 = Line(ORIGIN, [1, 0, 0], color=BLACK).move_to([-1.5, 1.5, 0])
        c2 = Line(ORIGIN, [1, 0, 0], color=BLACK).move_to([-1.5, -1.5, 0])
        j1 = Dot(radius=0.08, color=BLACK).move_to([-1, 1.5, 0])
        j2 = Dot(radius=0.08, color=BLACK).move_to([-1, -1.5, 0])

        a = MathTex(r"\Rightarrow", color=BLACK)

        i1 = CurrentSource().move_to([1.75, 0, 0]).set_color(BLACK)
        ri = Polygon(
            [-0.25, 0.5, 0],
            [0.25, 0.5, 0],
            [0.25, -0.5, 0],
            [-0.25, -0.5, 0],
            color=BLACK,
        ).move_to([4, 0, 0])

        c3 = Line(
            i1.get_terminals("negative"),
            [i1.get_terminals("negative")[0], -1.5, 0],
            color=BLACK,
        )
        c4 = Line(
            [i1.get_terminals("negative")[0], -1.5, 0],
            [5, -1.5, 0],
            color=BLACK,
        )
        c5 = Line(
            [4, -1.5, 0],
            [4, -0.5, 0],
            color=BLACK,
        )
        c6 = Line(
            [4, 1.5, 0],
            [4, 0.5, 0],
            color=BLACK,
        )
        c7 = Line(
            i1.get_terminals("positive"),
            [i1.get_terminals("negative")[0], 1.5, 0],
            color=BLACK,
        )
        c8 = Line(
            [i1.get_terminals("negative")[0], 1.5, 0],
            [5, 1.5, 0],
            color=BLACK,
        )
        j3 = Dot(radius=0.08, color=BLACK).move_to([5, 1.5, 0])
        j4 = Dot(radius=0.08, color=BLACK).move_to([5, -1.5, 0])

        self.add(ic, c1, c2, j1, j2, a, i1, ri, c3, c4, c5, c6, c7, c8, j3, j4)


class een20(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        j1 = Dot(radius=0.08, color=BLACK).move_to([-3, -1.5, 0])
        j2 = Dot(radius=0.08, color=BLACK).move_to([3, -1.5, 0])
        j3 = Dot(radius=0.08, color=BLACK).move_to([0, 1.5, 0])

        r1 = Polygon(
            [-0.5, 0.25, 0],
            [0.5, 0.25, 0],
            [0.5, -0.25, 0],
            [-0.5, -0.25, 0],
            color=BLACK,
        ).move_to([-1.5, -1.5, 0])
        r2 = Polygon(
            [-0.5, 0.25, 0],
            [0.5, 0.25, 0],
            [0.5, -0.25, 0],
            [-0.5, -0.25, 0],
            color=BLACK,
        ).move_to([1.5, -1.5, 0])
        r3 = Polygon(
            [-0.25, 0.5, 0],
            [0.25, 0.5, 0],
            [0.25, -0.5, 0],
            [-0.25, -0.5, 0],
            color=BLACK,
        )
        c1 = Line([-3, -1.5, 0], [-2, -1.5, 0], color=BLACK)
        c2 = Line([-1, -1.5, 0], [1, -1.5, 0], color=BLACK)
        c3 = Line([3, -1.5, 0], [2, -1.5, 0], color=BLACK)
        c4 = Line([0, -1.5, 0], [0, -0.5, 0], color=BLACK)
        c5 = Line([0, 0.5, 0], [0, 1.5, 0], color=BLACK)

        r1t = MathTex(r"R_1", color=BLACK).move_to([0.5, 0, 0])
        r2t = MathTex(r"R_2", color=BLACK).move_to([-1.5, -1, 0])
        r3t = MathTex(r"R_3", color=BLACK).move_to([1.5, -1, 0])

        self.add(j1, j2, j3, r1, r2, r3, c1, c2, c3, c4, c5, r1t, r2t, r3t)


class een21(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        j1 = Dot(radius=0.08, color=BLACK).move_to([-3, -1.5, 0])
        j2 = Dot(radius=0.08, color=BLACK).move_to([3, -1.5, 0])
        j3 = Dot(radius=0.08, color=BLACK).move_to([0, 1.5, 0])

        r1 = Polygon(
            [-0.5, 0.25, 0],
            [0.5, 0.25, 0],
            [0.5, -0.25, 0],
            [-0.5, -0.25, 0],
            color=BLACK,
        ).move_to([0, -1.5, 0])
        r2 = Polygon(
            [-0.25, 0.5, 0],
            [0.25, 0.5, 0],
            [0.25, -0.5, 0],
            [-0.25, -0.5, 0],
            color=BLACK,
        ).move_to([-3, 0, 0])
        r3 = Polygon(
            [-0.25, 0.5, 0],
            [0.25, 0.5, 0],
            [0.25, -0.5, 0],
            [-0.25, -0.5, 0],
            color=BLACK,
        ).move_to([3, 0, 0])
        c1 = Line([-3, -1.5, 0], [-0.5, -1.5, 0], color=BLACK)
        c2 = Line([3, -1.5, 0], [0.5, -1.5, 0], color=BLACK)
        c3 = Line([-3, -1.5, 0], [-3, -0.5, 0], color=BLACK)
        c4 = Line([3, -1.5, 0], [3, -0.5, 0], color=BLACK)
        c5 = Line([-3, 1.5, 0], [-3, 0.5, 0], color=BLACK)
        c6 = Line([3, 1.5, 0], [3, 0.5, 0], color=BLACK)
        c7 = Line([3, 1.5, 0], [-3, 1.5, 0], color=BLACK)

        r1t = MathTex(r"R_{23}", color=BLACK).move_to([0, -1, 0])
        r2t = MathTex(r"R_{12}", color=BLACK).move_to([-2.25, 0, 0])
        r3t = MathTex(r"R_{13}", color=BLACK).move_to([2.25, 0, 0])

        self.add(j1, j2, j3, r1, r2, r3, c1, c2, c3, c4, c5, c6, c7, r1t, r2t, r3t)


class een22(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        i1 = CurrentSource().set_color(BLACK).move_to([-6.25, 0, 0])
        v1 = VoltageSource().set_color(BLACK).move_to([6.25, 0, 0])
        r1 = Polygon(
            [-0.25, 0.5, 0],
            [0.25, 0.5, 0],
            [0.25, -0.5, 0],
            [-0.25, -0.5, 0],
            color=BLACK,
        )
        r2 = Polygon(
            [-0.25, 0.5, 0],
            [0.25, 0.5, 0],
            [0.25, -0.5, 0],
            [-0.25, -0.5, 0],
            color=BLACK,
        ).move_to([-3, 0, 0])
        r3 = Polygon(
            [-0.5, 0.25, 0],
            [0.5, 0.25, 0],
            [0.5, -0.25, 0],
            [-0.5, -0.25, 0],
            color=BLACK,
        ).move_to([3, 2, 0])

        c1 = Line(
            i1.get_terminals("positive"),
            [i1.get_terminals("positive")[0], 2, 0],
            color=BLACK,
        )
        c2 = Line([i1.get_terminals("positive")[0], 2, 0], [2.5, 2, 0], color=BLACK)
        c3 = Line([3.5, 2, 0], [v1.get_terminals("positive")[0], 2, 0], color=BLACK)
        c4 = Line(
            [v1.get_terminals("positive")[0], 2, 0],
            v1.get_terminals("positive"),
            color=BLACK,
        )
        c5 = Line(
            v1.get_terminals("negative"),
            [v1.get_terminals("negative")[0], -2, 0],
            color=BLACK,
        )
        c6 = Line(
            [v1.get_terminals("negative")[0], -2, 0],
            [i1.get_terminals("negative")[0], -2, 0],
            color=BLACK,
        )
        c7 = Line(
            [i1.get_terminals("negative")[0], -2, 0],
            i1.get_terminals("negative"),
            color=BLACK,
        )
        c8 = Line([0, 2, 0], [0, 0.5, 0], color=BLACK)
        c9 = Line([0, -0.5, 0], [0, -2, 0], color=BLACK)
        c10 = Line([-3, 2, 0], [-3, 0.5, 0], color=BLACK)
        c11 = Line([-3, -0.5, 0], [-3, -2, 0], color=BLACK)

        self.add(v1, i1, r1, r2, r3, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11)


class een23(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        i1 = CurrentSource().set_color(BLACK).move_to([-6.25, 0, 0])
        r1 = Polygon(
            [-0.25, 0.5, 0],
            [0.25, 0.5, 0],
            [0.25, -0.5, 0],
            [-0.25, -0.5, 0],
            color=BLACK,
        )
        r2 = Polygon(
            [-0.25, 0.5, 0],
            [0.25, 0.5, 0],
            [0.25, -0.5, 0],
            [-0.25, -0.5, 0],
            color=BLACK,
        ).move_to([-3, 0, 0])
        r3 = Polygon(
            [-0.5, 0.25, 0],
            [0.5, 0.25, 0],
            [0.5, -0.25, 0],
            [-0.5, -0.25, 0],
            color=BLACK,
        ).move_to([3, 2, 0])

        c1 = Line(
            i1.get_terminals("positive"),
            [i1.get_terminals("positive")[0], 2, 0],
            color=BLACK,
        )
        c2 = Line([i1.get_terminals("positive")[0], 2, 0], [2.5, 2, 0], color=BLACK)
        c3 = Line([3.5, 2, 0], [6, 2, 0], color=BLACK)
        c4 = Line([6, 2, 0], [6, -2, 0], color=BLACK)
        c5 = Line([6, -2, 0], [i1.get_terminals("negative")[0], -2, 0], color=BLACK)
        c6 = Line(
            i1.get_terminals("negative"),
            [i1.get_terminals("negative")[0], -2, 0],
            color=BLACK,
        )
        c7 = Line([0, 2, 0], [0, 0.5, 0], color=BLACK)
        c8 = Line([0, -0.5, 0], [0, -2, 0], color=BLACK)
        c9 = Line([-3, 2, 0], [-3, 0.5, 0], color=BLACK)
        c10 = Line([-3, -0.5, 0], [-3, -2, 0], color=BLACK)

        self.add(i1, r1, r2, r3, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10)


class een24(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        v1 = VoltageSource().set_color(BLACK).move_to([6.25, 0, 0])
        r1 = Polygon(
            [-0.25, 0.5, 0],
            [0.25, 0.5, 0],
            [0.25, -0.5, 0],
            [-0.25, -0.5, 0],
            color=BLACK,
        )
        r2 = Polygon(
            [-0.25, 0.5, 0],
            [0.25, 0.5, 0],
            [0.25, -0.5, 0],
            [-0.25, -0.5, 0],
            color=BLACK,
        ).move_to([-3, 0, 0])
        r3 = Polygon(
            [-0.5, 0.25, 0],
            [0.5, 0.25, 0],
            [0.5, -0.25, 0],
            [-0.5, -0.25, 0],
            color=BLACK,
        ).move_to([3, 2, 0])

        c1 = Line(
            v1.get_terminals("positive"),
            [v1.get_terminals("positive")[0], 2, 0],
            color=BLACK,
        )
        c2 = Line([v1.get_terminals("positive")[0], 2, 0], [3.5, 2, 0], color=BLACK)
        c3 = Line([2.5, 2, 0], [-3, 2, 0], color=BLACK)
        c5 = Line([-3, -2, 0], [v1.get_terminals("negative")[0], -2, 0], color=BLACK)
        c6 = Line(
            v1.get_terminals("negative"),
            [v1.get_terminals("negative")[0], -2, 0],
            color=BLACK,
        )
        c7 = Line([0, 2, 0], [0, 0.5, 0], color=BLACK)
        c8 = Line([0, -0.5, 0], [0, -2, 0], color=BLACK)
        c9 = Line([-3, 2, 0], [-3, 0.5, 0], color=BLACK)
        c10 = Line([-3, -0.5, 0], [-3, -2, 0], color=BLACK)

        self.add(v1, r1, r2, r3, c1, c2, c3, c5, c6, c7, c8, c9, c10)


class een25(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        v1 = VoltageSource().set_color(BLACK).move_to([-3.25, 0, 0])
        r1 = Polygon(
            [-0.5, 0.25, 0],
            [0.5, 0.25, 0],
            [0.5, -0.25, 0],
            [-0.5, -0.25, 0],
            color=BLACK,
        ).move_to([0, 2, 0])
        r2 = Polygon(
            [-0.5, 0.25, 0],
            [0.5, 0.25, 0],
            [0.5, -0.25, 0],
            [-0.5, -0.25, 0],
            color=BLACK,
        ).move_to([0, -2, 0])
        r3 = Polygon(
            [-0.5, 0.25, 0],
            [0.5, 0.25, 0],
            [0.5, -0.25, 0],
            [-0.5, -0.25, 0],
            color=BLACK,
        ).move_to([0, 1, 0])
        r4 = Polygon(
            [-0.5, 0.25, 0],
            [0.5, 0.25, 0],
            [0.5, -0.25, 0],
            [-0.5, -0.25, 0],
            color=BLACK,
        ).move_to([0, -1, 0])
        r5 = Polygon(
            [-0.25, 0.5, 0],
            [0.25, 0.5, 0],
            [0.25, -0.5, 0],
            [-0.25, -0.5, 0],
            color=BLACK,
        ).move_to([3, 0, 0])

        c1 = Line(
            v1.get_terminals("positive"),
            [v1.get_terminals("positive")[0], 2, 0],
            color=BLACK,
        )
        c2 = Line([v1.get_terminals("positive")[0], 2, 0], [-0.5, 2, 0], color=BLACK)
        c3 = Line([0.5, 2, 0], [3, 2, 0], color=BLACK)
        c4 = Line([3, 2, 0], [3, 0.5, 0], color=BLACK)
        c5 = Line(
            v1.get_terminals("negative"),
            [v1.get_terminals("positive")[0], -2, 0],
            color=BLACK,
        )
        c6 = Line([v1.get_terminals("positive")[0], -2, 0], [-0.5, -2, 0], color=BLACK)
        c7 = Line([0.5, -2, 0], [3, -2, 0], color=BLACK)
        c8 = Line([3, -2, 0], [3, -0.5, 0], color=BLACK)
        c9 = Line([-2, 2, 0], [-2, 1, 0], color=BLACK)
        c10 = Line([-2, 1, 0], [-0.5, 1, 0], color=BLACK)
        c11 = Line([1, 1, 0], [0.5, 1, 0], color=BLACK)
        c12 = Line([1, 1, 0], [1, -2, 0], color=BLACK)
        c13 = Line([2, 2, 0], [2, -1, 0], color=BLACK)
        c14 = Line([2, -1, 0], [0.5, -1, 0], color=BLACK)
        c15 = Line([-2, -1, 0], [-0.5, -1, 0], color=BLACK)
        c16 = Line([-2, -1, 0], [-2, -2, 0], color=BLACK)

        j1 = Dot(
            radius=0.08,
            color=BLACK,
        ).move_to([-2, 2, 0])
        j2 = Dot(
            radius=0.08,
            color=BLACK,
        ).move_to([2, 2, 0])
        j3 = Dot(
            radius=0.08,
            color=BLACK,
        ).move_to([1, -2, 0])
        j4 = Dot(
            radius=0.08,
            color=BLACK,
        ).move_to([-2, -2, 0])

        self.add(
            v1,
            r1,
            r2,
            r3,
            r4,
            r5,
            c1,
            c2,
            c3,
            c4,
            c5,
            c6,
            c7,
            c8,
            c9,
            c10,
            c11,
            c12,
            c13,
            c14,
            c15,
            c16,
            j1,
            j2,
            j3,
            j4,
        )


class een26(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        c1 = Line(
            [-3, -2, 0],
            [-3, 2, 0],
            color=BLACK,
        )
        c2 = Line([-3, 2, 0], [3, 2, 0], color=BLACK)
        c4 = Line([3, 2, 0], [3, -2, 0], color=BLACK)
        c6 = Line([3, -2, 0], [-3, -2, 0], color=BLACK)
        c7 = Line([-3, -2, 0], [-3, 2, 0], color=BLACK)
        c9 = Line([-2, 2, 0], [-2, 1, 0], color=BLACK)
        c10 = Line([-2, 1, 0], [1, 1, 0], color=BLACK)
        c12 = Line([1, 1, 0], [1, -2, 0], color=BLACK)
        c13 = Line([2, 2, 0], [2, -1, 0], color=BLACK)
        c14 = Line([2, -1, 0], [-2, -1, 0], color=BLACK)
        c16 = Line([-2, -1, 0], [-2, -2, 0], color=BLACK)

        j1 = Dot(
            radius=0.08,
            color=BLACK,
        ).move_to([-2, 2, 0])
        j2 = Dot(
            radius=0.08,
            color=BLACK,
        ).move_to([2, 2, 0])
        j3 = Dot(
            radius=0.08,
            color=BLACK,
        ).move_to([1, -2, 0])
        j4 = Dot(
            radius=0.08,
            color=BLACK,
        ).move_to([-2, -2, 0])

        self.add(
            c1,
            c2,
            c4,
            c6,
            c7,
            c9,
            c10,
            c12,
            c13,
            c14,
            c16,
            j1,
            j2,
            j3,
            j4,
        )


class een27(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        c1 = Line(
            [-3, -2, 0],
            [-3, 2, 0],
            color=BLACK,
        )
        c2 = Line([-3, 2, 0], [3, 2, 0], color=BLACK)
        c4 = Line([3, 2, 0], [3, -2, 0], color=BLACK)
        c6 = Line([3, -2, 0], [-3, -2, 0], color=BLACK)
        c7 = Line([-3, -2, 0], [-3, 2, 0], color=BLACK)
        c9 = Line([-2, 2, 0], [-2, 1, 0], color=BLACK)
        c10 = Line([-2, 1, 0], [1, 1, 0], color=BLACK)
        c12 = Line([1, 1, 0], [1, -2, 0], color=BLACK)
        c13 = Line([2, 2, 0], [2, -1, 0], color=BLACK)
        c14 = Line([2, -1, 0], [-2, -1, 0], color=BLACK)
        c16 = Line([-2, -1, 0], [-2, -2, 0], color=BLACK)

        j1 = Dot(
            radius=0.08,
            color=BLACK,
        ).move_to([-2, 2, 0])
        j2 = Dot(
            radius=0.08,
            color=BLACK,
        ).move_to([2, 2, 0])
        j3 = Dot(
            radius=0.08,
            color=BLACK,
        ).move_to([1, -2, 0])
        j4 = Dot(
            radius=0.08,
            color=BLACK,
        ).move_to([-2, -2, 0])

        ia1 = Arrow([-0.5, 0, 0], [0.5, 0, 0], color=RED).move_to([0, 2, 0])
        ia2 = Arrow([-0.5, 0, 0], [0.5, 0, 0], color=RED).move_to([0, 1, 0])
        ia3 = Arrow([0.5, 0, 0], [-0.5, 0, 0], color=RED).move_to([0, -1, 0])
        ia4 = Arrow([0.5, 0, 0], [-0.5, 0, 0], color=RED).move_to([0, -2, 0])
        ia5 = Arrow([0, 0.5, 0], [0, -0.5, 0], color=RED).move_to([3, 0, 0])
        ia6 = Arrow([0, -0.5, 0], [0, 0.5, 0], color=RED).move_to([-3, 0, 0])

        self.add(
            c1,
            c2,
            c4,
            c6,
            c7,
            c9,
            c10,
            c12,
            c13,
            c14,
            c16,
            j1,
            j2,
            j3,
            j4,
            ia1,
            ia2,
            ia3,
            ia4,
            ia5,
            ia6,
        )


class een28(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        c1 = Line(
            [-3, -2, 0],
            [-3, 2, 0],
            color=BLACK,
        )
        c2 = Line([-3, 2, 0], [3, 2, 0], color=BLACK)
        c3 = Line([3, -2, 0], [1, -2, 0], color=BLACK)
        c4 = Line([3, 2, 0], [3, -2, 0], color=BLACK)
        c5 = DashedLine([1, -2, 0], [-2, -2, 0], color=RED)
        c6 = Line([-2, -2, 0], [-3, -2, 0], color=BLACK)
        c7 = Line([-3, -2, 0], [-3, 2, 0], color=BLACK)
        c9 = DashedLine([-2, 2, 0], [-2, 1, 0], color=BLUE)
        c10 = DashedLine([-2, 1, 0], [1, 1, 0], color=BLUE)
        c12 = DashedLine([1, 1, 0], [1, -2, 0], color=BLUE)
        c13 = DashedLine([2, 2, 0], [2, -1, 0], color=GREEN)
        c14 = DashedLine([2, -1, 0], [-2, -1, 0], color=GREEN)
        c16 = DashedLine([-2, -1, 0], [-2, -2, 0], color=GREEN)

        j1 = Dot(
            radius=0.08,
            color=BLACK,
        ).move_to([-2, 2, 0])
        j2 = Dot(
            radius=0.08,
            color=BLACK,
        ).move_to([2, 2, 0])
        j3 = Dot(
            radius=0.08,
            color=BLACK,
        ).move_to([1, -2, 0])
        j4 = Dot(
            radius=0.08,
            color=BLACK,
        ).move_to([-2, -2, 0])

        self.add(
            c1,
            c2,
            c3,
            c4,
            c5,
            c6,
            c7,
            c9,
            c10,
            c12,
            c13,
            c14,
            c16,
            j1,
            j2,
            j3,
            j4,
        )


class een29(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        c1 = Line([-3, -2, 0], [-3, 2, 0], color=BLACK)
        c2 = Line([-3, 2, 0], [-2, 2, 0], color=BLACK)
        c3 = Line([-2, 2, 0], [3, 2, 0], color=BLUE)
        c4 = Line([3, 2, 0], [3, -2, 0], color=BLUE)
        c6 = Line([3, -2, 0], [1, -2, 0], color=BLUE)
        c7 = Line([1, -2, 0], [-3, -2, 0], color=BLACK)
        c8 = Line([-3, -2, 0], [-3, 2, 0], color=BLACK)
        c9 = Line([-2, 2, 0], [-2, 1, 0], color=BLUE)
        c10 = Line([-2, 1, 0], [1, 1, 0], color=BLUE)
        c12 = Line([1, 1, 0], [1, -2, 0], color=BLUE)
        c13 = Line([2, 2, 0], [2, -1, 0], color=BLACK)
        c14 = Line([2, -1, 0], [-2, -1, 0], color=BLACK)
        c16 = Line([-2, -1, 0], [-2, -2, 0], color=BLACK)

        j1 = Dot(
            radius=0.08,
            color=BLACK,
        ).move_to([-2, 2, 0])
        j2 = Dot(
            radius=0.08,
            color=BLACK,
        ).move_to([2, 2, 0])
        j3 = Dot(
            radius=0.08,
            color=BLACK,
        ).move_to([1, -2, 0])
        j4 = Dot(
            radius=0.08,
            color=BLACK,
        ).move_to([-2, -2, 0])

        self.add(
            c1, c2, c3, c4, c6, c7, c8, c9, c10, c12, c13, c14, c16, j1, j2, j3, j4
        )


class een30(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        c1 = Line(
            [-3, -2, 0],
            [-3, 2, 0],
            color=BLACK,
        )
        c2 = Line([-3, 2, 0], [3, 2, 0], color=RED)
        c4 = Line([3, 2, 0], [3, -2, 0], color=RED)
        c6 = Line([3, -2, 0], [-3, -2, 0], color=RED)
        c7 = Line([-3, -2, 0], [-3, 2, 0], color=RED)
        c13 = Line([2, 2, 0], [2, -1, 0], color=BLACK)
        c14 = Line([2, -1, 0], [-2, -1, 0], color=BLACK)
        c16 = Line([-2, -1, 0], [-2, -2, 0], color=BLACK)

        j2 = Dot(
            radius=0.08,
            color=BLACK,
        ).move_to([2, 2, 0])
        j4 = Dot(
            radius=0.08,
            color=BLACK,
        ).move_to([-2, -2, 0])

        self.add(
            c1,
            c2,
            c4,
            c6,
            c7,
            c13,
            c14,
            c16,
            j2,
            j4,
        )


class een31(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        c1 = Line(
            [-3, -2, 0],
            [-3, 2, 0],
            color=BLACK,
        )
        c1 = Line([2, 2, 0], [3, 2, 0], color=BLACK)
        c2 = Line([-3, 2, 0], [2, 2, 0], color=GREEN)
        c3 = Line([-2, -2, 0], [-3, -2, 0], color=GREEN)
        c4 = Line([3, 2, 0], [3, -2, 0], color=BLACK)
        c6 = Line([3, -2, 0], [2, -2, 0], color=BLACK)
        c7 = Line([-3, -2, 0], [-3, 2, 0], color=GREEN)
        c13 = Line([2, 2, 0], [2, -1, 0], color=GREEN)
        c14 = Line([2, -1, 0], [-2, -1, 0], color=GREEN)
        c16 = Line([-2, -1, 0], [-2, -2, 0], color=GREEN)

        j2 = Dot(
            radius=0.08,
            color=BLACK,
        ).move_to([2, 2, 0])
        j4 = Dot(
            radius=0.08,
            color=BLACK,
        ).move_to([-2, -2, 0])

        self.add(
            c1,
            c2,
            c3,
            c4,
            c6,
            c7,
            c13,
            c14,
            c16,
            j2,
            j4,
        )


class slm1(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        wl = Line([0, 2.5, 0], [0, -2.5, 0], color=BLACK).move_to([-5, 0, 0])
        wr = Line([0, 2.5, 0], [0, -2.5, 0], color=BLACK).move_to([5, 0, 0])
        wb = Line([-5, 0, 0], [5, 0, 0], color=BLACK).move_to([0, -2.5, 0])

        e1 = Polygon(
            [-0.5, 1.5, 0], [0.5, 1.5, 0], [0.5, -1.5, 0], [-0.5, -1.5, 0], color=BLACK
        ).move_to([-4, 1, 0])
        e2 = Polygon(
            [-0.5, 1.5, 0], [0.5, 1.5, 0], [0.5, -1.5, 0], [-0.5, -1.5, 0], color=BLACK
        ).move_to([4, 1, 0])

        w = Polygon(
            [-5, 1.5, 0],
            [5, 1.5, 0],
            [5, -2.5, 0],
            [-5, -2.5, 0],
            stroke_width=0,
            fill_color=BLUE,
            fill_opacity=0.75,
        )

        pt = MathTex(r"+\\+\\+", color=BLACK).move_to([4, 1, 0])
        nt = MathTex(r"-\\-\\-", color=BLACK).move_to([-4, 1, 0])

        vmb = Circle(radius=0.5, color=BLACK)
        vma = Arrow([-0.5, -0.5, 0], [0.5, 0.5, 0], color=BLACK)
        vm = VGroup(vmb, vma).move_to([0, 3, 0])

        c1 = Line([4, 2.5, 0], [4, 3, 0], color=BLACK)
        c2 = Line([4, 3, 0], [0.5, 3, 0], color=BLACK)
        c3 = Line([-4, 3, 0], [-0.5, 3, 0], color=BLACK)
        c4 = Line([-4, 2.5, 0], [-4, 3, 0], color=BLACK)

        self.add(wr, wl, wb, e1, e2, w, pt, nt, vm, c1, c2, c3, c4)


class slm2(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        wl = Line([0, 2.5, 0], [0, -2.5, 0], color=BLACK).move_to([-5, 0, 0])
        wr = Line([0, 2.5, 0], [0, -2.5, 0], color=BLACK).move_to([5, 0, 0])
        wb = Line([-5, 0, 0], [5, 0, 0], color=BLACK).move_to([0, -2.5, 0])

        e1 = Polygon(
            [-0.5, 1.5, 0], [0.5, 1.5, 0], [0.5, -1.5, 0], [-0.5, -1.5, 0], color=BLACK
        ).move_to([-4, 1, 0])
        e2 = Polygon(
            [-0.5, 1.5, 0], [0.5, 1.5, 0], [0.5, -1.5, 0], [-0.5, -1.5, 0], color=BLACK
        ).move_to([4, 1, 0])

        w = Polygon(
            [-5, 1.5, 0],
            [5, 1.5, 0],
            [5, -2.5, 0],
            [-5, -2.5, 0],
            stroke_width=0,
            fill_color=BLUE,
            fill_opacity=0.75,
        )

        pt = MathTex(r"+\\+\\+", color=BLACK).move_to([4, 1, 0])
        nt = MathTex(r"-\\-\\-", color=BLACK).move_to([-4, 1, 0])

        vmb = Circle(radius=0.5, color=BLACK)
        vma = Arrow([-0.5, -0.5, 0], [0.5, 0.5, 0], color=BLACK)
        vm = VGroup(vmb, vma).move_to([0, 3, 0])

        c1 = Line([4, 2.5, 0], [4, 3, 0], color=BLACK)
        c2 = Line([4, 3, 0], [0.5, 3, 0], color=BLACK)
        c3 = Line([-4, 3, 0], [-0.5, 3, 0], color=BLACK)
        c4 = Line([-4, 2.5, 0], [-4, 3, 0], color=BLACK)

        nam = Circle(radius=0.5, color=BLACK)
        nat = MathTex(r"Na^+", color=BLACK)
        nav = Arrow([-0.25, 0, 0], [-1.75, 0, 0], color=BLACK)
        na = VGroup(nam, nat, nav).move_to([-2, 0, 0])

        fem = Circle(radius=0.5, color=BLACK)
        fet = MathTex(r"Fe^-", color=BLACK)
        fev = Arrow([0.25, 0, 0], [1.75, 0, 0], color=BLACK)
        fe = VGroup(fem, fet, fev).move_to([2, 1, 0])

        self.add(wr, wl, wb, e1, e2, w, pt, nt, vm, c1, c2, c3, c4, na, fe)


class slm3(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        d1b = Polygon([-0.5, 1, 0], [-0.5, -1, 0], [0.5, 0, 0], color=BLACK)
        d1i = Line([0.5, 1, 0], [0.5, -1, 0], color=BLACK)
        d1 = VGroup(d1b, d1i)

        c1 = Line([-2.5, 0, 0], [-0.5, 0, 0], color=BLACK)
        c2 = Line([2.5, 0, 0], [0.5, 0, 0], color=BLACK)

        j1 = Dot(radius=0.08, color=BLACK).move_to([2.5, 0, 0])
        j2 = Dot(radius=0.08, color=BLACK).move_to([-2.5, 0, 0])

        i1a = Arrow([-1.5, 1.5, 0], [1.5, 1.5, 0], color=GREEN)
        i2a = Arrow([1.5, -1.5, 0], [-1.5, -1.5, 0], color=RED)

        i1t = Tex("Leitet", color=GREEN).move_to([0, 2, 0])
        i2t = Tex("Sperrt", color=RED).move_to([0, -2, 0])

        self.add(d1, c1, c2, j1, j2, i1a, i2a, i1t, i2t)


class magnet2(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        charge1 = Charge(-1, 3 * LEFT)
        charge2 = Charge(1, 1 * LEFT)

        charge3 = Charge(-1, 1 * RIGHT)
        charge4 = Charge(1, 3 * RIGHT)

        field = ElectricField(charge1, charge2, charge3, charge4)

        magnetP1 = Polygon(
            [-3.5, 0.5, 0],
            [-3.5, -0.5, 0],
            [-2, -0.5, 0],
            [-2, 0.5, 0],
            color=BLUE,
            fill_color=BLUE,
            fill_opacity=1,
        )
        textP1 = Text("S").move_to([-3, 0, 0])
        magnetN1 = Polygon(
            [-0.5, 0.5, 0],
            [-0.5, -0.5, 0],
            [-2, -0.5, 0],
            [-2, 0.5, 0],
            color=RED,
            fill_color=RED,
            fill_opacity=1,
        )
        textN1 = Text("N").move_to([-1, 0, 0])

        magnetP2 = Polygon(
            [0.5, 0.5, 0],
            [0.5, -0.5, 0],
            [2, -0.5, 0],
            [2, 0.5, 0],
            color=BLUE,
            fill_color=BLUE,
            fill_opacity=1,
        )
        textP2 = Text("S").move_to([1, 0, 0])
        magnetN2 = Polygon(
            [3.5, 0.5, 0],
            [3.5, -0.5, 0],
            [2, -0.5, 0],
            [2, 0.5, 0],
            color=RED,
            fill_color=RED,
            fill_opacity=1,
        )
        textN2 = Text("N").move_to([3, 0, 0])

        self.add(
            field,
            magnetP1,
            magnetN1,
            textP1,
            textN1,
            magnetP2,
            magnetN2,
            textP2,
            textN2,
        )


class magnet3(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        charge1 = Charge(1, 3 * LEFT)
        charge2 = Charge(-1, 1 * LEFT)

        charge3 = Charge(-1, 1 * RIGHT)
        charge4 = Charge(1, 3 * RIGHT)

        field = ElectricField(charge1, charge2, charge3, charge4)

        magnetP1 = Polygon(
            [-3.5, 0.5, 0],
            [-3.5, -0.5, 0],
            [-2, -0.5, 0],
            [-2, 0.5, 0],
            color=RED,
            fill_color=RED,
            fill_opacity=1,
        )
        textP1 = Text("N").move_to([-3, 0, 0])
        magnetN1 = Polygon(
            [-0.5, 0.5, 0],
            [-0.5, -0.5, 0],
            [-2, -0.5, 0],
            [-2, 0.5, 0],
            color=BLUE,
            fill_color=BLUE,
            fill_opacity=1,
        )
        textN1 = Text("S").move_to([-1, 0, 0])

        magnetP2 = Polygon(
            [0.5, 0.5, 0],
            [0.5, -0.5, 0],
            [2, -0.5, 0],
            [2, 0.5, 0],
            color=BLUE,
            fill_color=BLUE,
            fill_opacity=1,
        )
        textP2 = Text("S").move_to([1, 0, 0])
        magnetN2 = Polygon(
            [3.5, 0.5, 0],
            [3.5, -0.5, 0],
            [2, -0.5, 0],
            [2, 0.5, 0],
            color=RED,
            fill_color=RED,
            fill_opacity=1,
        )
        textN2 = Text("N").move_to([3, 0, 0])

        error = Polygon(
            [-0.2, 0.2, 0],
            [-0.2, -0.2, 0],
            [0.2, -0.2, 0],
            [0.2, 0.2, 0],
            color=WHITE,
            fill_color=WHITE,
            fill_opacity=1,
        )

        self.add(
            field,
            magnetP1,
            magnetN1,
            textP1,
            textN1,
            magnetP2,
            magnetN2,
            textP2,
            textN2,
            error,
        )


class LF1(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        wire = Wire(Line([0, 0, -1000], [0, 0, 1000]))
        magf = MagneticField(wire)
        dot = Dot(point=ORIGIN, color=BLACK)

        self.add(magf, dot)


class LF2(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        func = lambda pos: pos - DOWN * 1000
        vf = ArrowVectorField(func, color=BLUE)

        charge1 = Charge(3, ORIGIN)
        velvec = LabeledArrow(
            r"\vec{v}",
            start=ORIGIN,
            end=2 * RIGHT,
            color=BLACK,
            label_position=0.5,
            label_color=BLACK,
            frame_fill_color=WHITE,
        )
        lkvec = LabeledArrow(
            r"\vec{F}",
            start=[0, 0, 0],
            end=[-2, -2, 0],
            color=RED,
            label_position=0.5,
            label_color=BLACK,
            frame_fill_color=WHITE,
        )

        self.add(vf, charge1, velvec, lkvec)


class mf1(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        wire = Wire(Line([0, 0, -1000], [0, 0, 1000]))
        magf = MagneticField(wire)
        dot = Dot(point=ORIGIN, color=BLACK)

        fvec1 = Arrow(3 * RIGHT, 3 * RIGHT + 2 * UP, color=RED)
        fvec2 = Arrow(5 * RIGHT, 5 * RIGHT + 1 * UP, color=RED)

        self.add(magf, dot, fvec1, fvec2)


class mf2(ThreeDScene):
    def construct(self):

        self.camera.background_color = WHITE

        wire1 = Wire(
            ParametricFunction(
                lambda u: (
                    u * 0.07,
                    2 * np.cos(u),
                    2 * np.sin(u),
                ),
                t_range=(-11 / 4 * TAU, 11 / 4 * TAU, 0.01),
            ),
            color=BLACK,
        )
        mag_field = MagneticField(
            wire1,
            x_range=[-1, 1],
            y_range=[-1, 1],
        )
        self.set_camera_orientation(PI / 3, PI / 4)
        # self.set_camera_orientation(PI / 2)
        self.add(wire1, mag_field)


class mf3(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        wire = Wire(Circle(7).rotate(PI / 2, RIGHT))
        mag_field = MagneticField(
            wire,
            x_range=[-2, 1],
            y_range=[-2, 3],
        )

        magnetP = Polygon(
            [-2, 2, 0],
            [-2, 3, 0],
            [1, 3, 0],
            [1, 2, 0],
            color=RED,
            fill_color=RED,
            fill_opacity=1,
        )
        textP = Text("N").move_to([-0.5, 2.5, 0])
        magnetM = Polygon(
            [1, 3, 0],
            [1, -3, 0],
            [2, -3, 0],
            [2, 3, 0],
            color=GREY,
            fill_color=GREY,
            fill_opacity=1,
        )
        textN = Text("S").move_to([-0.5, -2.5, 0])
        magnetN = Polygon(
            [-2, -2, 0],
            [-2, -3, 0],
            [1, -3, 0],
            [1, -2, 0],
            color=BLUE,
            fill_color=BLUE,
            fill_opacity=1,
        )

        self.add(mag_field, magnetP, magnetM, magnetN, textP, textN)


class mf4(ThreeDScene):
    def construct(self):

        self.camera.background_color = WHITE

        wire = Wire(Circle(10).rotate(PI / 2, UP))
        mag_field1 = MagneticField(
            wire,
            x_range=[-1, 1],
            y_range=[-3, 3],
        ).move_to([0, 0, 2])
        mag_field2 = MagneticField(
            wire,
            x_range=[-1, 1],
            y_range=[-3, 3],
        ).move_to([0, 0, 1])
        mag_field3 = MagneticField(
            wire,
            x_range=[-1, 1],
            y_range=[-3, 3],
        )
        mag_field4 = MagneticField(
            wire,
            x_range=[-1, 1],
            y_range=[-3, 3],
        ).move_to([0, 0, -1])
        mag_field5 = MagneticField(
            wire,
            x_range=[-1, 1],
            y_range=[-3, 3],
        ).move_to([0, 0, -2])

        plate = Polygon(
            [0, -2.5, 2.5],
            [0, 3.5, 2.5],
            [0, 3.5, -1.5],
            [0, -2.5, -1.5],
            color=GREY,
            fill_color=GREY,
            fill_opacity=0.25,
        )

        self.set_camera_orientation(PI / 3, PI / 4)

        self.add(plate, mag_field1, mag_field2, mag_field3, mag_field4, mag_field5)


class mf5(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        tran = Line(start=[0, 5, 0], end=[0, -5, 0], color=BLACK)

        b1 = LabeledArrow(
            r"\vec{B}_1",
            label_color=BLACK,
            frame_fill_color=WHITE,
            start=[-3, -3, 0],
            end=[0, 0, 0],
            color=RED,
        )

        b2 = LabeledArrow(
            r"\vec{B}_2",
            label_color=BLACK,
            frame_fill_color=WHITE,
            start=[0, 0, 0],
            end=[3, 1, 0],
            color=BLUE,
        )

        mu1 = MathTex(r"\mu_1", color=BLACK).move_to([-1, 3, 0])

        mu2 = MathTex(r"\mu_2", color=BLACK).move_to([1, 3, 0])

        self.add(tran, b1, b2, mu1, mu2)


class zef1(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        metal = Polygon(
            [-1, 3, 0],
            [1, 3, 0],
            [1, -3, 0],
            [-1, -3, 0],
            color=BLACK,
            fill_color=GREY,
            fill_opacity=0.75,
        )
        vv = Arrow3D([0, 0, 1], [0, 0, 3], color=RED)
        c = Charge(1, [1000, 0, 0])
        ef = ElectricField(c)
        c1 = Charge(-10, [0, 2.5, 0])
        c2 = Charge(10, [0, -2.5, 0])

        self.add(metal, vv, ef, c1, c2)


class zef2(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        l11 = Line([-1, 0, 0], [-0.5, 0, 0], path_arc=-180 * DEGREES)
        l12 = Line([-0.5, 0, 0], ORIGIN, path_arc=-180 * DEGREES)
        l13 = Line([1, 0, 0], [0.5, 0, 0], path_arc=180 * DEGREES)
        l14 = Line([0.5, 0, 0], ORIGIN, path_arc=180 * DEGREES)
        l1 = VGroup(l11, l12, l13, l14).move_to([-2, 0, 0]).set_color(BLACK)
        l21 = Line([-1, 0, 0], [-0.5, 0, 0], path_arc=-180 * DEGREES)
        l22 = Line([-0.5, 0, 0], ORIGIN, path_arc=-180 * DEGREES)
        l23 = Line([1, 0, 0], [0.5, 0, 0], path_arc=180 * DEGREES)
        l24 = Line([0.5, 0, 0], ORIGIN, path_arc=180 * DEGREES)
        l2 = VGroup(l21, l22, l23, l24).move_to([2, 0, 0]).set_color(BLACK)

        c1 = Line([-4, -0.1, 0], [-3, -0.1, 0], color=BLACK)
        c2 = Line([4, -0.1, 0], [3, -0.1, 0], color=BLACK)
        c3 = Line([1, -0.1, 0], [-1, -0.1, 0], color=BLACK)

        j1 = Dot([-4, -0.1, 0], radius=0.08, color=BLACK)
        j2 = Dot([4, -0.1, 0], radius=0.08, color=BLACK)

        lt1 = MathTex(r"L_1", color=BLACK).move_to([-2, 1, 0])
        lt2 = MathTex(r"L_2", color=BLACK).move_to([2, 1, 0])

        self.add(l1, l2, c1, c2, c3, j1, j2, lt1, lt2)


class zef3(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        l11 = Line([-1, 0, 0], [-0.5, 0, 0], path_arc=-180 * DEGREES)
        l12 = Line([-0.5, 0, 0], ORIGIN, path_arc=-180 * DEGREES)
        l13 = Line([1, 0, 0], [0.5, 0, 0], path_arc=180 * DEGREES)
        l14 = Line([0.5, 0, 0], ORIGIN, path_arc=180 * DEGREES)
        l1 = VGroup(l11, l12, l13, l14).move_to([0, 1, 0]).set_color(BLACK)
        l21 = Line([-1, 0, 0], [-0.5, 0, 0], path_arc=-180 * DEGREES)
        l22 = Line([-0.5, 0, 0], ORIGIN, path_arc=-180 * DEGREES)
        l23 = Line([1, 0, 0], [0.5, 0, 0], path_arc=180 * DEGREES)
        l24 = Line([0.5, 0, 0], ORIGIN, path_arc=180 * DEGREES)
        l2 = VGroup(l21, l22, l23, l24).move_to([0, -1, 0]).set_color(BLACK)

        c1 = Line([-3, -0.1, 0], [-2, -0.1, 0], color=BLACK)
        c2 = Line([3, -0.1, 0], [2, -0.1, 0], color=BLACK)
        c3 = Line([2, 0.9, 0], [2, -1.1, 0], color=BLACK)
        c4 = Line([2, 0.9, 0], [1, 0.9, 0], color=BLACK)
        c5 = Line([-1, 0.9, 0], [-2, 0.9, 0], color=BLACK)
        c6 = Line([2, -1.1, 0], [1, -1.1, 0], color=BLACK)
        c7 = Line([-2, -1.1, 0], [-1, -1.1, 0], color=BLACK)
        c8 = Line([-2, 0.9, 0], [-2, -1.1, 0], color=BLACK)

        j1 = Dot([-3, -0.1, 0], radius=0.08, color=BLACK)
        j2 = Dot([3, -0.1, 0], radius=0.08, color=BLACK)

        lt1 = MathTex(r"L_1", color=BLACK).move_to([0, 2, 0])
        lt2 = MathTex(r"L_2", color=BLACK).move_to(ORIGIN)

        self.add(l1, l2, c1, c2, c3, c4, c5, c6, c7, c8, j1, j2, lt1, lt2)


class zef4(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        ax = Axes(
            y_range=[-1.5, 1.5, 3],
            x_range=[0, (5 * PI) / 2, PI / 2],
            tips=False,
        ).set_color(BLACK)
        labels = ax.get_axis_labels(Tex("t"), Tex("U")).set_color(BLACK)

        f1 = ax.plot(lambda x: np.sin(x), color=RED)

        self.add(ax, labels, f1)


class zef5(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        ax = Axes(
            y_range=[-1.5, 1.5, 3],
            x_range=[0, (5 * PI) / 2, PI / 2],
            tips=False,
        ).set_color(BLACK)
        labels = ax.get_axis_labels(Tex("t"), Tex("U")).set_color(BLACK)

        f1 = ax.plot(lambda x: np.sin(x), color=RED)
        f2 = ax.plot(lambda x: np.sin(x + 120 * DEGREES), color=BLUE)

        self.add(ax, labels, f1, f2)


class zef5(Scene):
    def construct(self):

        self.camera.background_color = WHITE

        ax = Axes(
            y_range=[-1.5, 1.5, 3],
            x_range=[0, (5 * PI) / 2, PI / 2],
            tips=False,
        ).set_color(BLACK)
        labels = ax.get_axis_labels(Tex("t"), Tex("U")).set_color(BLACK)

        f1 = ax.plot(lambda x: np.sin(x), color=RED)
        f2 = ax.plot(lambda x: np.sin(x + 120 * DEGREES), color=BLUE)
        f3 = ax.plot(lambda x: np.sin(x + 240 * DEGREES), color=GREEN)

        self.add(ax, labels, f1, f2, f3)
