עבור לתוכן

שאלה-תוכנה לחישוב שטח של צורות גאומטריות(מצולעים)

Featured Replies

פורסם

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

שתי שאלות עכשיו:

1)מישהו מכיר תוכנה כזאת(חינמית)

2) בכל מקרה אני הייתי רוצה לנסות לעשות את התוכנה בעצמי, מישהו יכול בבקשה לתת לי את האלגוריתם?אין לי מושג מה לעשות

פורסם

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

אחריי שחישבת משולש אתה חותך אותו מהמצולע כך שאם קודם היה לך מצולע בעל N צלעות, עכשיו יש לך מצולע בעל N-1 צלעות

אתה ממשיך ככה עד שנשאר לך משולש

פורסם
  • מחבר

כן, אבל הבעיה המרכזית שלי היא איך להעריך שטח מסויים כמשולש ולחתוך אותו

פורסם

מה שהבנתי מהמעט שקראתי:

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

השקעתי והוספתי תמונה להמחשה :)

המצולע הנתון מסומן בשחור. באיטרציה הראשונה השטחים של המשולשים מסומנים בורוד שמתחזק בסדר עולה. המשולש המסומן בירוק הוא הצורה הנשלחת בקריאה הרקורסיבית של האלגוריתם. שים לב שלמשולש השני (משולש 3-4-5) יש זווית גדולה מ 180, לכן סינוס הזווית יהיה שלילי, ולכן השטח הזה יוחסר מהשטח המחושב בסופו של דבר (שטח משולש מחושב כך: a*b*sin©/2 כש-a ו-b הם צלעות סמוכות ו-c הוא הזווית שבינהן).

[attachment deleted by admin]

פורסם
  • מחבר

תודה אני אנסה לעשות את זה.

עכשיו, מישהו יכול לתת לי תוכנה שעושה את זה? כי אם אני אעשה את זה זה לא יהיה כ"כ יעיל ונוח לשימוש, וצריך תוכנה טובה.

פורסם

זהירות! לא כל אלגוריתם מתחשב במצולעים קעורים (concave) ובמקרי קצה מעצבנים.

מה שאתה רוצה זה לעשות טריאנגולציה בשלב ראשון (http://en.wikipedia.org/wiki/Polygon_triangulation) ואז לחשב את המשולשים.

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

יש גם ספריות חופשיות שיעשו את הכל בשבילך. CGAL ו-opencv. הן יפתרו את הבעיה בצורה מדוייקת ללא באגים, ויתחשבו גם במקרי קצה.

פורסם

קוד שכתבתי בזמנו ב C#-



public float Area
{
get
{
float area = 0;

for (int i = 1; i + 1 < _points.Count; i++)
{
float x1 = _points[i].X - _points[0].X;
float y1 = _points[i].Y - _points[0].Y;
float x2 = _points[i + 1].X - _points[0].X;
float y2 = _points[i + 1].Y - _points[0].Y;
float cross = x1 * y2 - x2 * y1;
area += cross;
}
return Math.Abs(area / 2.0f);

}
}



פורסם

זה עבור פוליגונים קעורים?

פורסם

אין לי זמן להכנס לזה, אבל נראה לי שזה לא יעבוד עבור מצולעים קעורים מסובכים.

לדוגמא ספירלה: http://www.ics.uci.edu/~eppstein/161/theseus.gif

פורסם
  • מחבר

בכל מקרה זה לא משנה, הוא משתמש רק ברכיבים זוויתיים

פורסם

אין לי זמן להכנס לזה, אבל נראה לי שזה לא יעבוד עבור מצולעים קעורים מסובכים.

לדוגמא ספירלה: http://www.ics.uci.edu/~eppstein/161/theseus.gif

עבור Concaves רגילים זה עובד.

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

אבל העקרון הגיאומטרי עדין תקף בכל רמת סיבוך.

ארכיון

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

דיונים חדשים