코드에서 애니메이션 효과를 에뮬레이트하려고합니다. 언어가 아니라 수학으로 보이는 것처럼 거의 모든 언어가 이에 해당됩니다. 본질적으로 질량 스프링 시스템의 에뮬레이션입니다. 나는 WPF/Silverlight의 ElasticEase
을보고 있었는데, 이것은 내가 찾고있는 것에 매우 가깝게 보인다.스프링 - 매스 시스템의 댐핑 효과 (또는이 ElasticEase는 무엇입니까?)
우선, 내가 원하는 것은 - 물체가 특정 초 수의 시간 동안 움직이며 위치를 지정하고 즉시 댐핑이있는 지점에서 휴식을 취할 수 있도록 일정 시간 동안 속도를 늦추는 것입니다. 적용된. 이것을 시각화하기 위해, 600w/900h 캔버스가 있고, TranslateTransform.Y
에서 900px에서 150px로 애니메이션을 시작하는 사각형이 있다고 가정 해 봅시다. 즉각적으로 150px 높이 (초당 187.5px)에 도달하는 데 4 초가 걸리며 즉각적으로 감속되고 약 0.4 초 (초당 87.5px)에서 약 115px 높이로 약 35px 더 이동 한 다음 1 초에서 163px 높이까지 리바운드합니다. (초당 48px 및 48px), 다시 최대 146px (17px 및 17px/초)로 리바운드 한 다음 ocillations가 최종 휴지 위치 인 150px까지 속도를 늦 춥니 다. 오크주기는 16 초입니다. 의는 A 지점에서 B 지점으로 데 걸리는 시간 (초) 픽셀 거리와 번호를 - 여기
내가 사전에 알 수있는 작업은 다음과 같습니다
제가 위에서 설명 된 예는 여기에 왼쪽 상단 파란색 사각형이 ocillation의 초 수. 질량과 같은 것은 중요하지 않습니다.
나는 ElasticEase
을 시도했는데 문제가 4 초 동안 여유없이 여행하고 다음 16 초 동안 "바운스"할 수없는 개체 인 것으로 보입니다. 내가이 비디오를 포함하고 엑셀했습니다
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);
}
다음 .Springiness
나는대로 20
ILSpy 쇼의 그 기능과 같은 정말 높은 숫자로 설정 한 경우에도, 항상 너무 많은도 압축 된 폴더에있는 파일 DropBox에 있습니다. 나는이 질문이 사람들이 더 명확한 질문을 할 때 더 많은 일이 진행될 것이라고 생각한다.
(면책 조항 : 나는 그것이이 물건의 대부분에 올 때 내가 무슨 말을하는지 알 수없는) 물리학 건너 뛰기
문제는 귀하가 생각하기에 수학/물리학 문제입니다. 이것은 최초의 물리학 과정 댐핑 진동 문제이지만, 완전히 설명하기 위해서는 몇백 개의 단어 (그리고 몇 가지 수학 공식, 이는 매우 나빠질 것입니다)가 필요합니다. 기본적인 문제는 댐핑이 기하 급수적이므로 이산 적으로 꼬리 진동이 손실된다는 것입니다. http://en.wikipedia.org/wiki/Damping 대신 전체 설명을 원하십니까? :) –
고맙습니다 @ belisarius. 위의 표본이 질량을 고려하지 않는 것으로 생각하면 특히 수학/물리학은 이걸 가지고 저를 넘어 설 것입니다. 당신이 제공 할 수있는 설명이나 코드 샘플은 제가 전에 알고있는 변수들로 이것을 시작하는데 도움이 될 수 있습니다. –
나는 시도 할 것이다. 그러나 내가 그것을 잘하기 위해 나에게 많은 시간이 걸리게 할 것을 예기하는 것에 따라, 아마 물리학 자/학생이 현상금을 쫓는 것은 나를 예기 할 수 있었다 :). BTW, 질량은 거기 있지만, 문제의 다른 모든 상수 (탄성 상수 및 감쇠 계수)는 질량 독립 문제를 일으키기 위해 질량으로 나누어집니다 (Fm * a == 0은 0과 같으므로, 당신이 원하는 모든 상수에 의해 모든 조건). F는 탄성력 k와 위치에 비례하는 탄성력과 속도 및 감쇠 상수에 비례하는 감쇠력의 두 가지 힘의 합성입니다. –