לוגו/גרפיקת צבים

מתוך ויקיספר, אוסף הספרים והמדריכים החופשי

"גרפיקת צבים" (Turtle Graphics)[עריכה]

הכלי העיקרי לגרפיקה בלוגו הוא ה"צב". במקור היה ה"צב" מעין רובוט נושא עט, שהיה מחובר למחשב. הקלדת פקודות לוגו היתה גורמת לצב לנוע על הרצפה, בעוד העט משאיר אחריו קוים בהתאם לתנועת הצב. היום השימוש בצב הרובוטי כמעט ונעלם. במקומו אנו משתמשים במעין סמן, שצורתו משולש שווה שוקיים, הנע על המסך ומשאיר אחריו קו. הציור בעזרת הצב היא שונה מדרך הציור המקובלת בשפות תיכנות אחרות. ברוב שפות התיכנות יצירת ציורים נעשית בעזרת שימוש בקואורדינטות (X ו Y), המאפשרות הצבעה על נקודות מדויקות במסך. בשפות כאלה, אם נרצה לצייר קו אלכסוני על המסך נצטרך להורות למחשב "צייר קו מהפינה השמאלית העליונה (0,0) ועד הפינה הימנית התחתונה (640,480)". בלוגו, לעומת זאת, נעשה הציור באופן "יחסי": כדי לצייר אלכסון כזה נורה למחשב "כוון את הצב לעבר הפינה השמאלית העליונה, הנע אותו קדימה בלי לצייר למרחק של 500 צעדים, סובב את הצב ב-180 מעלות והצעד אותו 1000 צעדים בעודו מצייר". דרך ציור זו מכונה "גרפיקת צבים", ולעתים היא נוחה בהרבה מדרך הציור הרגילה.

הפקודות השולטות בצב[עריכה]

כאשר אנו מתחילים לעבוד עם MSWLogo, הצב ממוקם במרכז המסך. הפקודות הבסיסיות ביותר בלוגו נוגעות להזזת הצב (הפקודות כתובות בצורתן הארוכה ובסוגריים מופיעה צורה מקוצרת שמשמעותה זהה):

  • (forward (fd - גורם לצב ללכת קדימה.
הפקודה fd 50 תגרום לצב להתקדם 50 פיקסלים.
הערה: בדרך-כלל לא משתמשים בגירסה הארוכה של הפקודה forward - אלא רק בקיצור fd. כך גם לגבי שאר הפקודות שיש להן גירסה מקוצרת.
  • (back (bk - גורם לצב לחזור אחורה
  • (right (rt - גורם לצב לפנות ימינה מספר מסוים של מעלות.
rt 90 יגרום לצב להסתובב ימינה ב-90 מעלות.
  • (left (lt - גורם לצב לפנות שמאלה.

הפקודות השולטות בעט[עריכה]

הצב מחזיק "עט". כאשר הצב מתקדם העט משאיר אחריו קו במסלול ההליכה של הצב. הפקודות השולטות בעט הן:

  • (penup (pu - "מרימה" את העט וכעת הצב יכול לצב לזוז מבלי לצייר.
  • (pendown (pd - "מורידה" את העט בחזרה, והצב שוב מצייר.

פקודת החזרה REPEAT[עריכה]

כיצד נצייר ריבוע שאורך כל צלע בו הוא 100 פיסקלים? הדרך הפשוטה ביותר היא לכתוב משהו כזה:


fd 100 rt 90
fd 100 rt 90
fd 100 rt 90
fd 100 rt 90

זה עבד, אמנם הצלחנו לצייר ריבוע, אבל התכנית הקטנה שכתבנו היא מעט מצחיקה. ארבע פעמים כתבנו בדיוק אותה שורה. האם אין דרך לחסוך את ההקלדה החוזרת?
דווקא יש. הפקודה הנוספת היא repeat. פקודה זו מורה למחשב לבצע רצף פקודות מסוים שוב ושוב, מספר ידוע מראש של פעמים. אופן ההזנה שלה הוא כזה-

  • [אוסף פקודות...] # repeat
חשוב: במקום # נכתוב את מספר הפעמים המבוקש, ובין הסוגריים המרובעים נכתוב את רצף הפקודות לביצוע.
דוגמה: [repeat 10 [fd 10 - יגרום לצב להתקדם למרחק 10 פיקסלים, ולחזור ולעשות זאת 10 פעמים. הוראה זו שקולה להוראה fd 100, כמובן.
  • אתם מוזמנים לנסות ולכתוב שורת לוגו בודדת המציירת ריבוע דומה לזה שציירנו קודם!

תוכניות לדוגמה[עריכה]

הנה דוגמא לתכנית קטנה המשתמשת בפקודות שהיכרנו. אתם מוזמנים להקליד אותה בחלון הפקודות של התוכנה MSWLogo. יש להקליד כל שורה בדיוק כפי שהיא כתובה כאן, ובסופה להקיש על Enter. לחלופין אתם יכולים להקליד את כל הפקודות בשורה אחת, ורק אז להקיש על Enter. אם התוכנית אינה מבצעת פקודה כלשהי, כנראה שהקלדתם אותה לא נכון. הקלידו את השורה מחדש, בדיוק כפי שהיא כתובה כאן, והיא תפעל.

repeat 4 [fd 100 rt 90]
pu
rt 90
fd 20
lt 90
fd 20
pd
repeat 4 [fd 60 rt 90]

תכנית זו תגרום לציור שני ריבועים האחד בתוך השני.

בשורה הראשונה של התכנית אנו מציירים ריבוע באורך 100 פיקסלים בעזרת "לולאה": הצב חוזר 4 פעמים על ההוראות לציור קו באורך 100 ולפנייה 90 מעלות לכיוון ימין.
בשורה הבאה אנו מורים לצב להרים את העט, כדי שלא יצייר (הפקודה pu).
כעת אנו מניעים את הצב לנקודה הנמצאת בתוך הריבוע שציירנו. במהלך התנועה הצב אינו מצייר.
בשורה הלפני-אחרונה אנו מכינים את העט שוב לציור (pd).
בשורה האחרונה הצב שוב מבצע ציור של ריבוע. הפעם כל צלע היא באורך 60 פיקסלים בלבד.


והנה תכנית נוספת:

repeat 360 [fd 1 rt 1]
ht

האם אתם יכולים לנחש מה עושה תוכנית זו? הקלידו אותה בשורת הפקודות ובידקו אם ניחשתם נכון.
האם אתם יודעים כיצד אפשר להגדיל את הצורה שמצייר הצב פי 2? נסו את תשובתכם בחלון הפקודות.
ולסיום, האם שמתם לב שהצב נעלם? בפיסקה הבאה תלמדו כיצד להחזיר אותו...

פקודות נוספות[עריכה]

להלן רשימה של פקודות בסיסיות נוספות ב"גרפיקת הצבים" של לוגו. פקודות אלה אינן דורשות הסבר, ואתם מוזמנים לנסות אותן ולהתרשם מהן. זיכרו, כי אם לא תקפידו על איות הפקודה, לוגו עלולה לבצע פקודה אחרת או, פשוט, להודיע כי לא הבינה את הפקודה שקיבלה, ולא לעשות דבר.

  • clean - מנקה את המסך הגראפי ומוחקת כל מה שהצב צייר.
  • home - מחזירה את הצב לעמדת המוצא שלו במרכז המסך, פונה כלפי מעלה.
  • (clearscreen (cs - מנקה את המסך הגראפי ומחזירה את הצב לעמדת המוצא שלו - שילוב של clean ו home.
  • (hideturtle (ht - גורמת לצב להפוך לבלתי נראה. הוא עדיין קיים, וניתן להזיז אותו ולצייר, אך הוא אינו מפריע לראות את הציור.
  • (showturtle (st - הופכת את הצב לנראה.
  • (penerase (pe - העט מוחק במקום לצייר.
  • (penpaint (ppt - העט מצייר במקום למחוק.
  • (penreverse (px - העט מצייר קוים חדשים, אבל מוחק כל קו קיים שהוא נתקל בו.
  • (setpencolor # (setpc - משנה את צבע העט. במקום # יש לרשום מספר שלם בין 0 ל 15.
  • [# #] setpensize - משנה את עובי העט. יש לכתוב את הפקודה במלואה (אין קיצור), לפתוח סוגריים מרובעים, ולכתוב בהם מספר שיקבע את עובי הקו שמצייר העט (נסו את המספר 5, למשל). בין הסוגריים המרובעים יש לכתוב את המספר המבוקש פעמיים, כשביניהן רווח. לדוגמה:
[setpensize [5 5.
  • (setscreencolor # (setsc - משנה את צבע הרקע של המסך הגראפי (שוב, ניתן לבחור אחד מ 16 צבעים בטווח 0-15).
הפרק הקודם:
הכרות בסיסית
גרפיקת צבים הפרק הבא:
מערכת הקואורדינטות