פורסם 2010 באוקטובר 2715 שנים אני עושה 10 יחידות מדעי המחשב ול5 היחידות השניות אנחנו בונים משחק/תוכנה תלת מימדי/ת בC#, אני בונה קוביה הונגרית ויש לי בעיה אם אני מסובב פאה רוחבית ואחר כך פאה אנכית אז הקוביה המשותפת לשני הפאות מסתובבת בנוסף לשני הצירים האלו גם בציר Z. בחלק מהעמודים יש מתודות או חלקי קוד לא בשימוש/בהערות זה דברים שהיה לי צורך בהם ועכשיו כבר אין לי וסביר להניח שיהיה בהמשך אז אפשר להתעלם מזה. קישור להורדה:http://www.filefront.com/17428606/Pr...hDirection.rar תודה מראש לעונים .
פורסם 2010 באוקטובר 2815 שנים נסה לשים את הקוד הרלוונטי ישר בפורום וכך יהיה יותר סיכוי שתקבל תשובה.חוץ מזה לאנשים שמנתחים את הקוביה יש שפת סימנים כך שהם יכולים לדבר על המהלכים השונים ולהבין האחד את השניה.ראה: http://en.wikipedia.org/wiki/Rubik%27s_Cube#Move_notationלעצם העניין פאות חולקות צלע, לא קוביה אז לא ברור לי למה אתה מתכוון בקוביה משותפת?
פורסם 2010 באוקטובר 2915 שנים מחבר זו הבעיה שלי פחות או יותר:אם אני מסובב שורה ימינה או שמאלה ואחרי זה טור כלפי מעלה או מטה אז לטור שסובבתי ולשורה שסובבתי יש קוביה אחת במשותף והיא מסתובבת על ציר נוסף שלא אמור להיות.קוד רלוונטי: { for (int i = 0; i < turns.GetLength(1); i++) { if (turns[0, i] != 0) { TVertex newPos; for (int j = 0; j < 3; j++) for (int k = 0; k < 3; k++) { int index = (i + k * 3) * 3 + j; newPos = Cubes[index].GetPos(); Cubes[index].SetOrientationY(Cubes[index].GetOrientationY() + turns[0, i]); Cubes[index].SetPosAndAngle(newPos.X, newPos.Y, newPos.Z, Math3D.Deg2Rad(Cubes[index].GetOrientationX()), Math3D.Deg2Rad(Cubes[index].GetOrientationY()), 0); //Cubes[index].SetPosAndAngle(newPos.X, newPos.Y, newPos.Z, Math3D.Deg2Rad(Cubes[index].GetOrientationX()), Math3D.Deg2Rad(Cubes[index].GetOrientationY()), Math3D.Deg2Rad(Cubes[index].GetOrientationZ())); } if (++count == 30) { turns[0, i] = 0; count = 0; } } else if (turns[1, i] != 0) { TVertex newPos; for (int j = 0; j < 3; j++) for (int k = 0; k < 3; k++) { int index = (j + k * 3) * 3 + i; newPos = Cubes[index].GetPos(); Cubes[index].SetOrientationX(Cubes[index].GetOrientationX() + turns[1, i]); //Cubes[index].SetOrientationZ(Cubes[index].GetOrientationY() + 270); Cubes[index].SetPosAndAngle(newPos.X, newPos.Y, newPos.Z, Math3D.Deg2Rad(Cubes[index].GetOrientationX()), Math3D.Deg2Rad(Cubes[index].GetOrientationY()), Math3D.Deg2Rad(Cubes[index].GetOrientationZ())); } if (++count == 30) { turns[1, i] = 0; count = 0; } } } } private void rotateRC()
פורסם 2010 באוקטובר 2915 שנים אני לא 100% בטוח אבל לפי התיאור שלך נשמע שאתה חווה gimbal lock. זה קורה כאשר שניים או יותר צירי סיבוב מתלכדים לציר אחד, כתוצאה של סיבובים קודמים. http://en.wikipedia.org/wiki/Gimbal_lock הפתרון המקובל הוא לעבוד ב-quaternions או לפרט סיבובים ע"י ציר + זווית. יתכן שעבור קוביה הונגרית יש פתרונות קלים יותר. עריכה: כן, הנה מישהו שנתקל בבעיה הזו ופתר אותה עם quaternions http://www.perkstoveland.com/archives/92
פורסם 2010 באוקטובר 2915 שנים מחבר אני לא 100% בטוח אבל לפי התיאור שלך נשמע שאתה חווה gimbal lock. זה קורה כאשר שניים או יותר צירי סיבוב מתלכדים לציר אחד, כתוצאה של סיבובים קודמים. http://en.wikipedia.org/wiki/Gimbal_lock הפתרון המקובל הוא לעבוד ב-quaternions או לפרט סיבובים ע"י ציר + זווית. יתכן שעבור קוביה הונגרית יש פתרונות קלים יותר. עריכה: כן, הנה מישהו שנתקל בבעיה הזו ופתר אותה עם quaternions http://www.perkstoveland.com/archives/92 קודם כל תודה , נכנסתי ללינקים שהבאת והם מסבירים טוב גימבל לוק ומשם מצאתי כמה קישורים לפתרון של גימבל לוק הבעיה היא שהפתרונות שלהם הם לא תכנותיים אלא בכל מיני תוכנות גרפית(אלא אם לא הבנתי נכון) וגם בקישור של המתכנת שנתקל בבעיה ופתר אותה הוא לא מסביר איך. ניסיתי כל מיני נוסחאות שמצאתי בויקיפדיה אבל הן לא מתאימות(כנראה) למצב הספציפי שלי.
פורסם 2010 באוקטובר 2915 שנים אתה צריך להפסיק לעבוד עם זוויות אויילר - שזה סט של 3 זוויות סיבוב - סביב ציר X, סביב ציר Y, סביב ציר Z.ממה שאני רואה מהקוד זה מה שאתה עושה (SetOrientationX, SetOrientationY וכו').עצם זה שאתה עובד בצורה הזו זו הבעיה. במקום זה תעבוד עם quaternion - תשמור את האוריינטציה של הקוביה כ-quaternion ואת כל פעולות הסיבוב תעשה ע"י הכפלה ב-quaternion מתאים.רק כאשר אתה מגיע לרינדור הפריים הנוכחי, תמיר את ה-quaternion למטריצת סיבוב (או לזוויות אויילר) ואז תבצע את הטרנספורמציה.הרעיון המרכזי: תעבוד רק עם quaternion ותמיר לזוויות רק על מנת לצייר ואז "תזרוק את הזוויות לפח".disclaimer: עבר המון זמן מאז שהתעסקתי עם זה, אז אני מקווה שאני לא מטעה.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.