φυβλαςのβλογ
บล็อกของ phyblas



manim บทที่ ๑๔: การใส่รูปหลายเหลี่ยม
เขียนเมื่อ 2021/03/12 00:14

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

บทนี้จะเป็นเรื่องของการสร้างรูปหลายเหลี่ยมชนิดต่างๆ




การวาดรูปหลายเหลี่ยมทั่วไป (Polygon)

รูปหลายเหลี่ยมโดยทั่วไปสร้างขึ้นได้จากคลาส Polygon โดยค่าที่ต้องใส่คือตำแหน่งจุดมุมของรูปเหลี่ยมนั้นๆ โดยจะกำหนดกี่จุดก็ได้

ตัวอย่าง ลองสร้างสามเหลี่ยมโดยกำหนดตำแหน่งจุดมุมทั้ง ๓
import manimlib as mnm
import numpy as np

class Manimala(mnm.Scene):
    def construct(self):
        samliam = mnm.Polygon(np.array([0,-2,0]),
                              np.array([6,0,0]),
                              np.array([-4,3,0]),
                              fill_color='#6644ff',
                              fill_opacity=1,
                              color='#ffaaaa',
                              stroke_width=12)
        self.play(
            mnm.Write(samliam),
            run_time=1.2
        )
        self.wait(0.3)



คีย์เวิร์ด fill_color, fill_opacity, color, stroke_width นั้นเหมือนกับที่ใช้กับวัตถุวงกลมในบทที่แล้ว




การปรับให้มุมโค้งมนด้วยเมธอด .round_corners()

รูปหลายเหลี่ยมสามารถปรับส่วนมุมให้โค้งมนได้ โดยใช้เมธอด .round_corners() โดยใส่ค่ารัศมีส่วนโค้งลงไป

เมธอดนี้สามารถใช้กับ .animation เพื่อทำภาพเคลื่อนไหวให้มุมค่อยๆเปลี่ยนเป็นโค้งมนลงไปได้

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

class Manimala(mnm.Scene):
    def construct(self):
        samliam = mnm.Polygon(np.array([6,-2,0]),
                              np.array([-6.5,-3,0]),
                              np.array([1,3,0]),
                              fill_color='#893e7c',
                              fill_opacity=1,
                              color='#d7bae8')
        self.play(
            samliam.animate.round_corners(0.8),
            run_time=1.2
        )
        self.wait(0.3)






การวาดสี่เหลี่ยมจตุรัส (Square)

คลาส Square เป็นคลาสย่อยของคลาส Polygon เอาไว้ใช้สร้างสี่เหลี่ยมจตุรัสซึ่งมีความยาวด้านตามที่กำหนด

ตัวอย่าง ลองสร้างสี่เหลี่ยมจตุรัสหลายๆอันไล่ขนาดไปเรื่อยๆ
import manimlib as mnm

class Manimala(mnm.Scene):
    def construct(self):
        lis_siliam = []
        for i in range(11):
            siliam = mnm.Square((2+i)/8, # ขนาดด้าน
                                fill_color='#72c7d6',
                                fill_opacity=0.8)
            lis_siliam.append(siliam)
        vg = mnm.VGroup(*lis_siliam) # นำมารวมกลุ่ม
        vg.arrange(mnm.LEFT) # จัดให้เรียงต่อกันไปทางซ้าย
        self.play(
            mnm.Write(vg),
            run_time=1.5
        )






การวาดสี่เหลี่ยมผืนผ้า (Rectangle)

คลาส Rectangle เป็นคลาสย่อยของคลาส Polygon เอาไว้ใช้สร้างสี่เหลี่ยมผืนผ้า โดยกำหนดขนาดด้านกว้างและสูง

ตัวอย่าง ลองสร้างสี่เหลี่บมผืนผ้าหลายๆอันไล่ขนาดวางเรียงกัน
import manimlib as mnm
import numpy as np

class Manimala(mnm.Scene):
    def construct(self):
        lis_siliam = []
        for i in range(14):
            siliam = mnm.Rectangle((2+i)/12, # กว้าง
                                   1+5*i/15, # สูง
                                   fill_color='#8c72d6',
                                   fill_opacity=0.9)
            lis_siliam.append(siliam)
        vg = mnm.VGroup(*lis_siliam) # นำมารวมกลุ่ม
        vg.arrange(mnm.RIGHT) # จัดให้เรียงต่อกันไปทางขวา
        self.play(
            mnm.Write(vg),
            run_time=1.5
        )






การวาดสี่เหลี่ยมผืนผ้ามุมโค้งมน (RoundedRectangle)

คลาส RoundedRectangle ใช้สร้างสี่เหลี่ยมผืนผ้าพร้อมปรับมุมให้โค้งมนไปด้วย

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

class Manimala(mnm.Scene):
    def construct(self):
        lis_siliam = []
        for i in range(7):
            siliam = mnm.RoundedRectangle(width=(2+i)/3, # กว้าง
                                          height=6, # สูง
                                          corner_radius=0.1+0.2*i, # ความโค้งมน
                                          fill_color='#f4c994',
                                          fill_opacity=1)
            lis_siliam.append(siliam)
        vg = mnm.VGroup(*lis_siliam) # นำมารวมกลุ่ม
        vg.arrange(mnm.RIGHT) # จัดให้เรียงต่อกันไปทางขวา
        self.play(
            mnm.Write(vg),
            run_time=1.5
        )






การวาดรูปหลายเหลี่ยมด้านเท่า (RegularPolygon หรือ Triangle)

คลาส RegularPolygon เป็นคลาสย่อยของ Polygon เอาไว้สร้างรูปหลายเหลี่ยมด้านเท่าซึ่งมีจำนวนด้านตามที่กำหนด

คลาส Triangle เป็นคลาสย่อยของ RegularPolygon อีกที ในกรณีที่จำนวนด้านเป็น 3

ลองสร้างรูปเหลี่ยมด้านเท่าที่มีจำนวนด้านตั้งแต่ 3 ไปจนถึง 10
import manimlib as mnm

class Manimala(mnm.Scene):
    def construct(self):
        lis_rupliam = []
        for i in range(8):
            rupliam = mnm.RegularPolygon(3+i,
                                         fill_color='#d672b6',
                                         fill_opacity=1-0.1*i)
            lis_rupliam.append(rupliam)
        vg = mnm.VGroup(*lis_rupliam)
        vg.arrange_in_grid(n_cols=4)
        self.play(
            mnm.Write(vg),
            run_time=1.5
        )



ค่ามุมกวาดเริ่มต้นกำหนดได้โดยคีย์เวิร์ด start_angle

ตัวอย่าง ลองสร้างรูปสามเหลี่ยมโดยเปลี่ยมมุมกวาดเริ่มต้นไปเรื่อยๆ
import manimlib as mnm
import numpy as np

class Manimala(mnm.Scene):
    def construct(self):
        lis_samliam = []
        for i in range(7):
            samliam = mnm.Triangle(start_angle=np.radians(15*i),
                                   fill_color='#c4f494',
                                   fill_opacity=0.9-0.15*i)
            lis_samliam.append(samliam)
        vg = mnm.VGroup(*lis_samliam)
        vg.arrange(mnm.RIGHT)
        self.play(
            mnm.Write(vg),
            run_time=1.5
        )






การวาดสี่เหลี่ยมล้อมกรอบ (SurroundingRectangle)

คลาส SurroundingRectangle ใช้สร้างสี่เหลี่ยมผืนผ้าล้อมรอบวัตถุที่กำหนด

หากต้องการให้เว้นระยะห่างระหว่างกรอบกับตัววัตถุให้ใส่ค่าระยะที่คีย์เวิร์ด buff

คีย์เวิร์ดอื่นๆเหมือนกับกรณีสร้างสี่เหลี่ยมผืนผ้าด้วยคลาส Rectangle

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

class Manimala(mnm.Scene):
    def construct(self):
        text = mnm.Text('เงิน',size=4,color='#dbb4ff')
        kroplom = mnm.SurroundingRectangle(text,
                                           buff=1,
                                           color='#91bf64',
                                           stroke_width=20,
                                           fill_color='#ffb4ce',
                                           fill_opacity=0.3)
        self.add(text)
        self.play(
            mnm.Write(kroplom),
            run_time=1
        )






การระบายพื้นสี่เหลี่ยมหลังวัตถุ (BackgroundRectangle)

คลาส BackgroundRectangle เป็นคลาสย่อยของ SurroundingRectangle อีกที โดยจะต่างกันตรงที่สร้างพื้นที่สี่เหลี่ยมล้อมวัตถุโดยจะแค่ระบายสีแต่ไม่วาดขอบ

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

class Manimala(mnm.Scene):
    def construct(self):
        text = mnm.Text('สมบัติ',size=4.5,color='#bde5c7')
        kroplom = mnm.BackgroundRectangle(text,
                                          buff=2,
                                          fill_color='#8b5fb7')
        self.add(text)
        self.play(
            mnm.Write(kroplom),
            run_time=1
        )





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




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

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

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

หมวดหมู่

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

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

สารบัญ

รวมคำแปลวลีเด็ดจากญี่ปุ่น
มอดูลต่างๆ
-- numpy
-- matplotlib

-- pandas
-- manim
-- opencv
-- pytorch
การเรียนรู้ของเครื่อง
-- โครงข่าย
     ประสาทเทียม
maya
javascript
ความน่าจะเป็น
บันทึกในญี่ปุ่น
บันทึกในจีน
-- บันทึกในปักกิ่ง
-- บันทึกในฮ่องกง
-- บันทึกในมาเก๊า
บันทึกในไต้หวัน
บันทึกในยุโรปเหนือ
บันทึกในประเทศอื่นๆ
เรียนภาษาจีน
qiita
บทความอื่นๆ

บทความแบ่งตามหมวด



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

  ค้นหาบทความ

  บทความแนะนำ

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

ไทย

日本語

中文