2015-09-02 8 views
5

के फ़ंक्शन के रूप में आसान अवधि की गणना करें मुझे एनीमेशन के लिए अवधि की गणना करने के लिए कुछ फ़ंक्शन चाहिए जैसे कि दूरी बदलती है, गति स्थिर बनी रहती है।दूरी

==================================== 
|         | 
|<============ width =============>| 
|         | 
|   <====== distance1 ======>| 
|         | 
|    <=== distance2 ===>| 
|         | 
=================================== 

यह पूरा करने के लिए जब रैखिक सहजता के साथ काम कर तुच्छ है,

function getDuration (width, distance, duration) { 
    return duration * (1 - distance/width); 
} 

बहरहाल, यह और अधिक जटिल जब, गैर रेखीय कार्यों में ढील का उपयोग कर हो जाता है इस तरह के easeInOutQuad (इस समस्या का एक उदाहरण के रूप में: http://jsfiddle.net/Wexcode/rdrbm8et/3/)।

easeInOutQuad जैसे एक आसान कार्य को देखते हुए, मैं इस अवधि की गणना कैसे करूं कि किसी भी दूरी की गति स्थिर रहती है?

easeInOutQuad: function (t) { return t<.5 ? 2*t*t : -1+(4-2*t)*t }, 

स्रोत: https://gist.github.com/gre/1650294

easeInOutQuad

स्रोत: http://api.jqueryui.com/easings/

+0

देखने के एक गणित बिंदु से देखने, आप वक्र अंतर करने के लिए होता है? दिलचस्प सवाल :) +1 –

+0

एक्सेल में आसानी से रिकॉर्डिंग करने का प्रयास करें, देखें कि आप क्या पा सकते हैं। हो सकता है कि आप एक फॉर्मूला को टुकड़ा कर सकें: डी इस तरह मैंने आरजीबी में रंगीन संतृप्ति के मेरे प्रश्न को हल किया। –

+0

मुझे बिल्कुल समझ में नहीं आता कि आप क्या पूछ रहे हैं। यदि आपके पास गैर-रैखिक easing है, तो गति स्थिर नहीं है। तो * दूरी बदलते समय आप * गति * स्थिर रहना चाहते हैं? – Bergi

उत्तर

0

आप सूत्र द्वारा उत्पन्न चाप के calculate लंबाई करने के आधुनिक गणित का उपयोग करना चाहिए।

अच्छी व्याख्या here है। आप केवल सूत्र

enter image description here

+0

सही समस्या यह है कि आप जेएस में भिन्नता कैसे करते हैं। ऐसा नहीं है कि 'Math.ddx()' विधि है। वैसे भी, मुझे यह साइट मिली है, सहायक हो सकती है: http://oldhorse.hubpages.com/hub/drawing-calculus-numberical-integration-and-differentiation-in-javascript-part-6-in-a-series –

+0

यदि आपके पास अपना फ़ंक्शन परिभाषित किया गया है 'easeInOutQuad: फ़ंक्शन (टी) {वापसी टी <.5? 2 * टी * टी: -1+ (4-2 * टी) * टी}, 'आप कागज पर भेदभाव की गणना कर सकते हैं और उस – suvroc

+0

से प्राप्त फॉर्मूला का उपयोग कर सकते हैं लेकिन ओपी स्पष्ट रूप से परिवर्तनीय आसानी की गणना करना चाहता था। अन्यथा, ओपी ने नहीं पूछा होगा। –

1

एक समारोह y = f(t), जहां y दूरी पर है और टी समय बस टी के लिए हल है, और निर्धारित करने के लिए कितनी देर तक यह एक करने के लिए पाने के लिए लेता t = g(y) फ़ंक्शन का उपयोग है को देखते हुए नीचे का उपयोग करना चाहिए दी गई दूरी

उदाहरण के लिए, easeInOutQuad सहजता में, -1+(4-2*t)*t हल किया जा सकता:

Solved equation

स्रोत: http://www.wolframalpha.com/input/?i=Solve%28y+%3D+-1%2B%284-2*t%29*t%2C+t%29

अभ्यास में, आप गुणा होगा t बार अपने duration अपने नए अवधि पाने के लिए।

var ratio = distance/width; 
if (ratio <= .5) { 
    return duration * Math.sqrt(ratio * 1/2); 
} else if (ratio <= 1) { 
    return duration * (1 - Math.sqrt(1-ratio)/Math.sqrt(2)); 
} 

http://jsfiddle.net/Wexcode/rdrbm8et/6/

+0

आह, आप इसे स्केल करना चाहते थे ताकि एक निश्चित दूरी पर एक निश्चित दूरी तक पहुंच जाए। – Bergi

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