פורסם 2005 במאי 1320 שנים מצורף בזאת קובץ המכיל פרויקט ב-VB אשר מדגים לכם את מה שאני רוצה מהחיים שלכם שזה בעיקר:שתראו בעזרת איזה טיפוס נתונים בניתי פוליגון ואיך הדברים עובדים אצלי כדי שתוכלו לעזור לי עם בקשתי.קודם כל תריצו את התוכנית, תלחצו על הכפתור NEW POLY וכפתורי השליטה בפוליגון הם: החיצים בשביל להזיזו ממקום למקום, 1-להגדיל, 2-להקטין, 3-לסובב לצד אחד, 4-לסובב לצד שני.שימו לב שיש בדיקת גבולות לפוליגון שלא יצא מהטופס.עכשיו הסיבה שאני מזיין לכם את השכל עם זה היא כי אני רוצה לבנות פונקציה מסוימת ואין לי מושג איך.טענת כניסה: מקבלת שני פוליגונים ובודקת אם אחד יצא מהשני (הכוונה שפוליגון אחד תקוע בשני והפונקציה בודקת אם חלק מסוים שלו יצא)טענת יציאה: אם לא יצא מחזיר 0 אם יצאו בודק מאיזה כיוון (ציר X יחזיר 1 ציר Y יחזיר 2)לא שלחתי לכם את הקובץ POLYGON.ZIP סתם אלא בשביל שתעיינו בו ותראו איך כל הדבר הזה בנוי אצלי וזה בעקרון הבסיס לבניית הפונקציה שאני רוצה.הערה: אני מבקש מכל החכמים בלילה למינהם שיודעים לתכנת מגיל 0 שיעזרו לי בפתרון במקום להתחיל לשגע אותי בקשר לזה שהפונקציות שלי מטומטמות/לא יעילות/כל מני דברים מהסוג הזה מכיוון שלא זו היתה הכוונה.הערה2: אם יש לכם איזשהי שאלה בנוגע למשהו שבניתי שם שלא מובן לכם אז תשאלו, אין לי שום בעיה לענות.[attachment deleted by admin]
פורסם 2005 במאי 1320 שנים טוב, בתור התחלה אני אגיד שלא הסתכלתי בכלל על הקוד שלך כי אני לא מכיר (ולא רוצה להכיר) את VB ממש טוב.דבר שני - אתה לא יכול להגדיר 'כניסה' ו'יציאה' על מצב, אלא רק כשיש לך תנועה.אם יש לך שני מצבים שבאחד אין התנגשות ובשני יש (או ההיפך) אתה יכול לדבר על כניסה ויציאה.לבדוק התנגשות בין שני פוליגונים כלליים זה לא הדבר הכי קל בעולם, אבל הנה רעיון (הוא לא טריויאלי למימוש, אבל נראה לי שהוא שלם ויעיל)1. בדוק התנגשות בין המלבנים החוסמים של שני המצולעים.2. אם יש התנגשות - חלק את אחד המצולעים לשני חלקים* ובצע את הבדיקה ביניהם לבין הפוליגון השני. אם יש התנגשות (לפחות) באחד מהם - החזר אמת. אם לא - חזור מהפונקציה* צריך לחלק את המצולע שיש לו יותר קודקודים, ועדיף שזו תהיה חלוקה שיוצרת לך חלקים כמה שיותר ריבועיים.* אם אתה מגיע למצב שיש לך שני משולשים שמלבנים החוסמים שלהם נחתכים, אתה חייב לעשות את זה בדרך הקשה (כלומר עבור כל קודקוד באחד המשולשים - לבדוק אם הוא מוכל במשולש השני).נראה לי שאפשר לייעל את זה הרבה יותר אם אתה יודע שהפוליגונים שלך קמורים.
פורסם 2005 במאי 1320 שנים יצא כוונה היא שיש לו חלק בפנים וחלק בחוץ, כלומר, אם יש להם נק חיתוך?אם כן אז אין שום קשר לציר Yו- X, ואתה צריך פשוט לבדוק את נק החותוך של הישרים שלך שם כך: a1 = y2 - y1 b1 = x1 - x2 c1 = -(x1 * a1 + y1 * b1) a2 = y4 - y3 b2 = x3 - x4 c2 = -(x3 * a2 + y3 * b2) If a2 * b1 - a1 * b2 <> 0 Then ' not parellal X = (b2 * c1 - b1 * c2) / (a2 * b1 - a1 * b2) Y = -(a2 * c1 - a1 * c2) / (a2 * b1 - a1 * b2) If X >= max(min(x3, x4), min(x1, x2)) And X <= min(max(x3, x4), max(x1, x2)) And _ Y >= max(min(y3, y4), min(y1, y2)) And Y <= min(max(y3, y4), max(y1, y2)) Then print "hit" end if ElseIf c1 = c1 Then 'same line If max(min(x3, x4), min(x1, x2)) <= min(max(x3, x4), max(x1, x2)) And _ max(min(y3, y4), min(y1, y2)) <= min(max(y3, y4), max(y1, y2)) Then print "hit and included" End If End If
פורסם 2005 במאי 1320 שנים מחבר מה הקטע של A1,A2,B1,B2? למה דווקא ככה בדרך הזאת חיסרת?הקטע של הפוליגונים הם שאחד נמצא בתוך האחר ובודקים התנגשויות.
פורסם 2005 במאי 1320 שנים הבדיקה שאתה רוצה היא טיפה יותר מסובכת אבל אתה בסך הכול צריך להוסיף לפונ' שלו קטע שיצור מלבן בתוך כל אחת מהצורות ולבדוק אותם כדי שזה יול לבדוק אם זה כלוא בפנים בלי לגעת בצלעותתיאור של המצב המדובר:________ | ____ | | | | || |____| ||_______|הוא לא חותך את הצלעות של הריבוע החיצוני אבל הוא כלוא בתוכו
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.