שאלה קטנה..

OhBaby

New member
שאלה קטנה..../images/Emo9.gif

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

ערכי הTOP והLEFT מייצגים רק פינה אחת מתוך ארבעת הפינות של האובייקטים (אם אני לא טועה מדובר בפינה העליונה השמאלית) ולכן אם נגד הפינה התחתונה תיגע הוא לא יזהה את זה, בקשר לפתרון, יש שני טכניקות נפוצות: האחת היא לחשב את שאר ערכי הריבוע (הנקודה השמאלית ועוד אורך האובייקט יתן לך פינה ימנית עליונה וכו'), אבל זה פחות מדויק, אם הדיוק מאוד חשוב ניתן לעקיף כל אובייקט בעיגול על ידי חישוב רדיוס ובדיקה אם המרחק בים שני האובייקטים קטן מ-R (חשוב ששני העיגולים יהיו בעלי רדיוס זהה). בהצלחה...
 

someboddy

New member
למה העיגול התוחם יותר מדויק?

זה לא תמיד נכון. זה תלוי בצורה של האובייקט
 

someboddy

New member
אם הצורה היא לא עיגול ולא מלבן...

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

freak2100

New member
אתם משגעים אותי... זה שתי, לא שני!

שיטה אחת, שתי שיטות
בעעע.... (כנ"ל לגבי שתי טכניקות ולא שני טכניקות)
 

someboddy

New member
זובי!

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

freak2100

New member
נכון, אבל זה ממש מציק בעין ../images/Emo3.gif

גם בלבול בין זכר לנקבה במספרים (במיוחד אחד-אחת ושניים-שתיים... עם אחרים אין לי כל כך בעייה) גם הוספת ה' בגוף שני (נוכח) בעבר (עשיתה, ראיתה... אומרים את זה עם ה' אבל כותבים בלי - עשית, ראית...) וגם י' במקום א' בגוף ראשון (מדבר) בעתיד (יעשה זה "הוא יעשה". אעשה זה "אני אעשה")
 

Ultra Spidey

New member
אם אני אראה עוד מישהו

שישים יו"ד במקום אל"ף בגוף ראשון יחיד עתיד - אני ארצח אותו בדם קר.
 

De-Panther

New member
אמכבר אז איך אפשר..../images/Emo166.gif../images/Emo23.gif../images/Emo185.gif

לחשב התנגשות של אליפסה??
 

someboddy

New member
מ........

האמת שאין לי מושג. אני אשן על זה ואנסה להחזיר לך תשובה מחר
 

freak2100

New member
אני לא ממש זוכר מה ההגדרה של אליפסה

אבל נדמה לי שההגדרה המתמטית היא שיש שני מוקדים, ואם מעבירים משולש בין שני המוקדים לנקודה (x,y) כלשהי והשטח יוצא שטח מסויים, אז זאת נקודה על האליפסה. אם אני צודק, אז אני חושב (שוב, לא בטוח...) שכל נקודה שתיצור משולש בעל שטח קטן או שווה לשטח של האליפסה, היא נקודה שנוגעת באליפסה. לכן, אם רוצים לבדוק אם נקודה (x,y) נוגעת באליפסה שהמוקדים שלה הן (x1,y1), (x2,y2) ושטח המשולש שלה הוא M, אז... רגע
:
//from (x1, y1) to (x2, y2): var m = (y1-y2)/(x1-x2); // y-y1-m*x+m*x1 = 0 var h = abs((y-y1-m*x+m*x1)/sqrt(1+m^2)); var s = sqrt((x1-x2)^2+(y1-y2)^2)*h/2; if (s<M){ // mayB.... }​
אבל שוב, אני לא בטוח, לא בזה שאני צודק ולא בזה שאין טעויות בדרך שלי
 

someboddy

New member
אבל אם רוצים לחשב

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

freak2100

New member
שיט, נראה לי שטעיתי

נראה לי שזאת לא ההגדרה של אליפסה
 

freak2100

New member
אוקיי, זה דווקא יותר פשוט

ההגדרה של אליפסה הרבה יותר פשוטה זה שני מוקדים, וסכום המרחקים של כל אחד מהמוקדים מנקודה מסויימת על האליפסה - שווה למספר ספציפי ככה שהאליפסות שלנו מוגדרות ככה: * (x1, y1) ו(x2, y2) - שני המוקדים * R - סכום המרחקים של כל אחד מהמוקדים מנק' על האליפסה אז אם יש לנו שתי אליפסות:
(x1, y1), (x2, y2), R1 (x3, y3), (x4, y4), R2​
מה שצריך לעשות זה דבר כזה:
if (max(sqrt((x1-x3)^2+(y1-y3)^2), sqrt((x1-x4)^2+(y1-y4)^2))+max(sqrt((x2-x3)^2+(y2-y3)^2), sqrt((x2-x4)^2+(y2-y4)^2)) <= R1+R2){ // התנגשות }​
נראה לי שזה נכון
 

De-Panther

New member
טוב ככה זה אנשים עם../images/Emo166.gif../images/Emo23.gif../images/Emo185.gif

יותר מ3 יחידות במתמטיקה
 

freak2100

New member
הייתי מסביר איך הגעתי לזה

אבל יש לי משהו לעשות (ואני מתחמק ממנו ע"י כניסה לפורום כל כמה דקות) ואני עייף (ולא הולך לישון כי יש לי משהו לעשות
) ואני גם לא ממש בטוח שזה נכון... אבל כמעט
מחר אני אקרא מה כתבתי ואראה אם זה נכון (וגם אהיה מופתע כשאני אקרא הודעה שבה אני כותב "מחר אני אקרא מה שכתבתי" כי זה יהיה לי מוזר לראות שחזיתי אתמול מה יקרה היום, ואז אתפקע מצחוק כשאני אגלה שחזיתי גם את זה שאני אהיה מופתע. וכשאני אסיים להתפקע מצחוק אני קרא את המשפט שמתחיל ב"ואז אתפקע מצחוק" ושוב אתחיל לצחוק. אבל אחרי זה זה כבר לא יהיה מצחיק ואני אחשוב שאני ממש מטומטם שכתבתי את זה כי בטח כולם חשבו עלי שאני מפגר שכתבתי את כל זה. ואז אני אכתוב הודעת התנצלות בשמי ואגיד שזאת לא אשמתי והייתי עייף וכו' ואף אחד לא אאמין לי. ואז אני כבר ממש לא אצחק. ההפך, אני אעלב. אבל אז אני אזכור שאין לי את מי להאשים חוץ מאת עצמי. ואז אני אזכור שכבר הבטחתי לעצמי לא לכתוב הודעות בפורומים כשאני ממש עייף כי יוצא לי לכתוב שטויות, ומנגד אני אזכר שהחלטתי שמאמרים וכאלה הכי טוב לי לכתוב כשאני עייף כי אז אני לא שם לב שאני מגזים ויוצאים לי דברים מאוד משעשעים. אבל אז אני אזכר שכל זה כתוב בתוך סוגריים שכתובות בתוך תגובה להודעה בעלת משפט אחד, ואז אני שוב אצחק מעצמי. אבל אז אני אזכור שכל זה לא קרה בכלל בסדר כרונולוגי! איך יכול להיות שהפסקתי באמצע ההודעה, כתבתי הודעת התנצלות, התווכחתי עם חברי הפורום, נעלבתי ואז חזרתי לקרוא את החלק השני של ההודעה?! הרי קודם קוראים את כל ההודעה ורק אחרי זה מגיבים! אבל אין לי כח לפרט את כל זה כי יש לי משהו חשוב נורא לעשות שעוד לא התחלתי ואני חייב לסיים למחר ואני כל הזמן מוצא דרכים איך למשוך כמה שיותר זמן ואני מאריך את המשפטים שלי ומוסיף עוד משפטים חסרי משמעות ותועלת וקורא שוב ושוב את המשפט האחרון כי אין לי כח לגשת לדבר הנורא נורא חשוב שיש לי לעשות למחר, ואני לא אפרט כי הוא ממש לא קשור לבניית משחקי מחשב ואני לא רוצה, חס וחלילה, שהסוגריים האלה, בתוך התגובה לתגובה למה שכתבתי יהפכו להיות הודעת OFF, מה אני, ספאמר?) - אם לא אני אתקן, אם כן אני אוסיף הסבר איך הגעתי לזה. לילה טוב.
 
למעלה