Professional Documents
Culture Documents
MMN 13 2017b Final
MMN 13 2017b Final
MMN 13 2017b Final
הייצוג נעשה על-ידי מערך ששומר את רשימת הקדקודים ) (verticesשל המצולע לפי סדר
הופעתם במצולע .אין חשיבות מי הקדקוד הראשון .כל קדקוד מיוצג על-ידי נקודה במישור.
התכונות במחלקה הן:
Point [] _vertices מערך של הקדקודים
int _noOfVertices מספר הקדקודים במצולע
כמו כן קיים קבוע מספרי המציין את המספר המקסימלי של הקדקודים במצולע .10 -
אין להוסיף תכונות מעבר לתכונות אילו .לא פרטיות ולא ציבוריות.
הקדקודים )כלומר האובייקטים מהמחלקה (Pointנמצאים במערך ברצף ,ללא "חורים"
מתחילת המערך .המערך צריך להישאר כך )ללא חורים( לאחר כל פעולה.
25
הנה דוגמא למצולע קמור .השמות שהצמדנו לנקודות הם רק לשם התיחסות בהמשך.
D
6
5
C
4
E
3
2
1
A B
0
0 1 2 3 4 5 6 … 7 ציר הX -
0 1 2 3 4 5 6 7 8 9
_x=2.0 _x=5.0 _x=7.0 _x=4.0 _x=1.0 null null null null null
26
הוספת הקדקודים על ידי השיטה addVertexנעשית תמיד לפי סדר
הופעתם במצולע.
.4שיטה highestVertexהמחזירה העתק של את הקדקוד שנמצא הכי גבוה במצולע.
אם יש יותר מאחד בגובה הגבוה ביותר ,היא מחזירה את הראשון בו נתקלה .אם
אין קדקודים בפוליגון )כלומר המערך הוא ריק( השיטה תחזיר .null
.5השיטה toStringהמחזירה מחרוזת תווים המייצגת את המצולע .המחרוזת צריכה
להיות בדיוק בפורמט הבא :שימו לב שאין רווחים במחרוזת של הקדקודים.
The polygon has 5 vertices:
))((2.0,1.0),(5.0,0.0),(7.0,5.0),(4.0,6.0),(1.0,4.0
אם אין קדקודים השיטה תחזיר מחרוזת בדיוק בפורמט הבא )כולל הנקודה(:
The polygon has 0 vertices.
.6שיטה calcPerimeterהמחזירה מספר ממשי ) (doubleהמייצג את היקף המצולע.
אם מספר הקדקודים הוא 2יוחזר אורך הקטע )לא הלוך וחזור(.
אם מספר הקדקודים הוא 1או 0יוחזר .0
.7שיטה calcAreaהמחזירה מספר ממשי ) (doubleהמייצג את שטח המצולע.
כדי לחשב את שטח המצולע ,צריך לסכום את שטחי המשולשים המכסים את שטח
המצולע .בדוגמא לעיל ,למשל ,צריך לסכם את שטחי המשולשים הבאיםA-B-C, :
.A-C-D, A-D-E
לשם חישוב שטח המשולש ,ניתן להשתמש בנוסחת Heronהקובעת כי שטח המשולש
שווה לשורש הריבועי של ) s(s-a)(s-b)(s-cכאשר b ,aו - cהם אורכי שלוש הצלעות
של המשולש ,ו - sהוא מחצית היקפו.
ניתן להוסיף שיטה לחישוב שטח משולש .שימו לב שהשיטה לחישוב שטח משולש
צריכה להיות פרטית ולא ציבורית.
אם מספר הקדקודים קטן מ 3-יוחזר .0
.8שיטה בוליאנית isBiggerהמקבלת מצולע אחר ,ומחזירה trueאם המצולע שעליו
מופעלת השיטה גדול בשטחו מהמצולע המועבר כפרמטר ואחרת מחזירה .falseניתן
להניח שהפרמטר אינו .null
.9שיטה findVertexהמקבלת נקודה כפרמטר ומחזירה את המיקום שלה במערך ,אם
היא נמצאת .אם לא ,יוחזר ) -1מינוס( .לדוגמא ,אם השיטה תופעל עם הפרמטר )(5,0
היא תחזיר את הערך .1שימו לב שהקדקוד הראשון נמצא במיקום 0במערך.
הנקודה .10שיטה ,getNextVertexהמקבלת נקודה כפרמטר ,ומחזירה העתק של
המייצגת את הקדקוד הבא במצולע .אם הנקודה שהתקבלה אינה קדקוד במצולע,
השיטה תחזיר .nullאם הנקודה היא האיבר האחרון במערך ,יוחזר העתק של
הנקודה הראשונה .אם הנקודה היא הנקודה היחידה במערך יוחזר העתק של
הנקודה עצמה.
27
.11שיטה getBoundingBoxהמחזירה את המלבן )כפוליגון( )המקביל לצירים( החוסם
את המצולע .אם מספר הקדקודים קטן מ 3-יוחזר .nullהקדקוד הראשון במערך
המייצג את המלבן צריך להיות הקדקוד השמאלי התחתון ,ושאר הקדקודים יופיעו
בסדר הפוך מכיוון השעון )כלומר הקדקוד השני יהיה הימני התחתון ,השלישי הימני
העליון והרביעי השמאלי העליון(.
אתם צריכים לכתוב בעצמכם APIלמחלקה ,לבנאים ולשיטות לפי הנהוג בכתיבת
.APIכמו כן ,עליכם לתעד בתיעוד פנימי כל מה שדורש הבהרה ואינו פשוט.
28
שימו לב,
באתר הקורס תמצאו גם טסטר לבדיקת האיות והפרמטרים של השמות של
השיטות והמחלקה שאתם צריכים לכתוב .חובה עליכם לבדוק את המחלקה
שכתבתם בטסטר זה ,ולהגיש אותה רק אם הטסטר עובר קומפילציה .שימו לב
שהטסטר לא מכסה את כל האפשרויות ,ובפרט לא את מקרי הקצה .הוא רק בודק
את השמות של השיטות במחלקות כלומר שגיאות קומפילציה .מאד מומלץ להוסיף
לו בדיקות.
הגשה
.1הגשת הממ"ן נעשית בצורה אלקטרונית בלבד ,דרך מערכת שליחת המטלות.
.2הקפידו לתעד בתיעוד פנימי וב API -את כל השיטות שיש במחלקות השונות.
.3הקפידו ששמות השיטות יהיו בדיוק כפי שכתוב במטלה .וכן שההדפסות יהיו בדיוק כפי
שמופיע במטלה.
.4עליכם להגיש את הקובץ ,Polygon.javaעטפו אותו בקובץ zipושלחו .אין לשלוח קבצים
נוספים.
בהצלחה
29
30