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

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


sir f

Recommended Posts

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

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

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

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

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

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

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...