2011-11-19 13 views
5

यहां एक बीबीसी गतिशील graphics है। मैं सोच रहा हूं कि गणित में ग्राफिक्स को पुन: पेश करना संभव हो सकता है।गणित के साथ यह गतिशील साजिश कैसे संभव है?

enter image description here

जवाब देने हम कुछ आकर्षक ग्राफिक्स चाल एमएमए में उपलब्ध देखेंगे की प्रक्रिया में

। प्रश्न पूछने का यही एकमात्र कारण है।

अद्यतन:

मैं बस की जाँच की है कि बीबीसी सरल JavaScript उपयोग कर रहा है यह करने के लिए। उन्होंने मैन्युअल रूप से स्थिर चित्र बनाए हैं और फ़्लैश आधारित ईवेंट हैंडलिंग का उपयोग भी नहीं किया है। तो सभी चित्र स्थैतिक संस्थाएं हैं और एक बार जब हम एक देश पर क्लिक करते हैं तो यह एक अद्वितीय छवि उत्पन्न करता है। अन्य देशों के लिए यह अन्य छवियों को दिखाता है। प्रत्येक मामले के लिए अलग-अलग छवियां PowerPoint, Visio या यहां तक ​​कि फ़ोटोशॉप के माध्यम से उत्पन्न की जा सकती हैं। कोई भी आपके ब्राउज़र में जावास्क्रिप्ट को अक्षम करके और पृष्ठ को पुनः लोड करके इसे देख सकता है।

मैं समझता हूँ कि उन एकल चित्रों एमएमए से बनाया जा सकता। कुछ उत्तरों सही दिशा दिखाते हैं कि कोई इसे कैसे कर सकता है। इसलिए मैं अब तक का सबसे अच्छा जवाब स्वीकार कर रहा हूं।

+4

अधिकांश तत्व मेथेमेटिका के भीतर आसानी से पाया जा सकता है। आपके पास 'एरो 'हो सकता है, उदाहरण के लिए' बेज़ीयर कर्व 'या' बीएसपीलाइन कर्व 'के आधार पर। क्लिक करने योग्य नामों को 'उपस्थिति'> 'बेकार "के साथ' बटन 'के रूप में कार्यान्वित किया जा सकता है। बाकी सिर्फ काम है। शायद ग्राफिक्स में तीरों की परिवर्तनीय मोटाई पुन: पेश करना मुश्किल हो सकती है। 'तीर' का उपयोग करने से बचने के लिए आवश्यक हो सकता है और उन्हें अधिक बुनियादी ड्राइंग प्राइमेटिव से बनाया जा सकता है। इस सवाल से पूछने से पहले आपने खुद को क्या किया? –

+0

@ SjoerdC.deVries मैंने अभी तक कोशिश नहीं की है। बस बीबीसी में खबरें पढ़ें और सोचा कि यह एमएमए अभ्यास सबक के लिए एक अच्छी समस्या होगी। मैं इसे करने की कोशिश करूंगा लेकिन दूसरों को भी देखना चाहता था। विशेष रूप से उन शनिवार सुबह एक धुंधला पर ऊब गया। – PlatoManiac

+1

मुझे लगता है कि यह बहुत काम करता है, यह एक बहुत मुश्किल काम नहीं है। आपको 'EventHandler' में ग्राफिक्स ऑब्जेक्ट्स को लपेटने की आवश्यकता होगी, क्लिक को कुछ चर संशोधित करें, और पूरे' ग्राफिक्स 'को' डायनामिक 'में डालें ताकि यह उन बदलावों को अपडेट होने पर अपडेट हो। सरलीकृत समाधान के लिए 'हाइलाइट ग्राफ' अच्छा है।एक निर्देशित ग्राफ 'जी' बनाएं, फिर 'सेटरबार [गतिशील [रंग], {लाल, हरा, नीला}] ',' गतिशील @ हाइलाइटग्राफ [जी, {स्टाइल [1 \ [निर्देशित एज] 2, रंग]}] – Szabolcs

उत्तर

3

बस एक और स्टार्टर:

a = Point[{0, 0}]; 
b = .75 Tuples[{1, -1}, 2][[{3, 1, 2, 4}]]; 
PieChart[ 
{ 
    Button[1, (a = {Thickness[.05], Arrowheads[.1], 
     Arrow[[email protected]{b[[1]], {0, 0}, #}] & /@ b})], 
    Button[1, (a = {Thickness[.05], Arrowheads[.1], 
     Arrow[[email protected]{b[[2]], {0, 0}, #}] & /@ b})], 
    Button[1, (a = {Thickness[.05], Arrowheads[.1], 
     Arrow[[email protected]{b[[3]], {0, 0}, #}] & /@ b})], 
    Button[1, (a = {Thickness[.05], Arrowheads[.1], 
     Arrow[[email protected]{b[[4]], {0, 0}, #}] & /@ b})], 
    } 
, 
SectorOrigin -> {Automatic, 1}, 
Epilog -> [email protected]] 

enter image description here

संपादित अधिक कॉम्पैक्ट:

a = Point[{0, 0}]; 
b = .75 Tuples[{1, -1}, 2][[{3, 1, 2, 4}]]; 
PieChart[ 
ReleaseHold[Replace[Table[ 
    List[1, 
    ReplaceAll[ 
     Hold[a = {Thickness[.05], Arrowheads[.1], 
     Arrow[[email protected]{k, {0, 0}, #}] & /@ b}], k -> i]], 
    {i, b}], List -> Button, {2}, Heads -> True]] 
, 
SectorOrigin -> {Automatic, 1}, 
Epilog -> [email protected]] 
+0

(मैं इस तरह के चित्रों को थोड़ी देर के लिए आकर्षित करना चाहता हूं ...) बात यह है कि, ओपी वास्तव में यह उल्लेख करने में विफल रहता है कि घुमावदार तीर की चौड़ाई उन प्रवाहों के अनुपात में होती है जो वे प्रतिनिधित्व करते हैं। इस प्रकार के अधिक विस्तृत आरेखों में घुमावदार तीर 'दोनों तरीकों से चल रहे हैं' --- सभी संभव स्रोतों से बहने और प्रवाह की परिमाण दिखाते हैं। आईएमओ, गणित में कोई रजत-बुलेट नहीं है ... अगर कोई कह सकता है कि यह एक लाइन निर्दिष्ट कर सकता है तो यह बहुत आसान होगा [] जो चौड़ाई को इन/आउट परिमाण के एक समारोह के रूप में बदल देगा, जो दोनों सिरों पर अलग हो सकता है अधिक जटिल उदाहरणों के। – telefunkenvf14

+1

@tele मैंने चरणीय तीर चौड़ाई की चीज़ को महसूस किया, लेकिन ओपी के ग्राफ में कई अन्य छोटे और बड़े विवरण भी। यह उन सभी को संबोधित करने के लिए बहुत समय मांग सकता है, और इसके अलावा, यह काफी उबाऊ है। लेकिन ... मुझे लगता है कि यहां पोस्ट करने के लिए आपके पास एक अच्छा सवाल है ... कुछ ऐसा है: "अपने चाप के साथ parametrized चौड़ाई के साथ एक तीर कैसे बनाना है?" –

+1

मेरे पास बहुत सारे प्रश्न हैं जो मैं पूछना चाहता हूं, लेकिन यह सुनिश्चित करने के लिए यह बहुत कठिन है कि यह ठीक से समझाने के लिए कि मैं क्या करने की कोशिश कर रहा हूं। डिजाइन और एकीकरण मुद्दे हमेशा मेरे दिमाग में भी होते हैं, जो कि एक ही प्रश्न में घूमने के लिए बहुत कुछ है, और ऐसा लगता है कि एसओ का उद्देश्य क्या है। मेरी इच्छा है कि इनमें से कुछ प्रकार की 'बड़ी' समस्याओं को हल करने और खुली स्रोत सामग्री पर काम करने के लिए समन्वय करने के लिए एक संगठित तरीका (एमएमए उपयोगकर्ताओं के लिए) था। आईएमओ, डब्ल्यूआरआई को वास्तव में किसी भी तरह से शामिल होने की आवश्यकता होगी। मैं दीवार से दूर ज्ञान से निराश हो जाता हूं, जो बाहर हमारे लिए पहुंच योग्य नहीं है। – telefunkenvf14

3

यह एक पूरा जवाब नहीं है, लेकिन यह एक टिप्पणी के लिए बहुत लंबी है। मैं इसे से "चोरी" के लिए प्रोत्साहित करते हैं, और :-)

g = RandomGraph[{5, 12}, DirectedEdges -> True]; 

SetterBar[Dynamic[v], VertexList[g]] 

[email protected][ 
    g, {Style[Cases[EdgeList[g], v \[DirectedEdge] _], 
    Directive[Thick, Black]], Style[v, Red]}, 
    GraphLayout -> "CircularEmbedding", EdgeStyle -> [email protected], 
    VertexLabels -> "Name"] 

enter image description here

अगले कदम EventHandler में लिपटे SetterBar को बदलने के लिए वस्तुओं के साथ VertexShapeFunction उपयोग कर रहा है यह पूरा करें।

+1

के रूप में बंद करने के लिए मतदान कर रहा हूं मुझे ग्राफ़ ग्राफिक्स –

+0

@Sjoerd में तीर की wobbliness पसंद नहीं है जिसे भी अनुकूलित किया जा सकता है, और 'GraphPlot' का एक अलग डिफ़ॉल्ट है। वैसे भी, यह सिर्फ एक शुरुआती बिंदु था, जिसका उद्देश्य अंतिम समाधान के करीब कुछ भी नहीं था। शायद वह ग्राफ का भी उपयोग नहीं करेगा। मैंने केवल दूसरों को शुरू करने के लिए आसान बनाने के लिए पोस्ट किया है (यदि कोई इसका उपयोग करना चाहता है)। – Szabolcs

+0

@ SjoerdC.deVries संपादन के लिए धन्यवाद। – Szabolcs

4
इस के लिए

कुछ और बुनियादी फुटवर्क:

g[\[Alpha]_, \[Beta]_, color_] := Module[{t}, 
t = Graphics[{{Thickness[.03], Arrowheads[{.15}], color, 
    Arrow[ 
    BezierCurve[{{Cos[\[Alpha]], Sin[\[Alpha]]}, {0, 
     0}, {Cos[\[Beta]], Sin[\[Beta]]}}]]}}, 
PlotRange -> 1.5, ImageSize -> 512, Background -> None]; 
ImageCompose[Blur[t, 15], t] 
] 

one = Fold[ImageCompose, 
g[0, \[Pi]/3, Blue], {g[0, \[Pi]/2, Blue], g[0, \[Pi], Blue], 
g[0, 4 \[Pi]/3, Blue]}] 

two = Fold[ImageCompose, 
g[\[Pi]/3, 0, Yellow], {g[\[Pi]/3, \[Pi]/2, Yellow], 
g[\[Pi]/3, \[Pi], Yellow], g[\[Pi]/3, 4 \[Pi]/3, Yellow]}] 

DynamicModule[{pick = 1}, 
ClickPane[ 
    [email protected][pick == 1, one, two], 
    Function[{point}, If[First[point] < 256, pick = 1, pick = 2]]] 
] 

enter image description here

+0

अच्छी छाया! आपके पहले 1000 अंक बीटीडब्ल्यू –

+0

धन्यवाद के साथ बधाई। मैं सोच रहा हूं कि क्या सभी प्राइमेटिवों के पास इस तरह के अधिक प्रतिपादन निर्देश नहीं होना चाहिए ({AbsoluteShadow [n], तीर [pts]} –

+0

यह वर्तमान में 'PlotLegends' की तुलना में एक बहुत अच्छी छाया है। लेकिन शायद बेहतर नहीं क्योंकि यह अब पहले से धीमा है (देखें http://stackoverflow.com/questions/8189742/plotlegends-makes-manipulate-ing-graphs-slow-to-a-crawl/8189802#8189802)। –

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