เรื่องการสร้างภาพเคลื่อนไหว

เรื่องการสร้างภาพเคลื่อนไหว

          ภาษาโลโกมีคุณสมบัติเด่นอย่างหนึ่ง ก็คือสามารถเขียนโปรแกรมเรียกตัวเองที่เรียกว่า Recursion ได้ ด้วยคุณสมบัตินี้ ทำให้เราสามารถนำมาเขียนโปรแกรมสร้างภาพเคลื่อนไหว ได้อย่างง่าย ๆ ตัวอย่างดังโปรแกรมหมายเลข 1

โปรแกรมหมายเลข 1

          จะสังเกตเห็นว่าในโปรแกรมย่อยชื่อ TRI_GO จะมีคำสั่งในบรรทัดสุดท้ายเรียกใช้โปรแกรมย่อยชื่อ TRI_GO ซึ่งก็คือเรียกใช้ตัวเอง (วิธีการนี้มีชื่อเรียกว่า Recursion) ลองดูอีกสักโปรแกรมหนึ่ง คราวนี้จะเป็นรูปปลา 1 ตัว สีแดง เคลื่อนที่ไปทางซ้ายมือ ชุดคำสั่งทั้งหมดดังโปรแกรมหมายเลข 2

โปรแกรมหมายเลข 2

 

Advertisements

เรื่องการใช้กระดาษกราฟช่วยออกแบบ

เรื่องการใช้กระดาษกราฟช่วยออกแบบ

การใช้กระดาษกราฟช่วยออกแบบรูปทรงหรือสิ่งของ ทำได้โดยการวาดรูปทรงหรือสิ่งของนั้นลงบนกระดาษกราฟ เช่นถ้าต้องการออกแบบบ้านสัก 1 หลัง สามารถวาดรูปบ้านลงบนกระดาษกราฟ และระบายสีในส่วนต่าง ๆ ดังภาพต่อไปนี้

 

 

        to  front         end
        to door         end
        to roof         end
        to  wall         end
        to windows         end
        to house         cs         door         front         roof         windows         wall         end

 

 

          ในการเขียนโปรแกรมแต่ละส่วนอาจใช้คำสั่ง setxy เพื่อช่วยในการลากเส้นจากค่าพิกัดที่อ่านได้จากกระดาษกราฟ ไปทีละพิกัดจนกลับมายังจุดเริ่มต้น แล้วใช้คำสั่งระบายสีในส่วนที่กำหนดอีกครั้งหนึ่ง เช่น ส่วนของประตูอาจใช้คำสั่งดังนี้

 

        to  door         setpc 0                             กำหนดสีปากกาเป็นสี 0 คือสีดำ         pu  setxy -100  0  pd       ยกปากกาขึ้น นำเต่าโลโกไปยังพิกัด (-100,0) แล้วจึงวางปากกาลง         setxy  -100  80                ลากเส้นต่อไปยังพิกัด (-100,80)         setxy  -60  80                   ลากเส้นต่อไปยังพิกัด (-60,80)         setxy  -60  0                     ลากเส้นต่อไปยังพิกัด (-60,0)         setxy  -100  0                   ลากเส้นต่อไปยังพิกัด (-100,0)         pu  setxy  -80 40            ยกปากกาขึ้น นำเต่าโลโกเข้าไปอยู่ภายในรูปประตู ที่พิกัด (-80,40)         setfc  2  fill                       กำหนดสีที่จะระบายเป็นสี 2 คือสีเขียว แล้วสั่งระบายสี         end

 

การเขียนโปรแกรมที่มีการใช้ตัวแปร

การเขียนโปรแกรมที่มีการใช้ตัวแปร

ในการเขียนโปรแกรมภาษาโลโก เราสามารถกำหนดตัวแปรไว้ที่ชื่อโปรแกรมย่อย โดยใช้เครื่องหมาย colon ( : ) ตามด้วยชื่อตัวแปร เช่น :side คือตัวแปรชื่อ side หรือ :color หมายถึงตัวแปรชื่อ color เมื่อเรียกใช้โปรแกรมย่อยนั้นตามด้วยค่าตัวแปร (ตามปกติจะเป็นตัวเลข) จะมีผลทำให้เกิดการส่งผ่านค่าตัวแปรไปยังโปรแกรมย่อยนั้น และโปรแกรมย่อยจะนำค่าตัวแปรไปคำนวณและแสดงผลอีกทีหนึ่ง
ประโยชน์ที่เห็นได้ง่าย ๆ จากการกำหนดตัวแปรไว้ที่โปรแกรมย่อย ทำให้เราไม่ต้องเขียนโปรแกรมย่อยซ้ำ ๆ กัน เช่นการสร้างภาพดอกไม้ 3 ดอก 3 สี 3 ขนาด และวางไว้ที่ตำแหน่งต่าง ๆ กัน สามารถทำได้ง่ายขึ้น โดยสร้างโปรแกรมย่อยชื่อ flower เพียง 1 โปรแกรมย่อย และกำหนดตัวแปรดังนี้คือ
flower  : side  : color  : x  : y
ตัวแปร : side หมายถึงด้านของรูปสี่เหลี่ยมที่จะหมุนให้เกิดดอกไม้
ตัวแปร : color หมายถึงสีของดอกไม้
ตัวแปร : x หมายถึงพิกัด x
ตัวแปร : y หมายถึงพิกัด y

เมื่อต้องการสร้างภาพดอกไม้ 1 ดอก ก็ส่งค่าตัวแปร 4 ตัวไปยังโปรแกรมย่อย

flower เช่นflower  35  4  -10  0 (หมายถึงกำหนดค่าตัวแปร side=35 , color=4 , x=-10 และ y=0)

จะได้ดอกไม้ที่มีขนาด 35 (ความยาวด้านของสี่เหลี่ยม) สีแดง (สีหมายเลข 4) ณ พิกัด (-10,0) ทันที

คำสั่งลัดในการกำหนดสีในโปรแกรมโลโก

คำสั่งลัดในการกำหนดสีในโปรแกรมโลโก

คำสั่งที่มีการกำหนดสีในโปรแกรมภาษาโลโก สามารถใช้คำสั่งลัดได้ดังนี้

 

คำสั่งเต็ม คำสั่งลัด ความหมาย
SETPENCOLOR SETPC กำหนดสีของปากกา
SETSCREENCOLOR SETSC กำหนดสีของแบ็คกราวนด์
SETFLOODCOLOR SETFC กำหนดสีที่จะใช้ระบายด้วยคำสั่ง FILL

 

นอกจากนี้เรายังสามารถกำหนดสีที่จะใช้ในคำสั่งข้างต้น ด้วยตัวเลข 0-15 ซึ่งตัวเลขแต่ละตัวจะแทนสีต่าง ๆ ดังตารางต่อไปนี้

สี หมายเลข ค่า RGB คำสั่งกำหนดสีปากกา
  Black   0   [0 0 0]   SETPC  0
  Blue   1   [0 0 255]   SETPC  1
  Green   2   [0 255 0]   SETPC  2
  Cyan   3   0 255 255]   SETPC  3
  Red   4   [255 0 0]   SETPC  4
  Magenta   5   [255 0 255]   SETPC  5
  Yellow   6   [255 255 0]   SETPC  6
  White   7   [255 255 255]   SETPC  7
  Brown   8   [155 96 59]   SETPC  8
  Light brown   9   [197 136 18]   SETPC  9
  Mid-green   10   [100 162 64]   SETPC  10
  Blue-green   11   [120 187 187]   SETPC  11
  Salmon   12   [255 149 119]   SETPC  12
  Blue-ish   13   [144 113 208]   SETPC  13
  Orange   14   [255 163 0]   SETPC  14
  Silver   15   [183 183 183]   SETPC  15

 

การนำเต่าโลโกไปยังตำแหน่งที่ต้องการอย่างรวดเร็ว

การนำเต่าโลโกไปยังตำแหน่งที่ต้องการอย่างรวดเร็ว

          เราสามารถนำเต่าโลโกไปยังตำแหน่งที่ต้องการบนจอภาพได้อย่างรวดเร็ว โดยมองจอภาพเหมือนกับกระดาษกราฟที่มีแกนนอน (แกน x) และแกนตั้ง (แกน y) ตั้งฉากกันที่จุด (0,0) กลางจอภาพ ลักษณะดังภาพต่อไปนี้

          เมื่อเริ่มต้นใช้งานเต่าโลโกจะอยู่ที่ตำแหน่ง (0,0) ถ้าต้องการนำเต่าโลโกไปยังจุดสี(มีหมายเลข 1-4) ที่มีพิกัดตามที่กำหนด จะทำได้โดยใช้คำสั่งยกปากกาขึ้น (pu) ก่อน ตามด้วยคำสั่ง setxy แล้วจึงวางปากกาลง (pd) รวมเป็นชุดคำสั่งดังนี้

 

จุดหมายเลข พิกัด ชุดคำสั่ง
1 (150,100) pu  setxy  150  100  pd
2 (-150,120) pu setxy -150 120 pd
3 (-200,-120) pu setxy -200 -120 pd
4 (100,-100) pu  setxy  100  -100  pd

 

คำสั่งโปรแกรมภาษาโลโก (เพิ่มเติม 2)

คำสั่งโปรแกรมภาษาโลโก (เพิ่มเติม 2)

 

คำสั่งเต็ม   (คำสั่งย่อ) ความหมาย
setpensize  [width  height] กำหนดขนาดของปากกาด้วยขนาดความกว้างและความสูง เช่น setpensize  [1  1]
show  pensize แสดงค่าตัวเลขขนาดของปากกา
setfloodcolor [rr  gg  bb] (setfc) กำหนดสีเพื่อระบายลงในบริเวณที่ล้อมรอบเต่าโลโก เช่น setfloodcolor  [255  0 0] เป็นการกำหนดสีที่จะระบายเป็นสีแดง
FILL ระบายสี(ที่กำหนดจากคำสั่ง setfloodcolor) ในบริเวณที่ล้อมรอบเต่าโลโก
show  floodcolor แสดงค่าตัวเลขของสีพื้นในบริเวณที่กำหนด
setscreencolor [rr  gg  bb] (setsc) กำหนดสีแบ็คกราวนด์ หรือสีของแผ่นงานทั้งแผ่น เช่น setscreencolor  [0  255 0] จะได้แบ็คกราวนด์เป็นสีน้ำเงิน
show  screencolor แสดงค่าตัวเลขของสีแบ็คกราวนด์
label  “Hello เขียนข้อความ Hello ในทิศทางที่เต่าโลโกชี้อยู่
label  [Hello  good  morning] เขียนข้อความ Hello good morning
circle  ความยาวของรัศมี เขียนวงกลมตามความยาวของรัศมี แล้วตำแหน่งเต่าโลโกอยู่ที่จุดศูนย์กลาง
circle2  ความยาวของรัศมี เขียนวงกลมตามความยาวของรัศมี แล้วตำแหน่งเต่าโลโกอยู่ที่เส้นรอบวง
arc  มุมที่เป็นองศา  ความยาวของรัศมี เขียนส่วนโค้งของวงกลมตามขนาดมุมและความยาวรัศมี ดังตัวอย่างด้านล่างนี้

 

การเขียนโปรแกรมในลักษณะโปรแกรมย่อย

ในการเขียนโปรแกรมเพื่อสร้างงานที่มีความซับซ้อน ควรแบ่งการเขียนโปรแกรมออกเป็นส่วน ๆ เพื่อให้สะดวกในการปรับปรุงแก้ไขในภายหลัง โปรแกรมแต่ละส่วนเรียกว่าโปรแกรมย่อย (Procedure)โปรแกรมย่อยสามารถนำมาใช้ในโปรแกรมหลักได้ โดยไม่ต้องพิมพ์คำสั่งทั้งหมดซ้ำอีก เพียงพิมพ์ชื่อโปรแกรมย่อยเท่านั้นตัวอย่างต่อไปนี้จะแสดงวิธีการเขียนโปรแกรมย่อย เพื่อให้ได้ภาพสวนดอกไม้ โดยเขียนโปรแกรมย่อยสร้างรูปสี่เหลี่ยม (Square) ก่อน แล้วจึงเขียนโปรแกรมย่อยสร้างรูปดอกไม้ (Flower) หลังจากนั้นจึงเขียนโปรแกรมสร้างสวนดอกไม้ (Garden)
to squarerepeat 4 [fd 40 rt 90]end
to flowerfd 100repeat 36 [rt 10 square]setpencolor [0 0 0]bk 100end
to gardenpu setxy 0 0 pdsetpencolor [255 0 0] flowerpu setxy 150 0 pdsetpencolor [0 255 0] flower pu setxy -150 0 pdsetpencolor [0 0 255] flower end
เมื่อพิมพ์คำว่า garden ที่ช่องป้อนเข้าข้อมูล จะได้ดอกไม้จำนวน 3 ดอก 3 สี ดังภาพ

 

 

หมายเหตุ   ชุดคำสั่งเพิ่มเติม

setxy ค่าบนแกนx ค่าบนแกนy

เป็นการกำหนดให้เต่าโลโกเคลื่อนไปอยู่ที่ตำแหน่งพิกัด (x,y) ซึ่งที่จุดกึ่งกลางจอภาพค่า x=0 และค่า y=0 เช่น setxy 0 0 เป็นการกำหนดให้เต่าโลโกเคลื่อนไปอยู่ที่พิกัด (0,0)

จากจุดกึ่งกลาง ค่าบนแกน x จะมีค่าเป็น + เมื่อนับไปทางขวามือ และเป็น – เมื่อนับไปทางซ้ายมือ
จากจุดกึ่งกลาง ค่าบนแกน y จะมีค่าเป็น + เมื่อนับขึ้นไปด้านบน และเป็น – เมื่อนับลงมาด้านล่าง