5

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

अधिक स्पष्ट होने के लिए मेरा मतलब बाध्यकारी चतुर्भुज द्वारा उदाहरण के रूप में है। enter image description here enter image description here

मैं कुछ प्रारंभिक खोज किया है लेकिन कुछ भी निश्चित नहीं मिला है: enter image description here

यहाँ मैं प्राप्त करने के लिए कोशिश कर रहा हूँ खुदा अधिकतमकरण के 2 उदाहरण हैं। ऐसा लगता है कि गतिशील प्रोग्रामिंग का कुछ रूप समाधान हो सकता है। ऐसा लगता है कि यह एक रैखिक अनुकूलन समस्या होनी चाहिए जो मुझे मिलने से अधिक आम होनी चाहिए, और शायद मैं गलत शर्तों की खोज कर रहा हूं।

नोट्स: अंकित वर्ग के लिए मान लें कि हम एक लक्षित डब्ल्यू/एच अनुपात जानते हैं जिसे हम ढूंढ रहे हैं (उदाहरण के लिए 4: 3)। चौकोर के लिए, मान लें कि पक्ष पार नहीं होंगे और यह अवतल होगा (यदि यह गणना को सरल बनाता है)।

+0

पुन। सर्कल: आप क्वाड्रैंगल को कट ऑफ त्रिकोण के रूप में देख सकते हैं। अर्थात। चतुर्भुज के प्रत्येक किनारे के लिए, जब तक वे मिलते हैं, आसन्न किनारों को लंबे समय तक बना दें। अपने नए त्रिकोण में एक सर्कल डालें। जांचें कि यह आपके मूल चतुर्भुज में फिट बैठता है या नहीं। इस प्रकार प्राप्त सबसे बड़ा सर्कल इष्टतम होना चाहिए। जाहिर है आपको समानांतर किनारों के साथ अलग-अलग चतुर्भुज का ख्याल रखना होगा। – toochin

+0

यदि आप उत्तल क्वाड और जिनके सेगमेंट ओवरलैप करते हैं, तो आपको किसी भी मनमाना चतुर्भुज के साथ मुश्किल समय हो सकता है। क्या आपका मतलब किसी भी मनमानी * उत्तल * चतुर्भुज है? –

+0

आयताकार भी घुमाया जा सकता है, या क्या इसे "क्षैतिज" के समानांतर होना चाहिए? – kohlehydrat

उत्तर

4

1) मंडल।
एक त्रिकोण के लिए, यह स्कूल कार्यक्रम से standard math question है।
चतुर्भुज के लिए, आप देख सकते हैं कि अधिकतम आंतरिक सर्कल इसके कम से कम तीन पक्षों को छूएगा। तो, तीन पक्षों के हर संयोजन को लें और प्रत्येक त्रिकोण के लिए समस्या का समाधान करें।
समानांतर पक्षों का एक मामला अलग से माना जाना चाहिए (क्योंकि वे त्रिकोण नहीं बनाते हैं), लेकिन यह बहुत मुश्किल नहीं है।

2) आयताकार।
आपके पास "सबसे बड़ी ऊंचाई और चौड़ाई" नहीं हो सकता है, आपको अन्य मानदंडों को चुनने की आवश्यकता है। उदा।, आपकी तस्वीर पर मैं ऊंचाई को कम करके चौड़ाई बढ़ा सकता हूं और इसके विपरीत।

+0

सर्कल मामले के लिए, संपूर्ण खोज काम करेगी, लेकिन ध्यान रखें कि ओ (एन!) है और केवल छोटे बहुभुज के लिए व्यावहारिक हो सकता है। एक 20-पक्षीय बहुभुज में 1100 से अधिक संयोजन होंगे। – payne

+0

@ पैयने 'चतुर्भुज' आमतौर पर 'एन = 4' का तात्पर्य है :) –

+0

बेशक! मैंने बहुत जल्दी पढ़ा। :-) – payne

1

4 साल पुराना धागा, लेकिन मेरी समस्या को हल करते समय मैं इसके दौरान ठोकर खाई।

मुझे वर्तमान सीवी एप्लिकेशन में इस तरह की समस्या है। मैं सबसे बड़ी खोज के लिए एक सरल और कुछ हद तक बेकार समाधान के साथ आया था। बिल्कुल वही नहीं, क्योंकि मैं आयत के क्षेत्र को अधिकतम पक्ष के बिना अधिकतम कर देता हूं।

मुझे अभी तक पता नहीं है कि मेरे समाधान इष्टतम पाते हैं या यह सभी मामलों में काम करता है। मुझे यह भी लगता है कि एक और अधिक प्रभावी तरीका होना चाहिए, इसलिए मैं आपके इनपुट की प्रतीक्षा कर रहा हूं।

पहले, हमारे (उत्तल) चतुर्भुज के गठन 4 अंक का एक सेट मान:

x y 
P1 -2 -5 
P2 1 7 
P3 4 5 
P4 3 -2 

इस प्रक्रिया के लिए सबसे बाईं ओर बिंदु P1 है, निम्नलिखित बातों दक्षिणावर्त गिने जा रहे हैं। यह इस तरह दिखता है:

quadrilateral

हम तो अंक के बीच रैखिक कार्यों पैदा करते हैं। प्रत्येक समारोह के लिए हमें ढलान के और 0: डी से दूरी जाननी है। के एक्स में अंतर से विभाजित दो बिंदुओं में से वाई में अंतर है। डी को रैखिक फ़ंक्शन को डी द्वारा हल करके गणना की जा सकती है। तो हमारे पास

k=dy/dx 
d=y1-k*x1 

हम व्यस्त कार्यों को भी चाहते हैं।

k_inv = 1/k 
d_inv = -d/k 

अगर हम पूरी तरह से क्षैतिज या लम्बवत लाइनों हम कार्यों में से एक में एक DIV/0 के साथ खत्म होता था हम तो समारोह और चतुर्भुज

 k  d      k   d 
p1p2 4  3   p1p2_inv 0.25 -0.75 
p2p3 -0.67 7.67  p2p3_inv -1.5 11.5 
p3p4 7  -23   p3p4_inv 0.14 3.29 
p4p1 0.6  -3.8  p4p1_inv 1.67 6.33 

के प्रत्येक पक्ष के लिए उलटा समारोह बनाने या उलटा कार्य, इस प्रकार हमें इस मामले को अलग से संभालना होगा।

अब हम उन सभी कोनों से गुजरते हैं जो दो कार्यों से घिरे होते हैं जिनके पास एक अलग चिह्न के साथ ढलान होता है। हमारे मामले में यह पी 2 और पी 3 होगा।

हम पी 2 से शुरू होते हैं और पी 2 और पी 3 के बीच वाई मानों के माध्यम से एक उचित चरण आकार के साथ पुनरावृत्ति करते हैं और क्षैतिज दिशा में कार्यों के बीच की दूरी की गणना करने के लिए व्यस्त कार्यों का उपयोग करते हैं। यह हमें आयत

a=p2p3_inv(y)-p1p2_inv(y) 

दो एक्स मूल्यों एक्स = p2p3_inv (y) पर और एक्स = p1p2_inv (y) हम तो दो विपरीत कार्यों के लिए y में अंतर की गणना और दूरी लेने के एक तरफ देना होगा हमारे आयताकार के दूसरे पक्ष के लिए उम्मीदवार के रूप में हमारी वर्तमान स्थिति में।

b_candidate_1 = y-p4p1(p2p3_inv(y)) 
b_candidate_2 = y-p4p1(p1p2_inv(y)) 
b_candidate_3 = y-P3p4(p2p3_inv(y)) 
b_candidate_4 = y-P3p4(p1p2_inv(y)) 

चार पैरामीटर में से कम पक्ष बी के लिए समाधान होगा। क्षेत्र स्पष्ट रूप से * बी बन जाता है।

मैं प्रदर्शित करने के लिए एक्सेल में एक त्वरित उदाहरण किया:

enter image description here

यहाँ ख न्यूनतम 6.9 है, तो समाधान के ऊपरी दाहिने कोने p2p3 पर है और आयत क्षैतिज और ख में एक फैली क्रमशः बाएं और नीचे लंबवत दिशा में। आयत के

चार अंक इस प्रकार हैं

Rect x  y 
R1  0.65 -1.3 
R2  0.65 5.6 
R3  3.1  5.6 
R4  3.1  -1.3 

enter image description here

मैं सी ++ में कोड इस डाल करने के लिए है और यदि समाधान सामान्यीकरण करता देखने के लिए कुछ परीक्षण चलाता है, या अगर यह सिर्फ था होगा "भाग्य"।

मुझे लगता है कि कार्यों में ए = ए * बी में ए और बी को प्रतिस्थापित करना भी संभव होना चाहिए और इसे एक रैखिक सूत्र में डाल देना चाहिए जिसे इस स्थिति के तहत अधिकतम किया जाना चाहिए कि पी 1 पी 2 केवल पी 1 और पी 2 आदि के बीच परिभाषित किया गया है। ...

+0

मुझे लगता है कि आपकी समस्या को सरल [वर्गिक प्रोग्रामिंग] (http://en.wikipedia.org/wiki/Quadratic_programming के रूप में तैयार किया जा सकता है)) मुसीबत। –