Manim
Σχετικά με το manim

Τι είναι το Manim
Με δυο λόγια το manim (συντομογραφία για το Mathematical Animation Engine) είναι μια εφαρμογή παραγωγής κινουμένων εικόνων (animations) βασισμένο στη γλώσσα προγραμματισμού python. Αν ο στόχος σας είναι η δημιουργία υψηλού επιπέδου animations, τότε το manim είναι σχεδόν μονόδρομος.
Δημιουργός και ιστορία του manim
Ο δημιουργός του manim είναι ο μαθηματικός Grant Sanderson ο οποίος έχει το πασίγνωστο σε όσους ασχολούνται με τα Μαθηματικά, κανάλι στο youtube με τίτλο 3Blue1Brown το οποίο έχει περίπου 5 εκατομμύρια συνδρομητές. Η δημιουργία του Manim ξεκίνησε σαν προσωπικό project του Sanderson ο οποίος θέλοντας να εξασκήσει τις δυνατότητες του στον προγραμματισμό αποφάσισε να δημιουργήσει μια βιβλιοθήκη γραφικών στη python. Έτσι το 2015 ανέβασε το πρώτο του βίντεο στο κανάλι του στο youtube. Στα επόμενα χρόνια το κανάλι έγινε ιδιαίτερα δημοφιλές και το 2020 μια ομάδα προγραμματιστών ανέλαβαν να βελτιώσουν τον κώδικα και να δημιουργήσουν οδηγίες για τη λειτουργία του προγράμματος που πλεον ονομάζεται ManimCE (manim community edition). Αυτή τη στιγμή βρίσκεται στην έκδοση 0.16.0 και η οποία είναι αυτή που θα χρησιμοποιήσω και για τα παραδείγματα που θα δούμε αργότερα.
Εγκατάσταση και λειτουργία του manim
Η εγκατάσταση του manim στα windows γίνεται με αρκετούς τρόπους, αλλά κατα τη γνώμη μου ο πιο απλός είναι με τη βοήθεια του Chocolatey. Αναλυτικές οδηγίες μπορείτε να βρείτε εδώ. Αν θέλετε να γράφετε μαθηματικά σύμβολα απαραίτητη είναι η εγκατάσταση μιας διανομής του Latex όπως το MikTex. Η εκμάθηση του manim όμως δεν είναι και τόσο απλή. Χρειάζεται γνώσεις Latex αλλά και κάποιες βασικές γνώσεις προγραμματισμού σε python. Ο καλύτερος προς το παρόν τρόπος είναι η παρακολούθηση video στο youtube, τα παραδείγματα που θα βρείτε στη σελίδα του ManimCE και βέβαια αρκετή υπομονή και εξάσκηση. Τα αποτελέσματα όμως αξίζουν τον κόπο. Αν υπάρχει ενδιαφέρον μπορώ να εξηγήσω κάποια βασικά πρώτα στοιχεία για την κατασκευή μαθηματικών animations.
Παραδείγματα με το manimCE
Το πλεονέκτημα της χρήσης video κατά την διδασκαλία είναι πολλαπλά και όσοι ασχολούμαστε με την εκπαίδευση γνωρίζουμε ότι η κλασσική διδασκαλία ενισχυμένη με κινούμενες εικόνες βοηθά το μαθητή στη καλύτερη κατανόηση μιας έννοιας.
Στο παρακάτω video βλέπουμε γεωμετρικά την επίλυση μιας ανίσωσης της μορφής \( | x-x_0 |<\rho \) .
Αν έχετε απορία πως δημιουργούνται τα animations δείτε τον κώδικα που παράγει το παραπάνω video και αν θέλετε οποιαδήποτε βοήθεια για το τι κάνει η κάθε εντολή μου το λέτε.
from manim import *
class Absolut_Value(Scene):
def construct(self):
obj=Dot()
t1=MathTex("|x-1|<2","\\Leftrightarrow -1<x<3")
text1=Text("Κύκλος με κέντρο")
text2=Text("και ακτίνα ")
l0 = NumberLine(
x_range=[-5, 5, 1],
length=10,
color=BLUE,
include_numbers=True,
label_direction=UP,
)
t1[0][3].set_color(YELLOW)
t1[0][6].set_color(RED)
t1.to_edge(UL)
text1.scale(0.6)
text2.scale(0.6)
text1.move_to(t1.get_center()+DOWN+LEFT)
self.play(Write(t1[0][0:7]))
self.play(Write(text1))
self.play(t1[0][3].copy().animate.next_to(text1,RIGHT),run_time=2)
self.add(l0)
obj.shift(RIGHT)
self.play(Write(obj))
c1=Circle(radius=2 ,color=RED)
c1.shift(RIGHT)
self.play(Create(c1))
text2.next_to(text1,RIGHT,buff=0.7)
text2.shift(UP*0.05)
self.play(Write(text2))
self.play(t1[0][6].copy().animate.next_to(text2,RIGHT),run_time=2)
line = Line([-1, 0, 0], [1, 0, 0])
line.set_stroke(color=GREEN, width=8)
self.play(Create(line))
self.wait()
self.play(Rotate(line.copy(),angle=PI,about_point=[1,0,0]), run_time=2)
self.wait()
self.play(Write(t1[1]),run_time=2)
self.wait()
Αντίστοιχα μπορούμε να δούμε και την επίλυση ανίσωσης της μορφής \( | x-x_0 |>\rho \) .
Ένα πιο πολύπλοκο παράδειγμα είναι και το παρακάτω, όπου μπορούμε να δείξουμε τον υπολογισμό της παραγώγου μιας σύνθετης συνάρτησης.
Ας δούμε και ένα παράδειγμα από τη Γεωμετρία. Στο παρακάτω video κάνουμε την απόδειξη του θεωρήματος "Το άθροισμα των γωνιών κάθε τριγώνου είναι 180 μοίρες".
Ελπίζω να πήρατε μια πρώτη ιδέα για τις δυνατότητες του manim. Θα ακολουθήσουν παραδείγματα με γραφικές παραστάσεις συναρτήσεων.