मेरे पास लूपिंग लाइन सेगमेंट के संग्रह द्वारा परिभाषित एक कमरा ऑब्जेक्ट है जिसे मुझे उस क्षेत्र की गणना करने की आवश्यकता है। वर्गों को निम्नानुसार वर्णित किया जा सकता है (छद्म कोड में):
class Point {
float x;
float y;
...
float distanceFrom(Point p);
}
class Segment {
Point start;
Point end;
...
float length();
}
class Room {
List<Segment> walls;
...
float area();
}
एक कमरे की दीवारें कभी भी कहीं भी घुस नहीं सकती हैं, लेकिन सेगमेंट के अंतिम बिंदु पर और बनाए गए किसी भी "सब-लूप" को भी एक नए कमरे में अलग कर दिया जाएगा। समाधान पूरी तरह से सटीक होने की आवश्यकता नहीं है (त्रुटि का 10% मार्जिन स्वीकार्य है) और बहुत बार गणना नहीं की जाती है (<1 / s)।
Room
लिए हमेशा पूर्ण होने की आवश्यकता होती है , और ऐसा नहीं हो सकता है अगर मेरे पास खिलाड़ी का Room
उपयोग कर रहा है Segment
। इसके अलावा, एक बंद कमरे के कार्य को परिभाषित करना आसान है ( Segment
एस के माध्यम से सिर्फ लूप और सुनिश्चित करें कि वे एक कमरा बनाते हैं)।
Room
की एक सूची को शामिल करने के लिए और अधिक समझ में आता हैPoint
, और फिर प्रत्येक बिंदु को एक साथ जोड़कर खंड प्राप्त करता है और फिर इसे वापस चारों ओर लूप करता है। अन्यथा, आपके वर्तमान सेटअप के साथ, गलत मान प्राप्त करने के लिए यह बहुत पूरब है (जैसे कि अप्रयुक्त कमरा, बीच में दीवार के साथ कमरा, आदि)। यह सबसे अच्छा विकल्प होगा।