ABA


"C + OPENGL | איך לבדוק אם נקודה מסוימת נמצאת בתוך משולש?"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #20368 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 20368
asco88 
חבר מתאריך 17.6.04
26757 הודעות
   22:50   25.11.13   
אל הפורום  
  C + OPENGL | איך לבדוק אם נקודה מסוימת נמצאת בתוך משולש?  
 
קיבלתי 3 נק' X,Y ובניתי מהם משולש, אני מעוניין להגריל נקודה שתהיה בתוך המשולש הנוצר מ3 הנקודות.

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


glPushMatrix();
glBegin(GL_POINTS);
for (i = 0; i < abs(pt.x - pt.x) ; i ++) {
a = 0; b = 1;

temp = findLine(pt.x, pt.x, pt.y, pt.y);

smallx = (pt.x > pt.x ? pt.x : pt.x);
smally = (pt.y > pt.y ? pt.y : pt.y);
bigx = (pt.x < pt.x ? pt.x : pt.x);
bigy = (pt.y < pt.y ? pt.y : pt.y);

if (temp > 0)
starty = 0 - bigy;
else
starty = smally;

glVertex2f(smallx + i,starty - (smallx + i) * temp);
}
glEnd();
glPopMatrix();

יש לי עוד 2 קטעי קוד דומים ל2 נקודות נוספות, הבעיה שהאלגוריתם לחישוב הנקודות משתנה בהתאם לנק', וזה צריך להיות אוניברסלי (ככה שאני אוכל לבנות אוטומטית משולש שלם, מכל 3 נקודות נתונות)

הפונקציה findLine מחזירה שיפוע בין שתי נקודות, באמצעות חלוקה של הפרש הY חלקי הפרש הX.

אשמח לכל עזרה בנושא.

תודה רבה, וסליחה על החפירה


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  מכתב TheKid 26.11.13 20:11 1
     נכון, נראה לי שזה יעבוד asco88  27.11.13 11:46 2

       
TheKid לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 5.10.07
17978 הודעות, 1 פידבק
   20:11   26.11.13   
אל הפורום  
  1. מכתב  
בתגובה להודעה מספר 0
 
   קראתי את מה שכתבת וקצת התבלבלתי, אז אני פשוט אענה על מה שהבנתי.

האלגוריתם שמצאת נכון.

על מנת למצוא נקודה שהיא בטוח מחוץ למשולש קח את שיעור הX הגדול ביותר ואת שיעור הY הגדול ביותר(מבין הקודקודים של המשולש) תוסיף לשניהם קצת ובוודאות הנקודה היא מחוץ למעגל.

לאחר מכן תמצא את נוסחאת הקו הישר בין שתי הנקודות שלך(זאת שמחוץ וזאת שאתה לא יודע).

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

כמות נקודות החיתוך זו התשובה שאתה מחפש.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
asco88 
חבר מתאריך 17.6.04
26757 הודעות
   11:46   27.11.13   
אל הפורום  
  2. נכון, נראה לי שזה יעבוד  
בתגובה להודעה מספר 1
 
אני אשחק עם זה עד שזה יצליח, כי כבר די נמאס לי מהתוכנית הזאת..
האמת שלא ידעתי איך באמת למצוא נקודה שבוודאות מחוץ למשולש.

תודה רבה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net