2012-02-15 6 views
8

कहें, 50, विभिन्न चौड़ाई और ऊंचाइयों वाली छवियों के संग्रह को देखते हुए, प्रोग्रामिंग के बारे में एक दिलचस्प * अमूर्त तरीके से उन्हें कैसे व्यवस्थित किया जाएगा? (नीचे छवि देखें)प्रोग्रामेटिक रूप से आयताकार यूआई ऑब्जेक्ट्स को एक अमूर्त तरीके से व्यवस्थित करें, बिना किसी अंतर के

enter image description here

  • तक दिलचस्प मेरा मतलब है, कोई बड़ा अंतराल है, और कोई आसानी से अलग पहचाना पंक्तियों या स्तंभों (नकारात्मक अंतरिक्ष टी की तरह चौराहों का एक बहुत बनाता है)।

मेरी विशेष मामले के लिए, सभी छवियों (450px से 150px, या 378px 150px तक हो सकता है) 150px का एक सेट अधिकतम आयाम है, जो ऊंचाई अर्थ हो सकता है या चौड़ाई 150px की एक अधिकतम है।

यह लगता है जैसे कि यह एक क्लासिक प्रोग्रामिंग चुनौती हो सकता है, लेकिन मैं गूगल के लिए कठिन विषय की खोज कर रहा हूँ ...

संपादित करें: कैसे समग्र व्यवस्था होना चाहिए पर कोई प्रतिबंध नहीं है कि दिखाने के लिए बदल दिया छवि (एक सेट क्षेत्र के अंदर फिट नहीं होना चाहिए)

+2

मैं आपको 'पैकिंग समस्या' के विषय पर Google का सुझाव देता हूं। –

उत्तर

0

आपकी समस्या NP-Hard है।

This thread दिखाता है कि एक प्रकार के एनएक्सएम आयताकारों के साथ भी, यह समाधान खोजने के लिए एनपी-हार्ड है, इसलिए आपकी अधिक सामान्यीकृत समस्या निश्चित रूप से एनपी-हार्ड भी है [केवल एक प्रकार का आयताकार है इस समस्या के निजी मामले]

यदि आप के बाद समाधान, या genetic algorithms या hill climbing के रूप में एक अनुमानी दृष्टिकोण है, जो तेजी से हो जाएगा अनुकूलित कर रहे हैं एक backtracking समाधान की कोशिश कर सकते हैं - लेकिन आम तौर पर एक गैर इष्टतम परिणाम मिल जाएगा।

+0

यह एनपी-हार्ड नहीं है। यह एक यादृच्छिक treemap सही है? – Triptych

+0

@Triptych: मैं आपको समझ में नहीं आया, "यादृच्छिक treemap" क्या है? [इसका मतलब क्या है "यह है"? यह क्या है?] और आप दावा क्यों करते हैं कि यह एनपी-हार्ड नहीं है? यह 2 डी-बिन पैकिंग – amit

+0

की एक भिन्नता है यदि आपके पास पहले आयताकार आकार हैं तो यह केवल एनपी-हार्ड है। यदि आप जाते हैं तो आप अपने अनुरूप आकार चुन सकते हैं, तो आप मूल आयत को यादृच्छिक रूप से उप-विभाजित करके बस रिकर्स कर सकते हैं। – Triptych

1

आप jQuery प्लगइन करने के लिए विरोध नहीं कर रहे हैं, तो आप इस बाहर की जाँच कर सकते हैं - http://masonry.desandro.com/

0

मैं यह करने के लिए कुछ इसी तरह का निर्माण किया है (हालांकि यह शायद सबसे अधिक परिष्कृत समाधान नहीं है)। मेरा दृष्टिकोण कैनवास पर रखे आयताकारों को व्यवस्थित करने के लिए quadtree का उपयोग करना था। मैं बस मूल रूप से एक सर्पिल में केंद्र बिंदु के चारों ओर चला गया, नए आयत रखने की कोशिश कर रहा था, और टकराव का पता लगाने के लिए क्वाड्री का उपयोग कर रहा था। अगर मुझे टकराव का पता चला तो मैं आयत के किनारे पर रखने की कोशिश कर रहा आयत को ले जाऊंगा जो कि इसके साथ टकरा गया था, जो केंद्र से दूर था और टकराव की जांच प्रक्रिया दोहराता था।

फिर से, शायद सबसे परिष्कृत विधि नहीं है, और यह आयताकारों के बीच कुछ बड़े अंतराल छोड़ देता है (उनके बीच की सीमाएं समान नहीं हैं), लेकिन मेरे स्वाद के लिए यह अच्छे परिणाम देता है।

संबंधित मुद्दे