2011-12-27 10 views
6

कैसे 3 डी में निर्दिष्ट किया ImageSize उपयोग करने के लिए मजबूर करने के लिए प्लॉट (मेथेमेटिका संस्करण: 8.0.4, विंडोज 7 पर)जब माउस का उपयोग कर एक छवि को घुमाने के लिए

कोई मुझे याद दिलाना कृपया सकते हैं एम नहीं बताने के लिए कैसे निम्नलिखित मामले में ImageSize को बदलने के लिए:

मेरे पास एक मैनिपुलेट है, जहां मैं ग्रिड बनाता हूं, और ग्रिड के अंदर, मैं या तो नियंत्रण विकल्प के आधार पर एक प्लॉट या 2 प्लॉट दिखाता हूं।

समग्र रूप से प्रदर्शित छवि को समान रखने के लिए, यदि मैं एक साजिश प्रदर्शित कर रहा हूं तो मैं एक आकार का उपयोग करता हूं, और यदि मैं 2 प्लॉट प्रदर्शित कर रहा हूं, तो मैं प्रत्येक प्लॉट के लिए आधे लंबाई का उपयोग करता हूं। अभी तक काफी आसान है।

अजीब बात यह है कि जब मैं एक साजिश के मामले को घुमाने के लिए माउस का उपयोग करता हूं, और फिर 2 प्लॉट पर वापस स्विच करता हूं, तो साजिश का आकार अब निर्दिष्ट छवि आकार का उपयोग नहीं करता है।

ऐसा लगता है कि एक साजिश को घुमाने के लिए माउस का उपयोग करके, यह उसी स्क्रीन स्थान पर दिखाए गए अगली साजिश को प्रभावित करता है।

SphericalRegion -> True का उपयोग या नहीं, इसका कोई प्रभाव नहीं पड़ता है। RotationAction -> "Fit" का उपयोग करने से कोई प्रभाव नहीं पड़ता है।

मेरा मतलब क्या है इसका एक छोटा उदाहरण है, और फिर मैं दिखाता हूं कि मैं वर्तमान में इस समस्या को कैसे हल करता हूं। लेकिन मैं ग्रिड के स्थान पर ग्राफिक्स ग्रिड का उपयोग करके इसे हल करता हूं। यदि संभव हो तो मैं ग्रिड का उपयोग करना चाहता था।

Manipulate[ 
Module[{opt = {Spacings -> {0, 0}, Frame -> All}, p, 
    size, data = Table[RandomReal[], {10}, {10}], wid = 300, len = 300}, 

    size = If[choice == 1, {wid, len}, {wid, len/2}]; 
    Print[size]; 
    p = ListPlot3D[data,SphericalRegion->True,ImagePadding -> 10,ImageSize ->size]; 

    If[choice == 1, 
    Grid[{{p}}, [email protected]], Grid[{{p}, {p}}, [email protected]] 
    ] 
    ], 

Row[{SetterBar[Dynamic[choice], {1, 2}]}], 
{{choice, 2}, None} 
] 

समस्या को पुन: उत्पन्न करने के लिए, सरल है: पहले मैं आकार को नोट करता हूं, इस तरह मैं इसे रखना चाहता हूं। अब मैं पसंद 1 पर क्लिक करता हूं, अब माउस का उपयोग करके मैं एक साजिश घुमाता हूं। अब मैं वापस जाने के लिए पसंद 2 पर क्लिक करता हूं, फिर मुझे लगता है कि साजिश का आकार ऐसा नहीं है जिसे मैं उम्मीद करता हूं।

enter image description here

मैं इसे एक विकल्प मैं उपयोग करने की आवश्यकता है यकीन है। बस इसे अभी तक नहीं मिला है।

ps। दरअसल, ऐसा लगता है कि, समान साजिश जो घुमाया गया था, सामग्री क्षेत्र पर रहता है, और दूसरे मामले में 2 भूखंडों में से एक के स्थान पर उपयोग किया जाता था। बहुत अजीब। मुझे कहीं मूर्खतापूर्ण कुछ करना होगा, क्योंकि यह बहुत अजीब है।

अद्यतन 2:48 बजे यह हेरफेर अभिव्यक्ति में Dynamic का उपयोग कर के रूप में MrWizard से नीचे दिखाया गया है के जवाब में है। वी 8.04 पर, यह काम नहीं करता है। यहाँ कोड है:

Manipulate[ 
Module[{p, size, data = Table[RandomReal[], {10}, {10}], wid = 300, 
    len = 300}, 

    size = If[choice == 1, {wid, len}, {wid, len/2}]; 
    p = ListPlot3D[data, SphericalRegion -> True, ImagePadding -> 10, 
    ImageSize -> size]; 

    If[choice == 1, 
    Grid[{{p}}], 
    [email protected][{{p}, {p}}] 
    ] 
    ], 

Row[{SetterBar[Dynamic[choice], {1, 2}]}], 
{{choice, 2}, None} 
] 

enter image description here

अद्यतन 03:03

यह नीचे ग्रिड रखकर काम करता है। ग्रिड के चारों ओर एक फ्रेम जोड़ना यह काम करता है। (माइक उत्तर के लिए धन्यवाद कि यह दिखाता है कि ग्रिड के बजाय फ़्रेम का उपयोग करके यह काम करता है, मुझे लगा कि मुझे ग्रिड के चारों ओर फ़्रेम जोड़ने का प्रयास करने दें)

लंबे समय तक मैथमैटिका का उपयोग करके मैंने देखा है कि सबसे अजीब चीज़ों में से एक :)

Manipulate[ 
Module[{p, size, data = Table[RandomReal[], {10}, {10}], wid = 300, 
    len = 300}, 

    size = If[choice == 1, {wid, len}, {wid, len/2}]; 
    p = ListPlot3D[data, SphericalRegion -> True, ImagePadding -> 10, 
    ImageSize -> size]; 

    If[choice == 1, 
    [email protected][{{p}}], 
    Grid[{{p}, {p}}] 
    ] 
    ], 

Row[{SetterBar[Dynamic[choice], {1, 2}]}], 
{{choice, 2}, None} 
] 

धन्यवाद

+0

मैंने पहले कुछ इस तरह देखकर याद करने लगते हैं, लेकिन मैं यह नहीं मिल सकता है। मुझे लगता है कि समाधान ग्राफिक्सग्रिड का उपयोग करने के लिए किया जा सकता है, लेकिन आप इसे नहीं चाहते हैं। आप 'Dynamic' दूसरे' Grid' को जोड़कर व्यवहार मुझे लगता है कि आप चाहते हैं प्राप्त कर सकते हैं, लेकिन मैं सच में समझ में नहीं आता कि यहाँ क्या हो रहा है, इसलिए मैं इस का पता लगाने की जरूरत है। –

+0

श्री विज़ार्ड, हां, 'ग्राफिक्स ग्रिड' काम नहीं करेगा। माउस के साथ घुमा नहीं सकता है। दूसरे 'ग्रिड' में 'गतिशील' जोड़ने के बारे में अन्य टिप्पणी के लिए, मुझे यकीन नहीं है कि अब मैं समझता हूं। कहां ?, कोशिश की, इसे काम करने के लिए नहीं मिल रहा है। धन्यवाद। – Nasser

+0

कम से कम v7 में, यह लाइन को पढ़ने के लिए काम करता है: 'ग्रिड [{{पी}}, अनुक्रम @ ऑप्ट], गतिशील @ ग्रिड [{{पी}, {पी}}, अनुक्रम @ ऑप्ट] '- भी , 'अनुक्रम @ x' 'x' के बराबर है; आप शायद 'अनुक्रम @@ x' चाहते हैं। वी 124 में –

उत्तर

5

यह कैसे // क्यों Plot3D छवि विकल्प why does Plot3D remember... याद है फिर से एक और पहेली से संबंधित है। समाधान इस मामले में भी में एक ही होता है: जो है, Plot3D के लिए एक विकल्प के रूप में PreserveImageOptions -> False जोड़ें। किसी भी तरह, श्रीमान और माइक फोर्स प्लॉट 3 डी द्वारा सुझाए गए हैंक की तरह हैक "भूल जाएं"।

+0

+1 आपको यह कैसा लगता है! मुझे पता था कि एक विकल्प था! मेरे दिमाग के पीछे मुझे लगा कि एक विकल्प था। आपके द्वारा लिंक किया गया सवाल कुछ समय पहले भी मुझसे पूछा गया था, और मैं सब भूल गया था। धन्यवाद, मुझे लगता है कि आपका समाधान सही है। मुझे लगता है कि हर कोई उस पर सहमत होगा। – Nasser

+0

@ नासर ने अभी देखा है कि यह आपका प्रश्न था :) हम कितनी जल्दी भूल जाते हैं, हुह? – kglr

+0

मुझे लगता है कि एम बहुत जटिल है और कई विकल्पों के साथ, मुझे नहीं लगता कि उन्हें याद रखना संभव है और विशेष रूप से उन सभी के बीच बातचीत। वास्तव में आवश्यक कुछ प्रकार का स्वचालित उपकरण है जो कोड पर चलता है, और इकट्ठा संभावित समस्याओं के ज्ञान/विशेषज्ञ प्रणाली डेटाबेस को देखता है, और कोड में संभावित समस्याओं/मुद्दों/प्रकार के प्रकार के लिए उपयोगकर्ता को ध्वजांकित करता है। उदाहरण के लिए, 3 डी प्रकार की साजिश में 'PreserveImageOptions -> False' नहीं हो सकता है, और इसी तरह। उपयोगकर्ता बाद में इस रिपोर्ट को देख सकते हैं। एक तरह से लिंट के लिए लिंट की तरह कुछ। – Nasser

2

मैं लंबे समय से नहीं मिला है लेकिन Grid का उपयोग करते हैं, यह अप खिलवाड़ मुख्य बात प्रतीत हो रहा है कि मैं कैसे/क्यों की पहचान करने के लिए समय नहीं पड़ा है। यदि आप If कथन को इसके साथ प्रतिस्थापित करते हैं:

If[choice == 1, [email protected], Grid[{{p}, {p}}, [email protected]]] 

तो यह ठीक काम करता है। वहाँ कुछ अन्य बातों के कोड में चल रही है कि पहली नजर में इष्टतम प्रतीत नहीं हैं, लेकिन मैं सिर्फ ग्राफिक्स समय की कमी की वजह से आकार देने पर ध्यान केंद्रित किया है। यह एक स्पष्टीकरण के रूप में नहीं है, लेकिन आपकी मदद कर सकता है या किसी और को यह पता चल सकता है कि यह ऐसा क्यों व्यवहार कर रहा है। क्षमा करें लेकिन समय पर कम लेकिन सोचा कि यह Grid के अवलोकन को पोस्ट करने लायक था।

+0

धन्यवाद। हां जो इस मुद्दे को हटा देता है। लेकिन मैं वास्तव में ग्रिड का उपयोग करना चाहता था, क्योंकि मेरा वास्तविक कोड अधिक जटिल है, और मैं स्पैक्सिंग और अन्य चीजों पर अधिक नियंत्रण पाने के लिए ग्रिड का उपयोग करता हूं। सब कुछ के लिए ग्रिड मेरा मुख्य भवन ब्लॉक है। लेकिन आप समस्या का कारण इंगित करने में सक्षम थे। इसलिए मैं मुख्य कारण खोजने की कोशिश करते समय इसे अस्थायी कार्यवाही के रूप में उपयोग कर सकता हूं। लेकिन मुझे लगता है कि मुझे अभी भी ग्रिड का उपयोग करने में सक्षम होना चाहिए। मैं नहीं देखूँगा क्यों नहीं। बीटीडब्ल्यू, यह कोड सिर्फ 5 मिनट की हैक है जो मैंने अपने मुख्य कोड के साथ देखी गई समस्या को दिखाने के लिए किया है, यह इष्टतम होने का मतलब नहीं है :) मदद के लिए धन्यवाद। – Nasser

+0

अब मुझे लगता है कि यह एक बग हो सकता है। मैं नहीं देख सकता कि ग्रिड को हटाने और इसके स्थान पर फ़्रेम जोड़ने से चीजें काम करती हैं। यह सिर्फ मुझे कोई समझ नहीं आता है। मुझे और कॉफी चाहिए – Nasser

1

किसी भी वास्तविक विश्लेषण कर के बिना, यहाँ मेरी अनुमान है।

मेरा मानना ​​है कि यह जो मानना ​​है कि दिखाया गया है ग्राफिक के स्पष्ट सामग्री परिवर्तन नहीं किया एक अनुकूलन तकनीक का परिणाम हो सकता है। मुझे लगता है कि कुंजी इसलिए ग्रिड की प्रत्येक स्थिति में प्रदर्शित प्रत्येक ग्राफिक के बीच स्पष्ट सामग्री को अलग करने के लिए है। Identity जैसे कुछ का उपयोग करना काम नहीं करेगा क्योंकि यह अभिव्यक्ति से गायब हो जाता है। हालांकि अगर यह अनुमान सही है तो मुझे उम्मीद है कि किसी भी अद्यतन परिवर्तन को अद्यतन ग्राफिक में परिणाम मिलेगा।

मैं पहली बार Grid अभिव्यक्ति के लिए इनमें से प्रत्येक का उपयोग कर सफलता मिली है:

Grid[{{ [email protected] }}, opt]

Grid[{{ [email protected] }}, opt]

Grid[{{ [email protected] }}, opt]

Grid[{{ {p} }}, opt]

Grid[{{ [email protected] }}, opt]

Grid[{{ [email protected] }}, opt]

+0

श्री विज़ार्ड, मैं अभी भी इसका कारण समझने की कोशिश कर रहा हूं कि इसका क्या कारण है। लेकिन उपयोगकर्ता बिंदु दृश्य से, मुझे इसे एक बग कहना है। लेकिन मुझे खुशी है कि ग्रिड रखने के दौरान चारों ओर एक काम है। पूरे ग्रिड कार्यों के चारों ओर एक फ्रेम भी जोड़ना। कृपया मेरा संपादन देखें। आपकी सहायता के लिए धन्यवाद. – Nasser

+0

@ नासर यह या तो एक बग हो सकता है, या उस उपयोग का परिणाम जो इरादा नहीं था। मैं निर्णय लेने से पहले इंतजार करूंगा, लेकिन यह मेरे लिए सही नहीं लगता है। अब सोने का समय –

+0

श्री विज़ार्ड, मैंने इस समस्या को ठीक करने के लिए अपने मुख्य कोड में उपयोग करने के लिए अपना आइटम @ पी चुना है, क्योंकि मेरे पास वर्तमान कोड के लिए कम से कम घुसपैठ था और कोई दृश्य अंतर प्रभावित नहीं हुआ था। मदद के लिए आप और माइक के लिए धन्यवाद। – Nasser

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