Esempio n. 1
0
    def construct(self):

        title = TextMobject("Hypotéza kontinua").to_edge(UP)
        question = TextMobject(
            "Je $|\mathbb R|$ nejmenší nespočetná mohutnost?")
        question.shift(DOWN)

        self.add(title)
        cardinalities = TexMobject("0, 1, 2, \ldots", "\\aleph_0", "\\aleph_1",
                                   "=", "|\\mathbb R|", "?")
        cardinalities.set_color(GREEN)
        cardinalities[1].next_to(cardinalities[0], coor_mask=X_MASK, buff=1)
        VGroup(cardinalities[2:]).next_to(cardinalities[1],
                                          coor_mask=X_MASK,
                                          buff=0.5)
        cardinalities.next_to(title, DOWN)
        count_brace = BraceText(VGroup(cardinalities[:2]), "spočetné")
        self.play(
            count_brace.creation_anim(),
            *map(FadeIn,
                 [cardinalities[0], cardinalities[1], cardinalities[4]]))
        self.play(Write(question))

        arrow_end = (cardinalities[1].get_center() +
                     cardinalities[4].get_center()) / 2
        arrow = Arrow(arrow_end + DOWN, arrow_end)

        why_not_answer = TextMobject("Proč by tu mělo\\\\ cokoli být?",
                                     alignment="\\raggedright")
        why_not_answer.next_to(arrow, DOWN, aligned_edge=LEFT)
        why_not_answer.shift(0.5 * LEFT)

        self.wait_to(22)
        self.play(ShowCreation(arrow), FadeIn(why_not_answer))

        self.wait_to(30.5)
        self.play(FadeOut(VGroup(arrow, why_not_answer)))  # 31.5
        why_answer = VGroup(cardinalities[3], cardinalities[5])
        why_answer.set_color(WHITE)
        self.play(Write(cardinalities[2]))  # omega1
        self.play(Write(why_answer))

        omega1 = Omega1()
        make_half_ordinal(omega1[1])
        reals = NumberLine(x_min=-4, x_max=4)
        reals.set_color(WHITE)

        reals.to_edge(DOWN)
        omega1.next_to(reals, UP, buff=2)
        self.wait_to(50)
        self.play(FadeOut(question))
        self.play(FadeIn(reals), FadeIn(omega1))

        positions_num = 50
        positions = np.expand_dims(np.linspace(-4, 4, positions_num),
                                   1) * RIGHT
        positions_real = positions + reals.get_edge_center(UP) + UP * 0.1
        positions_omega1 = positions + omega1.get_edge_center(
            DOWN) + DOWN * 0.1
        positions_omega1 = list(positions_omega1)
        random.shuffle(positions_omega1)

        matching = VGroup([
            Line(start, end)
            for start, end in zip(positions_omega1, positions_real)
        ])
        matching.set_color(BLUE)
        self.play(ShowCreation(
            matching,
            submobject_mode="all_at_once",
        ))
        self.wait_to(60 + 1)
        self.play(FadeOut(matching))
        self.wait_to(60 + 10.5)