
הטקסט המלא של הדקות הראשונות בהרצאה «פרויקט מעשי ב-#C - תוכנת צייר - חלק 36» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
טוב, בשיעור הקודם קיבלנו בשינוי של צבע פילד רקטנגל אבל האמת היא שזה גם אמור לטפל גם בנון פילד רקטנגל הוא נוגע בזה באמת יהיה כחול, אה, הוא לא מתחלף, אז אם הוא לא מתחלף אז זה לא יעבוד אז למעשה גם כשאני נוגע עם סלקט באובייקט ואני כחול
אז הוא אמור להפוך להיות כחול אני חושב, זה דבר אחד אז כשאני נוגע בו הוא אמור להפוך להיות כחול, אבל צריכים לראות שזה עובד לנו לכל שייפ.
סלקט, אותו, תהיה אדום, הוא נהיה אדום. תהיה ירוק, הוא נהיה ירוק, כחול, לבן, חרחור. מדהים. ופיל דליפ, יפה.
אז קודם כל צריך שכאשר אני עכשיו בסלקטת ואני אדום ואני נוגע בזה, הוא אמור להפוך להיות אדום, לא רק כשאני משנה את הצבע שהוא יהיה, אלא מיד כשאני נוגע בו.
דבר ראשון, כדי לסיים את ארבעת אלה, את הפיגורות, זה דבר ראשון שאנחנו רוצים, אז בואו נעשה את זה. אחרי זה נעשה גם לשאר הדברים. קודם כל נרשום מה אנחנו הולכים לעשות.
When selecting shapes should to the color we are in. טעות שלנו, אחרי בדיקה ב-NetMeeting אנחנו רואים שכאשר אני נוגע באובייקט כחול, הצבע הבחור, הסלטת color, אמור להפוך להיות כחול.
כך עובד נט מידינג. אז איך נעשה דבר שכזה? אני רוצה בעצם לחלט את הצבע כאשר אני נוגע, ולהפוך את זה ל-Background Color. אז נחזור לאפליקציה שלנו. כאשר אני בוחר שייפ במהוס דאון, כאשר אני בוחר שייפ, ואם מצאתי אותו, אז אני אמור לשנות, נעצור את הריצה אומרים על פי החוקים שנטמיטים
התווה לנו אני אמור לשנות את הצבע של הפאנל SelectedColor להיות SelectedColor הבעיה היא שכרגע color הוא רק set אין לו get צריך להוסיף לו גם set גם get אז נכתוב פה get ופה פשוט return את color ונריץ את זה פילד ריקטנגל פור סלקטד אני נוגע בו הוא נהיה אפור למה הוא נהיה אפור כמו כחול למה הוא נהיה
אפור כשאני נגעתי בו פעם דון סלקטד אני נוגע בו הוא נהיה אפור בוא נראה אז כשאני נוגע בו סלקטד קלר בקלר שווה סלקטד קלר אולי כאן זה קורה הדבר הביזלי הזה נוגע בו תן לי לרוץ נראה אם הוא נהיה גם אפור הוא לא נהיה אפור ניקח אחד חדש, חול, סלק, ניגע בו, קלר שלו הוא אמפתי, זה יכול להיות שהקלר שלו אמפתי, הוא לא קיבל את הקלר בקונסטרקטור?
כנראה שלא, שייפ, בקונסטרקטור לא שמענו את הטבע, זו הייתה טעות, שיפטף 5, דבר ראשון, קלר שווה ל-C, ווויטס שווה לוויטס, דבר ראשון, נעים שוב, וויטס הוא פלוט וזה אינט, כן, זה חייב להיות פלוט, אז בסדר,
נגדיר את זה כ-float, ככה זה אמור להיות, זה לא מפריע לנו, אז-פיל דרקט אנגל, כחול גדול, אני עושה סלקטד ואני אדום, אני נוגע בו, אז אני הופך, ה-בק גראונד של הסלקטד קלור הופך להיות כחול.
אני אצור לי, כן, עכשיו אני אעיר רק רק, אז נחזיר אותו לכחול, אני אצור לי מלבן אחד נוסף שהוא יהיה אדום, ואני אחזור להיות סגרגל, ואז אני אצלק אותו זה אדום ואותו זה כחול אדום כחול מצוין אז זו ההתנהגות של נטמיטינג יפה אז הדבר הבא זה לעשות את זה לעוד שייפים או לטפל בעוברים בוא נעזוב רגע את העוברים בוא נטפל כי לכל
השייפים יש קלר אז נעבור קודם על קלר לכל השייפים אז ארבעת אלה טופלו מה לגבי ליין ופרי-הנד בעצם רק עוד שניים אה זה גם טקסט ליין פרנד וטקסט אז בעצם כל מה שנותר זה לממש את איז פוינט אין אז נחזור ונממש את איז פוינט אין טוב ומה שאנחנו רוצים עכשיו זה לנסות לטפל בדברים האחרים אז בוא נתחיל מליין קודם כל אני רוצה בליין לממש בוא נראה אם יש לי את איז פוינט אין אני לא מממש אותה אז אני
יכול ידנית לעשות את זה אבל שימו לב זה לא כל כך כואב כמו שזה נשמע אני כותב את המילה Override עושה רווח ונותן לי לבחור את הפונקציה שאני יכול לדרוס ואיזה פוינטים יחסנו אני לוחץ על Enter והוא כבר כותב לי הכל יפה אז אנחנו עבור Line עכשיו צריכים לחשוב האם הלחיצה בעצם פגעה
בקו אז האמת היא שהדבר הכי פשוט זה להניח שאני ממלבן כמה שזה נשמע ביזארי ושיש לי נקודה פי 1 ופי 2, הבעיה היא שיכולים להיות לי כמה מלבנים בעצם, וזה הופך ליותר מסובך ממה שחשבתי, אז אולי, טוב, אז ציינו פה ציור
שמסביר איך בעצם ניתן לפגוע בקו, אז הרעיון הוא שיש לנו את פי 1 ואת פי 2, זה מה שכתוב כאן, יש לנו את פי 1 ואת פי 2 בליין, יש לנו שתי נקודות שמגדירות קו, זו פי 1 וזו פי 2, השאלה היא האם פוינט 3, x3, y3, כאן p1 זה xy, p2 זה x2, y2, והשאלה היא האם פוינט נתונות שאנחנו מעבירים כאן,
זאתי פוינט 3, האם היא פוגעת בקו, בקו הסגלגל? אז איך נדע? זה נורא פשוט. משוואה של קו, כן, שהגדרנו פה ציר y וציר x, משוואה של קו אומרת שy שווה ל-mx ועוד b.
רגע, נעשה את זה. המשוואה של קו אומרת ש-y שווה ל-mx ועוד b. y שווה ל-m זה ה-slope, זה הזווית כפול x, ועוד b, b זה הנקודה שבה הקו פוגע בציר y. ומה הערך של m? הערך של m זה ה-slope, זה הזווית.
מה הזווית? הזווית זה x פחות x2 חלקי y פחות y2. x פחות x2 חלקי y פחות 2 זו הזווית. מה הערך של b? אם ניקח את אחת מהנקודות, נגיד p1, ונציב את זה במשוואה הזו ונהפוך את זה y שווה לmx ועוד b אבל b שווה לy פחות mx אז b שווה לy פחות mx אם כבר יש לי את m וניקח אחת מהנקודות ויש לי את x לy אז אני יכול לחשב את b
אז יפה אז עכשיו יש לי את m ואת b ואז אני לוקח נקודה שלישית את הנקודה שאני רוצה לחשב אם היא פוגעת x3 y3 ואם אני מבין פה את x3 ופה את y3 ואכן זה שווה זה אומר שפגעתי בנקודה אבל אנחנו נראה שזה נורא קשה לפגוע בדיוק בנקודה אז אנחנו בעצם רוצים לפגוע אולי קצת מעל ה-Y או קצת מתחת ל-Y
אז אם החישוב הזה הוא Y ועד Y הוא קטן מ-Y ועוד 3 והוא גם גדול מ-Y פחות 3 אז באמת אין לנו בעיה ואז זה המלבן הצהוב שציין נגיד זה 3 קצת מעל זה 3, קצת מתחת זה 3 האמת היא זה יוצא מין כזה מאויין אבל זה לא מעניין אותנו כי אנחנו עושים איזה משהו אלמנטי, מי שרוצה אחרי זה להרחיב יכול להרחיב אז אנחנו רוצים עכשיו לחשב את כל החישובים
האלה אז אנחנו הולכים לליין לחשב את החישובים איד פוינט אין קודם כל אני צריך לחשב, נחזור שוב לציון, אני צריך לחשב קודם כל את m אז אם m שווה לx, אז יש לי שתי נקודות יש לי את p1x פחות p2x חלקי p1y, סליחה זה y הפוך זה y נסיים את זה פחות p2 אבל את כל הקטע של הy ניקח איתנו או פשוט את זה נעביר ככה זה y חלקי x זה לא
x חלקי y זה y חלקי x אז אני אשנה את זה יפה אז יש לנו את m אחרי שיש לנו את m אנחנו רוצים לחשב את b, b שווה לy פחות mx אינט b שווה לy פחות mx אז קודם כל זה עלול להיות פלואוט כדאי שנתכונן לזה ואז זה פחות זה, זה יהיה אינט אז את זה אני רוצה להמיר להיות פלואוט אז את זה אני אמיר להיות פלואוט למה אני עושה את זה?
ראינו כבר בקלקולטור שזה אינט הרי y זה אינט וy זה אינט פחות אם זה אינט ואינט חשבים זה אינט ואם זה יותר קטן, אם עצמנו יותר קטן בכל מקרה זה לא יהיה מדויק, אני רוצה פלואוט אז אני ממיר את הצד השמאלי לפלואוט ואז החלקי זה חלקי של פלואוטים b שווה, מה זה b? b שווה, ניקח אחת מהנקודות,
נגיד את p1, נקודה y mx, מה זה x? זה p1, נקודה x, זה b אז יש לנו את b, אז כל מה שנותר זה לחשב את y לראות האם המשוואה הזו מסוימת עבור הנקודה החדשה עכשיו, את שתי אלה, P1 ו-P2, אני לא יכול להגדיר אותם כ-read-only בואו רגע, ננטרן את השורות האלה שרציקו לנו
האם אני יכול להגדיר את P1 ו-P2 כ-read-only, כי מעניין אותי האם הקו הזה משתנה, הוא לא אמור להשתנות נעשה F6, לא מתקמפל, כי זה אמור להחזיר בוליאן נגיד, return, fold, F6, succeeded, בואו ננסה להפוך את זה ל-read-only, F6 אה, זה כן עובד, סבבה,
אז נעשה את זה רידוני, ואז, אה, פי שתיים לא יכולה להיות רידוני, זה מבאס מאוד, אבל עם זה נתמודד, פי שתיים לא תהיה רידוני, אבל למעשה אמורה להיות רידוני, רק פעם אחת מקבלת ערך וזהו, חבל, אבל זה מה שיש, אבל זה אמור להיות רידוני, שהייתי חייב לעשות את זה כ-n רידוני, נשים פה אפילו כזה, וכזה, b treated s כי זה לא
אמור להשתנות בזמן ההוצאה אז יפה אז בעצם מה שרציתי זה את החישוב הזה בעצם לעשות שאני מקבל את הערך של p2 ויכול לבצע את החישוב m time אחרי זה לעשות שוב חישובים ואז אני יכול לשמור את m ואת b אז אני יכול להגדיר יש לי private float m וזה עם underscore וprivate int b גם b יכול להיות float למה בעצם שלא
תהיה איזה פעולה שעושה שם כפול נעשה את זה עם underscore את ה-b אז יש לי את m ואת b אמורים אפילו זמינים לי כך שכשאני עושה את is point n אני יכול מאוד מהר לקבל את התשובה אז אם מה התשובה התשובה שהמשוואה הזו מתקיימת עבור כל עוד הערך הימני קטן מ-y ועוד 3 וגם הערך הימני גדול מ-y פחות
3 נגיד 3 זה האזור הצהוב הלי ווי שאנחנו מאפשרים חופש שאנחנו מאפשרים פוסט שאנחנו מאפשרים אז אם אז אני חושב את הצד הימני של המשוואה הצד הימני של המשוואה זה בעצם y אז אני אגדיר פלוט y שווה ל-mx ועוד b שווה ל-m כפול x ועוד b זה y אם y יותר גדול זה על פי המשוואה שלנו וזה כן קצת מתנגשים אחד בשני אז אם זה על פי
המשוואה שלנו לא יודע איך לקרוא לזה אפילו אני אקרא לזה yy כי אין לזה כמעט משמעות זה