2014-10-29 9 views
5

मेरे पास एक डी 3 फोर्स लेआउट ग्राफ है जो बहुत अच्छी तरह से काम कर रहा है, लेकिन यह अक्सर समय-समय पर 'अटक गया' हो जाता है। उदाहरण के लिए, नोड्स एक अच्छे प्लेसमेंट की तरफ झुका रहे हैं, और यदि उन्हें 'टक्कर' (उनके प्लेसमेंट में कुछ यादृच्छिकता और start() फिर से इंजेक्शन दे रहा है, तो वे अंत में वहां पहुंच जाते हैं। अगर मैं friction घटाता हूं तो समस्या भी बदतर हो जाती है, क्योंकि उपयोगकर्ता सोचते हैं कि यह है बहुत उन्मत्त।डी 3 के बल लेआउट को संशोधित करना "एनीलिंग" शेड्यूल

मैं force.js source code में 'annealling' (आला नकली annealling) का उल्लेख देखते हैं, और उजागर alpha पैरामीटर एक प्रमुख घटक है। अगर कोई कैसे सीधे सामान्य annealling शेड्यूल को प्रबंधित करने पता लगा है मैं सोच रहा हूँ ( पैचिंग force.js!)?

+0

सुनिश्चित नहीं है कि मैं आपका प्रश्न समझता हूं। जो भी खुलासा नहीं हुआ है उसे संशोधित करने के लिए स्रोत कोड को बदलने की आवश्यकता होगी। –

+0

यदि कोई शॉट एक शॉट में अच्छी तरह से लेआउट के लिए बहुत बड़ा या बालों वाला है, तो मैं समय के साथ नोड्स जोड़ने और प्रत्येक ऐड पर लेआउट को पुनरारंभ करने का प्रयास कर सकता हूं। नोड्स के लिए समय या टाइप घटक जैसे तर्क होने पर यह बेहतर होता है। – Andrew

+0

@ लार्स, क्षमा करें मैं अस्पष्ट था। 'अल्फा' एकमात्र खुला पैरामीटर लगता है, लेकिन मैं केवल इतना ही कर सकता हूं। मैं पूछ रहा हूं कि डी 3-आईसी तरीके से अधिक सामान्य कूलिंग शेड्यूल पूरा करने का कोई तरीका है या क्या मुझे स्थानीय पैच करने की ज़रूरत है? @Andrew, मैं चाहता हूं कि यह एक निश्चित ग्राफ पर उपयोगकर्ता द्वारा संशोधित एक ग्राफ viz उपकरण हो। – rikb

उत्तर

0

उत्तर का मूल @ Meetamit की टिप्पणी है (अल्फा के क्षय को तेज करने के लिए)। आप कर सकते हैं जब यह थ्रेसहोल्ड से नीचे हो जाता है तो लेआउट को कॉल करना बंद करें, और आप अपने नोड/लिंक आंदोलनों में संक्रमण जोड़कर 'जिटर' से भी निपट सकते हैं।

animationStep = 200; 
force.on('tick', function() { 
    node.transition().ease('linear').duration(animationStep) 
     .attr('transform', function(d) { 
      //your node transitions here 
     }); 
    var alpha = force.alpha(); 
    force.stop(); 
    setTimeout(function() { 
     if (!alpha > 0.001) { 
     force.alpha(alpha * 0.9); 
     } 
    }, animationStep); 
    }; 
    force.on('tick', tick); 
+0

मुझे लगता है कि ओपी वास्तव में _decelerate_ के लिए एक रास्ता तलाश रहा था, लेकिन वैसे भी, अल्फा प्रबंधित करने का सबसे आसान तरीका 'force.alpha (force.alpha ()/0.99*myDecay) 'टिक 'कॉलबैक के अंत में। यह लेआउट द्वारा लागू क्षय को उलट देता है (जो 0.9 9 है) और इसे अपनी ज्यामितीय क्षय की दर से बदल देता है। –

+0

आह - धन्यवाद, मैंने यह गलत पढ़ा। –

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