วาดรูปด้วยภาษาโลโก้ : ตอนที่ 15 – รถไฟ
สวัสดีครับ วันนี้เราจะมาวาดรูปรถไฟ ด้วยภาษาโลโก้กันครับ โดยในตอนนี้ก่อนที่จะวาดรูป เราจะวางแผนก่อนว่ารูปของเรามีองค์ประกอบ (component) อะไรบ้าง จากนั้นก็วาดแต่ละ component ให้เสร็จ แล้วนำทั้งหมดมาประกอบเป็นรูปภาพที่ต้องการครับ
คำสั่งที่น้องๆ จะเจอในบทนี้
คำสั่ง | ความสามารถ | ตัวอย่าง |
fd ระยะทาง bk ระยะทาง |
forward = เดินหน้า backward = ถอยหลัง |
fd 100 = เดินหน้า 100 pixel bk 50 = ถอยหลัง 50 pixel |
rt องศา lt องศา |
right turn = หมุนขวา left turn = หมุนซ้าย |
rt 90 = หมุนไปทางขวา 90 องศา lt 45 = หมุนไปทางซ้าย 45 องศา |
repeat จำนวนครั้ง [ คำสั่ง ] | repeat = ทำคำสั่งต่อไปนี้ ซ้ำ n ครั้ง | repeat 3 [ fd 100 rt 120 ] repeat 4 [ fd 100 rt 90 ] repeat 6 [ fd 100 rt 60 ] |
TO ชื่อฟังก์ชัน :ตัวแปร คำสั่ง END |
function = สร้างชุดคำสั่ง | TO square :size repeat 4 [ fd :size rt 90 ] END |
cs clean |
clear screen = ล้างหน้าจอ clean = ล้างหน้าจอ |
|
pu pd |
pen up = ยกปากกา pen down = วางปากกา |
|
ht st |
hide turtle = ซ่อนเต่าโลโก้ show turtle = แสดงเต่าโลโก้ |
|
setxy พิกัดx พิกัดy | set (x,y) = กำหนดตำแหน่งเต่าโลโก้ | setxy 200 100 |
setpensize ขนาด setpencolor รหัสสี fill setscreencolor รหัสสี |
set pen size = กำหนดขนาดปากกา set pen color = กำหนดสีปากกา fill = ระบายสี set screen color = กำหนดสีพื้นหลัง |
setpensize 5 setpencolor 10 fill setscreencolor 10 |
เราจะมาดูแบบที่เราจะวาดกันก่อนครับ เราจะเห็นได้ว่ารถไฟจะมีส่วนประกอบหลัก 2 ส่วน คือ หัวรถไฟ และ ตู้รถไฟ ในที่นี้ขอเรียกง่ายๆ ว่า Head และ Body นะครับ
รูปภาพจาก – https://standardmedia.co.ke/
โดยรถไฟที่เราจะวาดกันจะมีองค์ประกอบ (component) คือ หัวรถไฟ อยู่ทางขวามือ และ ตู้รถไฟ อีก 3 ตู้ ดังรูปด้านล่างครับ
แนวทางในการวาดรถไฟของเราคือ
- เตรียมฟังก์ชันที่จำเป็นก่อน
- สร้างฟังก์ชัน Body สำหรับวาด ตู้รถไฟ
- สร้างฟังก์ชัน Head สำหรับวาด หัวรถไฟ
- นำฟังก์ชัน Head และ Body มาประกอบกันเป็นขบวนรถไฟ
เริ่มต้นเราจะเตรียมฟังก์ชันที่จำเป็นก่อน
- เราจะเตรียมฟังก์ชันวาดรูปร่างพื้นฐานกันก่อน ได้แก่ สี่เหลี่ยมผืนผ้า (rectangle) สี่เหลี่ยมจัตุรัส (square) วงกลม (circle)
TO rectangle 😡 :y fd 😡 rt 90 fd :y rt 90 fd 😡 rt 90 fd :y rt 90 ENDTO square 😡 repeat 4 [ fd 😡 rt 90 ] ENDTO circle 😡 repeat 360 [ fd 😡 rt 1 ] END |
- นอกจากนี้ เราจะเตรียมฟังก์ชันสำหรับลงสี โดยฟังก์ชัน setpencolor_default ไว้สำหรับเปลี่ยนสีปากกาเป็นสีดำ และ ฟังก์ชัน paint ไว้สำหรับลงสีที่ต้องการครับ
TO setpencolor_default setpencolor “#9E9E9E END TO paint :color |
สร้างฟังก์ชัน Body สำหรับวาดตู้รถไฟ
- เริ่มต้นการสร้างฟังก์ชัน Body ด้วยการวาดรูปสี่เหลี่ยมผืนผ้าก่อนเลย
TO body rt 90 rectangle 200 100 END cs body |
- ใส่รายละเอียดตู้สินค้าเข้าไปเล็กน้อย
TO body rt 90 rectangle 200 100 repeat 9 [ fd 20 rt 90 fd 75 bk 75 lt 90 ] pu bk 180 pd END cs body |
- เพิ่มล้อเข้าไปให้กับตู้บรรทุกสินค้า
TO body rt 90 rectangle 200 100 repeat 9 [ fd 20 rt 90 fd 75 bk 75 lt 90 ] pu bk 180 pd rt 90 pu fd 100 lt 90 fd 50 pd circle 0.1 pu fd 100 pd circle 0.1 lt 90 END |
- เพื่อความสวยงาม เราจะระบายสีให้กับตู้สินค้ากันหน่อยครับ
TO body rt 90 rectangle 200 100 paint “#388e3c repeat 9 [ fd 20 rt 90 fd 75 bk 75 lt 90 ] pu bk 180 pd rt 90 pu fd 100 lt 90 fd 50 pd circle 0.1 pu fd 100 pd circle 0.1 lt 90 END |
เสร็จแล้วครับ สำหรับฟังก์ชัน Body ต่อไปเราจะ…
สร้างฟังก์ชัน Head สำหรับวาดหัวรถไฟ
- เริ่มต้นการสร้างฟังก์ชัน Head ด้วยการวาดรูปสี่เหลี่ยมผืนผ้าก่อนเลย แต่ที่มุมขวาบนจะมีส่วนโค้งนิดหน่อยครับ
TO head rt 90 fd 150 repeat 90 [ fd 0.9 rt 1 ] fd 50 rt 90 fd 200 rt 90 fd 100 rt 90 END cs head |
- เพิ่มหน้าต่างให้กับหัวรถไฟกันหน่อย
TO head rt 90 fd 150 repeat 90 [ fd 0.9 rt 1 ] fd 50 rt 90 fd 200 rt 90 fd 100 rt 90 pu fd 20 rt 90 fd 20 lt 90 pd cs head |
- เพิ่มล้อให้กับหัวรถไฟครับ
TO head rt 90 fd 150 repeat 90 [ fd 0.9 rt 1 ] fd 50 rt 90 fd 200 rt 90 fd 100 rt 90 pu fd 20 rt 90 fd 20 lt 90 pd pu bk 150 lt 90 fd 20 pd cs head |
- เพิ่มสีสันเพื่อความสวยงามครับ
TO head rt 90 fd 150 repeat 90 [ fd 0.9 rt 1 ] fd 50 rt 90 fd 200 rt 90 fd 100 rt 90 paint “#ffa000 pu fd 20 rt 90 fd 20 lt 90 pd pu bk 150 lt 90 fd 20 pd cs head |
เสร็จแล้วครับ สำหรับฟังก์ชัน Head เมื่อเราได้องค์ประกอบทั้งตู้รถไฟและหัวรถไฟแล้ว เราก็จะนำมา…
ประกอบกันเป็นขบวนรถไฟ
TO train setpencolor_default pu setxy -440 0 pd body pu setxy -220 0 pd body pu setxy 0 0 pd body pu setxy 220 0 pd head END cs train |
สำหรับ Code ทั้งหมด สามารถเข้าไปดูได้ที่นี่ครับ https://github.com/doctorkarn/logo-lang/blob/master/EP15.txt
เป็นอย่างไรกันบ้างครับสำหรับการวาดรูปรถไฟ จะสังเกตได้ว่าถ้าเราวาดรูปโดยเริ่มจากองค์ประกอบเล็กๆ ก่อน แล้วค่อยนำมารวมกัน เพื่อให้กลายเป็นภาพที่ซับซ้อน ก็จะทำให้เราสามารถวาดรูปยากๆ ได้ง่ายขึ้นครับ
สามารถติดตาม “วาดรูปด้วยภาษาโลโก้” ตอนอื่นๆ ได้ที่นี่ครับ https://karnlab.com/tag/ภาษาโลโก้