עבור לתוכן

צריך קצת עזרה ב-VB בגרפיקה דו-מימדית (כתיבת פונקציה-רק למי שיש כח כי זה די ארוך)

Featured Replies

פורסם

מצורף בזאת קובץ המכיל פרויקט ב-VB אשר מדגים לכם את מה שאני רוצה מהחיים שלכם שזה בעיקר:

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

קודם כל תריצו את התוכנית, תלחצו על הכפתור NEW POLY וכפתורי השליטה בפוליגון הם: החיצים בשביל להזיזו ממקום למקום, 1-להגדיל, 2-להקטין, 3-לסובב לצד אחד, 4-לסובב לצד שני.

שימו לב שיש בדיקת גבולות לפוליגון שלא יצא מהטופס.

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

טענת כניסה: מקבלת שני פוליגונים ובודקת אם אחד יצא מהשני (הכוונה שפוליגון אחד תקוע בשני והפונקציה בודקת אם חלק מסוים שלו יצא)

טענת יציאה: אם לא יצא מחזיר 0 אם יצאו בודק מאיזה כיוון (ציר X יחזיר 1 ציר Y יחזיר 2)

לא שלחתי לכם את הקובץ POLYGON.ZIP סתם אלא בשביל שתעיינו בו ותראו איך כל הדבר הזה בנוי אצלי וזה בעקרון הבסיס לבניית הפונקציה שאני רוצה.

הערה: אני מבקש מכל החכמים בלילה למינהם שיודעים לתכנת מגיל 0 שיעזרו לי בפתרון במקום להתחיל לשגע אותי בקשר לזה שהפונקציות שלי מטומטמות/לא יעילות/כל מני דברים מהסוג הזה מכיוון שלא זו היתה הכוונה.

הערה2: אם יש לכם איזשהי שאלה בנוגע למשהו שבניתי שם שלא מובן לכם אז תשאלו, אין לי שום בעיה לענות.

[attachment deleted by admin]

פורסם

טוב, בתור התחלה אני אגיד שלא הסתכלתי בכלל על הקוד שלך כי אני לא מכיר (ולא רוצה להכיר) את VB ממש טוב.

דבר שני - אתה לא יכול להגדיר 'כניסה' ו'יציאה' על מצב, אלא רק כשיש לך תנועה.

אם יש לך שני מצבים שבאחד אין התנגשות ובשני יש (או ההיפך) אתה יכול לדבר על כניסה ויציאה.

לבדוק התנגשות בין שני פוליגונים כלליים זה לא הדבר הכי קל בעולם, אבל הנה רעיון (הוא לא טריויאלי למימוש, אבל נראה לי שהוא שלם ויעיל)

1. בדוק התנגשות בין המלבנים החוסמים של שני המצולעים.

2. אם יש התנגשות - חלק את אחד המצולעים לשני חלקים* ובצע את הבדיקה ביניהם לבין הפוליגון השני. אם יש התנגשות (לפחות) באחד מהם - החזר אמת.

אם לא - חזור מהפונקציה

* צריך לחלק את המצולע שיש לו יותר קודקודים, ועדיף שזו תהיה חלוקה שיוצרת לך חלקים כמה שיותר ריבועיים.

* אם אתה מגיע למצב שיש לך שני משולשים שמלבנים החוסמים שלהם נחתכים, אתה חייב לעשות את זה בדרך הקשה (כלומר עבור כל קודקוד באחד המשולשים - לבדוק אם הוא מוכל במשולש השני).

נראה לי שאפשר לייעל את זה הרבה יותר אם אתה יודע שהפוליגונים שלך קמורים.

פורסם

יצא כוונה היא שיש לו חלק בפנים וחלק בחוץ, כלומר, אם יש להם נק חיתוך?

אם כן אז אין שום קשר לציר 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

פורסם
  • מחבר

מה הקטע של A1,A2,B1,B2? למה דווקא ככה בדרך הזאת חיסרת?

הקטע של הפוליגונים הם שאחד נמצא בתוך האחר ובודקים התנגשויות.

פורסם

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

תיאור של המצב המדובר:

________

| ____ |

| | | |

| |____| |

|_______|

הוא לא חותך את הצלעות של הריבוע החיצוני אבל הוא כלוא בתוכו

פורסם

מה עם המקרה הזה?

[attachment deleted by admin]

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים