תכנות
—
שיעור 77
29/January/2009
מילויים של מצולע ב
—
Gtk+/Cairo
הורדנו את הגירסא
setgame-2009-01-29-003730.tar.gz
מדף הגירסאות
.
והסתכלנו על הקובץ
board.py.
יש שם פתרון
לתרגיל 3 של שעור קודם
.
בתאור הפתרון הדגשנו את הנקודות הבאות:
-
הגובה של כל מעוין
(diamond)
הוא קבוע, ולא תלוי במספר המעוינים.
-
יש לולאה אחת בלבד בפונקציה
Board.draw_diamonds_card(...).
בלולאה יש קריאה לפונקצית ציור המעוין
Board.draw_diamond(...).
והשינוי הוא
רק
בפרמטר y שגדל כל פעם בסכום של הגובה של מעוין והרווח בין המעוינים.
-
הסברנו כיצד מצוירת צורת המעוין (יהלום diamond) בפונקציה
Board.draw_diamond_card.
יש שם מעבר על ארבעת הקודקודים של המצולע. אבל יש מעברים מסוגים שונים, מילוי השטח הפנימי
או השפה (ההיקף).
-
לפי הפרמטר
texture
מחליטים מהם המעברים הנדרשים. במקרה של
value.STRIPES
(פסים)
נדרשים שני מעברים, בשני המקרים האחרים, נדרש מעבר אחד בלבד, אבל שונה.
-
במעבר המילוי, במקרה של פסים, אנו משתמשים ב-"תבניות-משטח" שמוגדרות על ידי הפונקציה
gtk.gdk.pixbuf_new_from_xpm_data(...)
על ידי מחרוזות במבנה xpm בתחילת הקֹבץ
board.py.
בתמונה הבאה, מצויר הקלף הימני למעלה עם 3 מעוינים במילוי פסים.
קוים עקומים ב
—
Gtk+/Cairo
התחלנו לראות כיצד מצוירת צורת ה"בוטן"
(squiggle).
החבילה
Gtk+/Cairo
מאפשרת ציור קוים עקומים שמוגדרים על ידי נקודות-מוצא ונקודות-שליטה
(control points)
שנקראים
Bezier Curves.
תוכלו לראות
תיאור וניתוח
שלהם, הדורש הבנה אלגברית יותר מבסיסית.
אנו ננסה לקבל תחושה של תכונות הקוים הללו וכיצד לעצב אותם.
בגירסא של setgame שמצוינת למעלה, בסוף הפונקציה
Board.draw(...)
מופיע
if False:
בשורה 148. אם הופכים את התנאי ל True
אז מצויר squiggle גדול (יחסית) עם נקודות השליטה, הנראה כך:
תרגילים
-
הורד את הגירסא
setgame-2009-01-29-003730.tar.gz
מדף הגירסאות
.
הרץ, עבור על הפונקציות:
Board.draw_diamonds_card(...)
Board.draw_diamond(...)
והבן אותן היטב.
-
באופן זמני, בצע את השינוי שגורם לציור squiggle עם נקודות שליטה, כמו שמתואר למעלה.
הרץ ושים לב לנקודות השליטה ולקו ההיקף.
-
באותה הגירסא, לפונקציות:
Board.draw_ovals_card(...)
Board.draw_ellipse(...)
נוסף הפרמטר: texture.
שפר את הפונקציה האחרונה, כך שהאליפסות יצוירו עם המילוי הנדרש, בדומה ל
Board.draw_diamond(...).
התוצאה היא, בשלב זה, בקלף התחתון שבאמצע.
חזרה לעמוד האם