עזרה בתכנות בתלת מימד

tseliot

New member
עזרה בתכנות בתלת מימד

זה לא ממש הפורום, אבל לצערי פורום "בניית משחקי מחשב" סגור אז ככה: תכנתתי משחק בסגנון Star control (מבט מלמעלה על שתי חלליות שמנווטות בשטח דו מימדי). שם כל דבר מאוד פשוט- קל מאוד להגדיר את ווקטור המהירות של החללית- השינוי במיקום החללית הוא פשוט רכיב הסינוס של הזוית כפול המהירות בציר הY, וכנ"ל עם קוסינוס בציר הX. אבל מה קורה כשאני רוצה ליצור עולם תלת מימדי- איך כדאי לי לתאר את ווקטור המהירות של החללית(אני חשבתי לייעד זוית אחד לכיוון בצירים XY, ועוד זווית שמתארת את ההגבהה של אף החללית, אבל זה לא עבד יפה)? אני אשמח אם מישהו יסביר לי את הכל, או יפנה אותי למאמר :) גכמו כן, אם אתם חושבים שזהו אינו הפורום, אשמח לדעת איזה הוא כן המתאים :)
 

voguemaster

New member
מהירות תלת-מימדית

ישנן שתי צורות עיקריות לתאר מהירות תלת מימדית. אתה יכול כמו שאמרת להשתמש בשתי זוויות שמגדירות את זוית הסיבוב, אחת סביב ציר Z (כלומר על מישור XY) ואחת סביב ציר Y שמגדירה סיבוב על מישור XZ). למעשה, שימוש בקואורדינטות כדוריות. מצד שני, אתה יכול לבחור בשיטה המקובלת יותר והפשוטה יותר ברוב המקרים והיא ווקטור מהירות בעל שלושה רכיבים, X, Y ו-Z. מה שיפה בגישה הזו שאתה פשוט יכול להוסיף את ווקטור המהירות לווקטור המיקום ולקבל את המיקום החדש אחרי פרק זמן מסוים. אם פרק הזמן שלך מספיק קצר, קיבלת קירוב של תנועה רציפה.
 

tseliot

New member
הכל טוב ויפה...

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

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

tseliot

New member
לא אני לא מכיר...

לעצרי אני נעצר במטמתיקה של 5 יחידות :) אתה מוכן להרחיב/להפנות?
 

ZDanielZ

New member
כמו שזה נראה כרגע...

אתה מנסה לעבוד בקואורדינטות כדוריות. קואורדינטות כדוריות מאפשרות לך לתאר כל וקטור באמצעות שתי זוויות ורדיוס. במקרה שלך, זה דווקא די מתאים. הבעיה שלך, ככל הנראה, היא במעבר מכדורויות לקרטזיות כדי לקבל מהירות בכיוון ציר X,Y,Z. קודם כל, כדי ללמוד על הנושא, אתה מוזמן להציץ פה. אבל כדי לקצר לך, המעבר מכדורויות לקרטזיות:
x=r*cos(theta)*sin(phi) y=r*sin(theta)*sin(phi) z=r*cos(phi)​
כל זה כאשר theta היא הזווית במישור XY ו phi הזווית בין הרדיוס לציר Z. תבדוק באתר, שם זה ברור יותר.
 

tseliot

New member
זה דווקא בדיוק מה שעשיתי...

אמנם אני לא יודע מטריצות, אבל את הנוסחא הנ"ל ניתן להבין ממתמטיקה ברמה תיכונית... הבעיה היא שאני רוצה שה"מטוס" לא יסתובב במישור הXY האוניברסלי, אלא במישור הXY היחסי של ה"מטוס". מה שקורה כרגע זה שכשהמטוס מסתובב 180 מעלות בזוית Theta, מה שקורה הוא שהאף שלו משנה את מיקומו בהתאם בציר X וY, אבל שומר על ערך הZ שהיה לו ממקודם. כנ"ל לגבי הזנב של המטוס. אני שואף שסיבוב של 180 מעלות יגרום לאף להיות היכן שהיה הזנב, ולזנב להיות היכן שהיא האף- גם מבחינת ציר Z. כרגע שינוי בזוית תטה לא משפיע על ציר הZ מכיוון שבחישובו רק פי מופיעה... אני שואף לעבוד לפי מערכת קואורדינטות יחסית למטוס ולא גלובלית...
 
למעלה