मैं कोड में एनीमेशन प्रभाव का अनुकरण करने की कोशिश कर रहा हूं (लगभग कोई भी भाषा भाषा के बजाए गणित के रूप में दिखाई देगी)। अनिवार्य रूप से, यह एक द्रव्यमान वसंत प्रणाली का अनुकरण है। मैं डब्ल्यूपीएफ/सिल्वरलाइट की ElasticEase
देख रहा हूं और यह जो कुछ मैं ढूंढ रहा हूं उसके करीब यह प्रतीत होता है, लेकिन काफी नहीं।स्प्रिंग-मास सिस्टम का डंपिंग प्रभाव (या यह लोचदार है?)
सबसे पहले, यहां मैं जो खोज रहा हूं - एक वस्तु, सेकंड की एक निश्चित संख्या यात्रा करना, एक स्थान मारना और तुरंत उसी समय आराम करने के लिए सेकंड की एक निश्चित संख्या के लिए ओसीसीलेट को धीमा करना जहां डंपिंग थी आवेदन किया है। तो इसे देखने के लिए, मान लें कि मेरे पास 600w/900h कैनवास है और मेरे पास एक वर्ग है जो TranslateTransform.Y
में 900px से 150px तक एनिमेट करना शुरू कर देता है। 150 पीएक्स ऊंचाई (187.5 पीएक्स प्रति सेकेंड) तक पहुंचने में 4 सेकंड लगते हैं, जिस चरण में इसे तुरंत हटा दिया जाता है और केवल 0.4 सेकंड (87.5 पीएक्स प्रति सेकेंड) से 115 पीएक्स ऊंचाई तक 35px अधिक यात्रा करता है, फिर 1 सेकंड से 163 पीएक्स ऊंचाई तक (48 पीएक्स और 48 पीएक्स प्रति सेकेंड) और उसके बाद 146 पीएक्स (17 पीएक्स और 17 पीएक्स प्रति सेकेंड) तक वापस लौटता है और तब तक जब तक ऑसीलेशन इसे 150px की अंतिम विश्राम स्थान तक धीमा नहीं करता है। ऑसीलेशन अवधि 16 सेकंड है। , पिक्सेल दूरी और सेकंड की संख्या बिंदु A से बिंदु बी को पाने के लिए लेता है -
यहाँ है कि मैं क्या पहले से पता होगा:
उदाहरण मैं ऊपर वर्णित शीर्ष छोड़ दिया यहाँ नीले आयत है ऑसीलेशन के लिए सेकंड की संख्या। द्रव्यमान जैसी चीजें कोई फर्क नहीं पड़ती हैं।
मैंने ElasticEase
की कोशिश की है और यह मुद्दा यह प्रतीत होता है कि मैं 4 सेकंड के लिए कोई आसानता के साथ यात्रा करने के लिए ऑब्जेक्ट नहीं प्राप्त कर सकता और फिर अगले 16 सेकंड के लिए "बाउंस" नहीं कर सकता। .Springiness
हमेशा बहुत ज़्यादा भी है, भले ही मैं के रूप में यह 20.
ILSpy शो के अपने कार्य की तरह एक बहुत उच्च संख्या के लिए सेट:
protected override double EaseInCore(double normalizedTime)
{
double num = Math.Max(0.0, (double)this.Oscillations);
double num2 = Math.Max(0.0, this.Springiness);
double num3;
if (DoubleUtil.IsZero(num2))
{
num3 = normalizedTime;
}
else
{
num3 = (Math.Exp(num2 * normalizedTime) - 1.0)/(Math.Exp(num2) - 1.0);
}
return num3 * Math.Sin((6.2831853071795862 * num + 1.5707963267948966) * normalizedTime);
}
मैं 2 वीडियो शामिल की है और और एक एक्सेल DropBox पर एक ज़िप फ़ोल्डर में फ़ाइल करें। मुझे लगता है कि यह प्रश्न काम में प्रगति का अधिक होगा क्योंकि लोग अधिक स्पष्ट प्रश्न पूछते हैं।
(अस्वीकरण: मैं नहीं पता है कि मैं क्या बारे में बात कर रहा हूँ जब यह इस चीज के बारे में ज्यादा बात आती है)
आपकी समस्या एक गणित/भौतिकी है (जैसा कि आपको संदेह है)। यह मानक मानक भौतिकी पाठ्यक्रम है जो ऑसीलेशन समस्या को दबाता है, लेकिन इसमें पूरी तरह से व्याख्या करने के लिए कुछ सौ शब्द (और कुछ गणित सूत्र, जो SO में बहुत खराब प्रस्तुत करते हैं) लेते हैं। मूल समस्या यह है कि डंपिंग घातीय है, इसलिए जब आप इसे विघटित करते हैं, पूंछ के उत्सर्जन खो जाते हैं। क्या आप वाकई http://en.wikipedia.org/wiki/Damping के बजाय पूर्ण स्पष्टीकरण चाहते हैं? :) –
धन्यवाद @belisarius। गणित/भौतिकी वास्तव में मेरे साथ परे है, विशेष रूप से ऊपर दिए गए नमूने पर विचार करने से द्रव्यमान को ध्यान में रखना प्रतीत नहीं होता है। कोई भी व्याख्या और/या कोड नमूने जो आप प्रदान कर सकते हैं जो मुझे इससे पहले कि मेरे पास ज्ञात चर के साथ शुरू करने में मदद कर सकता है, मेरे सामने सबसे उपयोगी होगा। –
मैं कोशिश करूंगा, लेकिन जैसा कि मैंने पहले देखा है कि यह मुझे अच्छा करने में काफी समय लगेगा, शायद कुछ भौतिक विज्ञानी/छात्र एक बक्षीस का पीछा करते हुए मुझे उम्मीद कर सकते हैं :)। बीटीडब्लू, द्रव्यमान वहां है, लेकिन समस्या के सभी अन्य स्थिरांक (लोचदार निरंतर और नमी कोफ) द्रव्यमान द्वारा एक जन स्वतंत्र समस्या प्राप्त करने के लिए विभाजित होते हैं (क्योंकि एफएम * ए == 0 शून्य के बराबर है, आप विभाजित कर सकते हैं जो भी स्थिर आप चाहते हैं सभी शर्तें)। एफ दो ताकतों, लोचदार, लोचदार स्थिर के और आनुपातिक, और धुंधला बल, वेग के अनुपात के समान आनुपातिक और एक धुंधला स्थिरता की संरचना है। –