φυβλαςのβλογ
phyblasのブログ



manim บทที่ ๔: การจัดกลุ่มและวางวัตถุเป็นตาราง
เขียนเมื่อ 2021/03/12 00:04
แก้ไขล่าสุด 2021/09/28 16:42

ต่อจาก บทที่ ๓

ในบทที่แล้วได้แสดงวิธีการสร้างและจัดวางวัตถุในเบื้องต้นไปแล้ว สำหรับบทนี้จะเป็นการนำวัตถุมาจับกลุ่มและวางเป็นตารางอย่างเป็นระบบมากขึ้น




การจัดกลุ่มวัตถุแล้วจัดเรียง

วิธีหนึ่งที่สะดวกในการใช้จัดวางวัตถุก็คือนำวัตถุมาจับกลุ่มกันโดยเป็นออบเจ็กต์ VGroup แล้วใช้เมธอดสำหรับจัดเรียง

เริ่มจากเมธอด .arrange() ใช้สำหรับจัดเรียงโดยเอาวัตถุทั้งหมดในกลุ่มมาเรียงต่อกันตามทิศที่กำหนด

ตัวอย่างการใช้
import manimlib as mnm

class Manimala(mnm.Scene):
    def construct(self):
        text1 = mnm.Text('ซ้าย',color='#aaeeaa',size=3)
        text2 = mnm.Text('ขวา',color='#eeaaaa',size=4)
        vg = mnm.VGroup(text1,text2)
        vg.arrange(mnm.RIGHT)
        self.add(vg)



วัตถุที่จะนำมารวมกลุ่มใน VGroup จะมีกี่ตัวก็ได้ ซึ่งก็จะเรียงไล่ไปตามลำดับที่ใส่

ค่าที่ต้องใส่ใน .arrange() คือทิศทางการเรียง โดยค่าตั้งต้นคือ RIGHT คือจะเรียงจากซ้ายไปขวา

อีกตัวอย่าง คราวนี้ลองเปลี่ยนเป็น UP เรียงตามแนวตั้งโดยวางขึ้นไปด้านบนเรื่อยๆ
import manimlib as mnm

class Manimala(mnm.Scene):
    def construct(self):
        text1 = mnm.Text('ล่าง',color='#aaeeaa',size=2.4)
        text2 = mnm.Text('กลาง',color='#eeaaaa',size=3.6)
        text3 = mnm.Text('บน',color='#aaaaee',size=4.8)
        vg = mnm.VGroup(text1,text2,text3)
        vg.arrange(mnm.UP)
        self.add(vg)






การจัดกลุ่มวัตถุที่จัดกลุ่มแล้ว

ออบเจ็กต์ที่ได้จากการจัดกลุ่มแล้วอาจนำมาจัดกลุ่มอีกรอบได้

เช่นลองจัดกลุ่มเรียงแนวตั้งแล้วค่อยรวมแนวนอน
import manimlib as mnm

class Manimala(mnm.Scene):
    def construct(self):
        text1 = mnm.Text('ขวาล่าง',color='#aaeeaa',size=2.5)
        text2 = mnm.Text('ขวาบน',color='#eeaaaa',size=3.5)
        text3 = mnm.Text('ซ้าย',color='#aaaaee',size=4.5)
        vg1 = mnm.VGroup(text1,text2)
        vg1.arrange(mnm.UP)
        vg2 = mnm.VGroup(vg1,text3)
        vg2.arrange(mnm.LEFT)
        self.add(vg2)



ลองจัดแนวนอนก่อนค่อยรวมแนวตั้ง
import manimlib as mnm

class Manimala(mnm.Scene):
    def construct(self):
        text1 = mnm.Text('ขวาบน',color='#aaeeaa',size=2.5)
        text2 = mnm.Text('ซ้ายบน',color='#eeaaaa',size=3.5)
        text3 = mnm.Text('ล่าง',color='#aaaaee',size=4.5)
        vg1 = mnm.VGroup(text1,text2)
        vg1.arrange(mnm.LEFT)
        vg2 = mnm.VGroup(vg1,text3)
        vg2.arrange(mnm.DOWN)
        self.add(vg2)



จัดในแนวนอน ๒​ แถว แล้วเอามารวมกันในแนวตั้งอีกที
import manimlib as mnm

class Manimala(mnm.Scene):
    def construct(self):
        text1 = mnm.Text('ขวาบน',color='#aaeeaa',size=2)
        text2 = mnm.Text('กลางบน',color='#eeaaaa',size=3)
        text3 = mnm.Text('ซ้ายบน',color='#aaaaee',size=1.5)
        vg1 = mnm.VGroup(text1,text2,text3)
        vg1.arrange(mnm.LEFT)
        
        text4 = mnm.Text('ซ้ายล่าง',color='#eeeeaa',size=3.5)
        text5 = mnm.Text('ขวาล่าง',color='#aaeeee',size=2.5)
        vg2 = mnm.VGroup(text4,text5)
        vg2.arrange(mnm.RIGHT)
        vg3 = mnm.VGroup(vg1,vg2)
        vg3.arrange(mnm.DOWN)
        self.add(vg3)






การกำหนดระยะเว้นห่างในการจัดเรียง

ระยะห่างระหว่างแต่ละตัวที่นำมาจัดเรียงกำหนดได้โดยใส่คีย์เวิร์ด buff ใน .arrange()

ตัวอย่าง
import manimlib as mnm

class Manimala(mnm.Scene):
    def construct(self):
        text1 = mnm.Text('ก',color='#aaeeaa',size=6)
        text2 = mnm.Text('ข',color='#eeaaaa',size=5)
        text3 = mnm.Text('ค',color='#aaaaee',size=7)
        vg = mnm.VGroup(text1,text2,text3)
        vg.arrange(mnm.RIGHT,buff=2)
        self.add(vg)






การจัดเรียงวัตถุเป็นตาราง

หากต้องการนำวัตถุมาจัดเรียงกันเป็นตารางก็ทำได้โดยใช้เมธอด .arrange_in_grid() โดยระบุจำนวนหลักแนวนอนที่คีย์เวิร์ด n_cols

ตัวอย่างเช่น
import manimlib as mnm

class Manimala(mnm.Scene):
    def construct(self):
        vg = mnm.VGroup(
            mnm.Text('ก',size=2),
            mnm.Text('ข',size=2.3),
            mnm.Text('ค',size=2.6),
            mnm.Text('ง',size=2.9),
            mnm.Text('จ',size=3.2),
            mnm.Text('ช',size=3.5),
            mnm.Text('ญ',size=3.8),
        )
        vg.arrange_in_grid(n_cols=3,buff=0.5)
        self.add(vg)



ในการเรียงนั้นปกติจะเรียงในแนวนอนให้เต็มแถวก่อนแล้วจึงไล่ไปแถวถัดไป แต่ถ้าจะให้เรียงในแนวตั้งก่อนให้ใส่ fill_rows_first=False แล้วกำหนดจำนวนแถวแนวตั้งที่คีย์เวิร์ด n_rows

ตัวอย่าง
import manimlib as mnm

class Manimala(mnm.Scene):
    def construct(self):
        vg = mnm.VGroup(
            mnm.Text('หนึ่ง',size=3),
            mnm.Text('สอง',size=3.3),
            mnm.Text('สาม',size=3.6),
            mnm.Text('สี่',size=3.9),
            mnm.Text('ห้า',size=4.2),
        )
        vg.arrange_in_grid(n_rows=2,buff=1.1,fill_rows_first=False)
        self.add(vg)



ค่าระยะห่างที่ใส่ในคีย์เวิร์ด buff นั้นเป็นการกำหนดระยะเว้นห่างทั้งในแนวตั้งและแนวนอน แต่หากต้องการให้แนวตั้งและนอนเว้นระยะต่างกันก็กำหนดแยกได้โดยใช้คีย์เวิร์ด h_buff กับ v_buff แทน

เช่น
import manimlib as mnm

class Manimala(mnm.Scene):
    def construct(self):
        vg = mnm.VGroup(
            mnm.Text('อี',size=3),
            mnm.Text('เอ้อร์',size=3),
            mnm.Text('ซาน',size=3),
            mnm.Text('ซื่อ',size=3),
            mnm.Text('อู่',size=3),
            mnm.Text('ลิ่ว',size=3),
        )
        vg.arrange_in_grid(n_cols=2,h_buff=1.5,v_buff=0.2)
        self.add(vg)






การคัดลอกวัตถุซ้ำๆทำเป็นตาราง

หากมีวัตถุตัวหนึ่งที่ต้องการสร้างให้มีหลายๆอันเอามาไล่เรียงเป็นตารางก็อาจทำได้โดยใช้เมธอด .get_grid()

ตัวอย่างการใช้
import manimlib as mnm

class Manimala(mnm.Scene):
    def construct(self):
        text = mnm.Text('๑๒',color='#aacc55')
        grid = text.get_grid(n_rows=9,n_cols=11,buff=0.5)
        self.add(grid)





อ่านบทถัดไป >> บทที่ ๕





-----------------------------------------

囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧

ดูสถิติของหน้านี้

หมวดหมู่

-- คอมพิวเตอร์ >> เขียนโปรแกรม >> python >> manim

ไม่อนุญาตให้นำเนื้อหาของบทความไปลงที่อื่นโดยไม่ได้ขออนุญาตโดยเด็ดขาด หากต้องการนำบางส่วนไปลงสามารถทำได้โดยต้องไม่ใช่การก๊อปแปะแต่ให้เปลี่ยนคำพูดเป็นของตัวเอง หรือไม่ก็เขียนในลักษณะการยกข้อความอ้างอิง และไม่ว่ากรณีไหนก็ตาม ต้องให้เครดิตพร้อมใส่ลิงก์ของทุกบทความที่มีการใช้เนื้อหาเสมอ

目次

日本による名言集
モジュール
-- numpy
-- matplotlib

-- pandas
-- manim
-- opencv
-- pyqt
-- pytorch
機械学習
-- ニューラル
     ネットワーク
ภาษา javascript
ภาษา mongol
言語学
maya
確率論
日本での日記
中国での日記
-- 北京での日記
-- 香港での日記
-- 澳門での日記
台灣での日記
北欧での日記
他の国での日記
qiita
その他の記事

記事の類別



ติดตามอัปเดตของบล็อกได้ที่แฟนเพจ

  記事を検索

  おすすめの記事

ตัวอักษรกรีกและเปรียบเทียบการใช้งานในภาษากรีกโบราณและกรีกสมัยใหม่
ที่มาของอักษรไทยและความเกี่ยวพันกับอักษรอื่นๆในตระกูลอักษรพราหมี
การสร้างแบบจำลองสามมิติเป็นไฟล์ .obj วิธีการอย่างง่ายที่ไม่ว่าใครก็ลองทำได้ทันที
รวมรายชื่อนักร้องเพลงกวางตุ้ง
ภาษาจีนแบ่งเป็นสำเนียงอะไรบ้าง มีความแตกต่างกันมากแค่ไหน
ทำความเข้าใจระบอบประชาธิปไตยจากประวัติศาสตร์ความเป็นมา
เรียนรู้วิธีการใช้ regular expression (regex)
การใช้ unix shell เบื้องต้น ใน linux และ mac
g ในภาษาญี่ปุ่นออกเสียง "ก" หรือ "ง" กันแน่
ทำความรู้จักกับปัญญาประดิษฐ์และการเรียนรู้ของเครื่อง
ค้นพบระบบดาวเคราะห์ ๘ ดวง เบื้องหลังความสำเร็จคือปัญญาประดิษฐ์ (AI)
หอดูดาวโบราณปักกิ่ง ตอนที่ ๑: แท่นสังเกตการณ์และสวนดอกไม้
พิพิธภัณฑ์สถาปัตยกรรมโบราณปักกิ่ง
เที่ยวเมืองตานตง ล่องเรือในน่านน้ำเกาหลีเหนือ
ตระเวนเที่ยวตามรอยฉากของอนิเมะในญี่ปุ่น
เที่ยวชมหอดูดาวที่ฐานสังเกตการณ์ซิงหลง
ทำไมจึงไม่ควรเขียนวรรณยุกต์เวลาทับศัพท์ภาษาต่างประเทศ

ไทย

日本語

中文