ערכתי לאחרונה בתאריך 10.04.10 בשעה 12:32 בברכה, ronen333
שבת שלום חבר'ה .
לא מדובר בעוד אלגוריתם מסובך או להוציא את העיינים על בעיות קטנות, אלא הצעת רעיון לגבי התמודדות עם דיוק אחרי הנקודה.תיאור הבעיה:
יש לי לוח על רזולוציה מסוימת, ומטריצה שמייצגת את הלוח הזה. על מנת לחסוך בזכרון ומיפני שהלוח הזה מיוצג במשבצות חבל להקצות על כל פיקסל במסך בלוק זכרון , אז חילקתי את גובה הלוח בגודל משבצת , וגם כן את רוחב הלוח חילקתי במשבצת, וככה ממטריצה ענקית ומפלצתית שזוללת זכרון יוצאת מטריצה סבירה של כ1000 תאים, שגם מחשב חלש בימנו יוכל לעבור עליו במהירות (פעם אחת בלבד במשחק-שזה הבניה של המטריצה).
עד פה הכל טוב ויפה, איפה באה הבעיה? כאשר אני צריך להמיר את המקום הפיסי (בפיקסלים) למטריצה, ולהפך- להפוך את המיקום במטריצה למקום פיסי(בפיקסלים).
המיקום הפיסי הוא float שמיוצג ע"י וקטור דו מימדי, ומיקום במטריצה זה מן הסתם האינדקסים במטריצה.. (שברור לכולנו שהם צריכים להיות מספר שלם, כלומר int).
עשיתי את הפוקצית המרה מפיקסל למטריצה הבאה:
public static void ConvertPositionToMatrix(Vector2 position, out int row, out int col) { position -= new Vector2(Game1.BOARD_WIDTH_OFFSET, Game1.BOARD_HEIGHT_OFFSET); row = (int)(position.Y / BOARD_SQURE); col = (int)(position.X / BOARD_SQURE); }
|
וכאמור ההפוכה לה, ממטריצה למקום פיסי:
public static Vector2 ConvertMatrixToPosition(int row, int col) { return new Vector2(col * BOARD_SQURE + BOARD_WIDTH_OFFSET, row * BOARD_SQURE + BOARD_HEIGHT_OFFSET); }
|
הבעיה האמתית היא שכאשר אני מעביר לINT אני מאבד את הדיוק אחרי הנקודה, ואז שאני מנסה להחזיר את המיקום הזה למיקום פיסי לא נוצר לי המיקום הנכון במדויק.
מה אתם מציעים לעשות? X=
תודה מראש לעוזרים