התנגשות כדורים

התנגשות כדורים

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

bluexx

New member
פשוט תחשב זווית הגעה

ונקודת פגיעה ומסה של הכדורים ומהירות פגיעה זה פיזיקה.... עכשיו היה ואני רחוק מלהיות פיזיקאי אני יכול מקסימום להגיד שאם נניח יצא לך מהחישוב שזווית ההדיפה היא 45 מעלות והמהירות היא נגיד 3 מטר לשניה ולכדור יש מספיק כוח לנוע נגיד 5 שניות אז אתה עושה משהו כזה:
ball.speed 3 ball.ymove = .1 ball.xmove = 1 ball.knockbacktime = 5 if (ball.knockbacktime > 0) for (i = 0; i < ball.speed; i++) { ball.curloc.Y += ball.ymove; ball.curloc.X += ball.xmove; ball.knockbacktime--; //reduce ball.speed if needed/// } draw function() { draw the ball } |סלינק| אני כמובן מסתמך על זה שיש לך פונקציה שמעדכנת הכל ואתה מצייר הכל בכל שניה או שבריר שניה (פשוט תתקן את הקוד לפי זה) ואז הקוד פשוט חוזר לאם למעלה אחרי הציור מעדכן שוב ומצייר שוב עד שההדיפה נעצרת אם אתה לא מצייר את הכדורים אלא רק מחזיר מיקום אחרי ההדיפה פשוט תעשה כל עוד למעלה במקום אם והמיקום כבר ישתנה​
 
תודה - אבל זה לא עוזר לי

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

somebodddy

New member
מדובר בכדורים אלסטיים לחלוטין?

ועוד שאלה - הכדורים תמיד באותו משקל?
 
אני עוד לא יורד לרמה של ההגדרות האלה

כרגע מבחינתי זה בדיוק כמו כדור שחוזר מקיר, רק שבמקרה הזה הוא עגול. אני לא מתיחס למהירות ולמשקל של הכדורים, כי לא חשוב לי הריאליזם, ואחרי זה אני אוכל להכיל עליהם חוקים מסוימים. כרגע חשוב לי רק לדעת שאם למשל כדור נע במהירות X 5, ובמהירות Y 3, והוא פוגע בכדור אחר, שהמרכז שלו נגיד נמצא בנקודה (7,2) ביחס למרכז של הכדור הראשון, אז לדעת לאיזה כיוון תשתנה המהירות. אפילו אם היא לא ירדה בכלל,רק שינתה כיוון. תודה, שפי
 

somebodddy

New member
מתמטיקה ווקטורית אתה יודע?

כששני עיגולים נפגשים, הישר בין המרכזים שלהם(הקו הירוק) עובר בנקודת ההשקה, ומקביל לישר המשיק לשני המעגלים בנקודת ההשקה(הקו הכתום). ניצור מערכת צירים חדשה - הציר האדום יהיה כיוון ההתנגשות, והציר הכחול יהיה המקביל להתנגשות. המהירות על הציר הכחול לא משתנה, מכיוון שכל הכוח מופעל על הציר האדום. טוב, דבר ראשון אנחנו צריכים לחשב את הצירים החדשים שלנו לפי הצירים הרגילים. נקרא לציר האדום R ולציר הכחול B. לווקטור בין מרכזי הכדורים נקרא G, ואותו אתה אמור לדעת לחשב - מרכז כדור אחד פחות מרכז הכדור השני. R הוא ווקטור יחידה של G - כלומר הכיוון של R והכיוון של G זה אותו כיוון, פשוט האורך של R חייב להיות אחד - מה שאומר שצריך לנרמל את G:
dG=sqrt(Gx^2+Gy^2) Rx=Gx/dG Ry=Gy/dG​
B הוא האנך של R, לכן משתמשים בנוסחת האנך:
Bx=-Ry By=Rx​
עכשיו כשיש לנו את הצירים, אנחנו צריכים לחשב את המהירות לפי אותם צירים. אם המהירות היא V, אז עושים מכפלה סקאלרית בינה לבין כל ציר:
Vr=Vx*Rx+Vy*Ry Vb=Vx*Bx+Vy*By​
ככה עושים כמובן למהירויות של שני הכדורים. עכשיו, Vb נשאר ללא שינוי{בניגוד לVB שרק נעשתה גרועה עם השנים
}, בעוד שעל הVr של שני הכדורים אתה יכול לעשות חישוב התנגשות חד מימדי. כשאתה מסיים, אתה רוצה כמובן להחזיר את V למערכת הצירים הישנה של X וY. עושים את זה על ידי הכפלה פשוטה של כל רכיב של V בציר המתאים לו:
Vx=Vr*Rx+Vb*Bx Vy=Vr*Ry+Vb*By​
וקיבלת את המהירות החדשה של כל כדור. קפיש?
 
תודה

נראה לי שכן, אני אנסה לתכנת את זה בהזדמנות הקרובה, ולראות אם הבנתי עד הסוף. תודה. בברכה שפי.
 
למעלה