감소형 애니메이션의 빼기 연산 원리와 단계별 이해

calm·2025년 6월 29일
0

GSAP애니메이션

목록 보기
6/8

"왜 100에서 32를 빼는가?" 이 부분이 가장 헷갈리는 포인트죠. 감소형 애니메이션의 계산 원리를 단계별로 완전히 분해해서 설명해드리겠습니다.


🎯 상황 설정: 100 → 20으로 변화

애니메이션 목표

시작값: 100 (처음 상태)
끝값: 20 (최종 상태)  
방향: 감소 (100에서 20으로 줄어듦)

핵심 질문들

Q1: 100에서 20으로 가려면 얼마나 줄여야 하나?
A1: 100 - 20 = 80만큼 줄여야 함

Q2: 40% 진행됐다면 얼마나 줄어져야 하나?  
A2: 80 × 0.4 = 32만큼 줄어져야 함

Q3: 현재값은 얼마인가?
A3: 100(시작) - 32(줄어든 양) = 68(현재값)

📏 단계별 계산 과정 (초세밀 분석)

1단계: 전체 변화량 파악

// "100에서 20으로 가려면 총 얼마나 변해야 하나?"
전체_변화량 = 시작값 - 끝값
전체_변화량 = 100 - 20 = 80

// 해석: "최대 80만큼 줄어들 수 있다"

2단계: 현재 진행률 확인

// "현재 40% 진행되었다"
progress = 0.4 (40%)

// 해석: "전체 여행의 40%를 완료했다"

3단계: 현재까지 실제로 변한 양 계산

// "40% 진행되었으니, 80 중에서 얼마나 줄어졌을까?"
현재까지_줄어든_양 = 전체_변화량 × progress
현재까지_줄어든_양 = 80 × 0.4 = 32

// 해석: "지금까지 32만큼 줄어들었다"

4단계: 현재값 계산 (핵심!)

// "원래 100이었는데, 32만큼 줄어들었으니 현재는?"
현재값 = 시작값 - 현재까지_줄어든_양
현재값 = 100 - 32 = 68

// 해석: "100에서 시작해서 32만큼 감소했으므로 현재는 68이다"

🎭 일상생활 비유: 은행 잔고 감소

구체적 상황

처음 잔고: 100만원
목표 잔고: 20만원 (생활비로 써서 줄이기)
총 쓸 금액: 100 - 20 = 80만원

현재 40% 진행:
├── 지금까지 쓴 돈: 80만원 × 40% = 32만원  
└── 현재 잔고: 100만원 - 32만원 = 68만원

왜 빼기인가?

"원래 100만원에서 32만원을 썼으니까, 
 당연히 100 - 32 = 68만원이 남아있죠!"

// 이것이 자연스러운 계산법

🔢 숫자의 의미 완전 분해

각 숫자가 나타내는 것

100 = "시작점" (여기서부터 시작)
20 = "도착점" (여기까지 가야 함)  
80 = "여행해야 할 총 거리" (100-20)
0.4 = "여행 진행률" (40% 완료)
32 = "지금까지 여행한 거리" (80×0.4)
68 = "현재 위치" (100-32)

시각적 표현

100 ────────────────── 20
 │    32만큼 이동    │
 │←──────────→│      │
 시작        현재(68)  목표

🧮 다른 progress 값들로 검증

progress = 0.0 (0% 진행)

현재까지_줄어든_양 = 80 × 0.0 = 0
현재값 = 100 - 0 = 100  (시작값과 동일)

progress = 0.5 (50% 진행)

현재까지_줄어든_양 = 80 × 0.5 = 40  
현재값 = 100 - 40 = 60  (중간값)

progress = 1.0 (100% 진행)

현재까지_줄어든_양 = 80 × 1.0 = 80
현재값 = 100 - 80 = 20  (끝값과 동일)

🎬 실시간 변화 과정 시뮬레이션

애니메이션 진행 상황

// 시간 순서대로 보는 변화
시작 (0%):   현재값 = 100 - (80 × 0.0) = 100 - 0 = 100
10% 진행:    현재값 = 100 - (80 × 0.1) = 100 - 8 = 92
20% 진행:    현재값 = 100 - (80 × 0.2) = 100 - 16 = 84  
30% 진행:    현재값 = 100 - (80 × 0.3) = 100 - 24 = 76
40% 진행:    현재값 = 100 - (80 × 0.4) = 100 - 32 = 68 ← 우리 예시
50% 진행:    현재값 = 100 - (80 × 0.5) = 100 - 40 = 60
...
100% 완료:   현재값 = 100 - (80 × 1.0) = 100 - 80 = 20

그래프로 보는 변화

현재값
 100│●
    │ \
 90 │   ●
    │    \
 80 │      ●
    │       \
 70 │         ●← 68 (40% 지점)
    │          \
 60 │            ●
    │             \
 50 │               ●
    │                \
 40 │                  ●
    │                   \
 30 │                     ●
    │                      \
 20 │                        ●
    └─────────────────────────→ progress
    0%    20%    40%    60%   100%

🤔 헷갈리는 이유 분석

직관적 예상 vs 실제 계산

// ❌ 직관적으로 잘못 생각하기 쉬운 것:
"100에서 20으로 가니까 100 + 뭔가 = 20?"
"아니면 100 × 뭔가 = 20?"

// ✅ 실제 올바른 계산:
"100에서 시작해서 점점 줄여나가서 20에 도달"
"줄여나간다 = 빼기 연산"

핵심 포인트

빼기를 사용하는 이유:
1. 시작값(100)이 끝값(20)보다 크다
2. 감소하는 애니메이션이다  
3. "원래값 - 줄어든양 = 현재값"이 자연스럽다

🔄 비교: 증가형 애니메이션

만약 20 → 100으로 증가한다면?

시작값: 20
끝값: 100
전체_변화량: 100 - 20 = 80 (증가량)

progress = 0.4일 때:
현재까지_증가한_양 = 80 × 0.4 = 32
현재값 = 20 + 32 = 52 ← 더하기 사용!

// 증가형은 더하기, 감소형은 빼기

공식 비교

// 증가형 (작은 값 → 큰 값)
현재값 = 시작값 + (변화량 × progress)
현재값 = 20 + (80 × 0.4) = 52

// 감소형 (큰 값 → 작은 값)  
현재값 = 시작값 - (변화량 × progress)
현재값 = 100 - (80 × 0.4) = 68

🎯 핵심 이해 포인트

32의 정체

32 = "지금까지 줄어든 양"
   = "원래값에서 빠진 양"
   = "100에서 감소한 양"

// 따라서 100 - 32 = 현재 남아있는 양

100의 의미

100 = "기준점" (여기서 시작)
    = "원래 상태"
    = "감소가 시작되는 지점"

// 감소는 항상 기준점에서 빼는 것

🛠️ 실전 코드로 확인

단계별 디버깅 코드

function calculateCurrentValue(startValue, endValue, progress) {
  console.log('=== 계산 과정 ===');
  console.log('시작값:', startValue);          // 100
  console.log('끝값:', endValue);              // 20  
  console.log('진행률:', progress);            // 0.4
  
  const totalChange = startValue - endValue;
  console.log('전체 변화량:', totalChange);     // 80
  
  const currentChange = totalChange * progress;  
  console.log('현재 변화량:', currentChange);   // 32
  
  const currentValue = startValue - currentChange;
  console.log('현재값:', currentValue);        // 68
  
  console.log('검증:', currentValue, '===', startValue - currentChange);
  
  return currentValue;
}

// 실행
calculateCurrentValue(100, 20, 0.4);

결과 출력

=== 계산 과정 ===
시작값: 100
끝값: 20
진행률: 0.4
전체 변화량: 80
현재 변화량: 32
현재값: 68
검증: 68 === 100 - 32

🎭 완벽한 이해를 위한 최종 정리

문장으로 설명하면

"100에서 시작해서 20까지 가려고 해.
 총 80만큼 줄여야 하는데, 지금 40% 진행됐어.
 그러면 80의 40%인 32만큼 줄어들었겠지?
 원래 100이었는데 32만큼 줄었으니까 68이야."

수식의 의미

현재값 = 100 - 32 = 68

// 직역: "100에서 32를 뺀다"
// 의역: "원래 100이었는데 32만큼 감소했다"  
// 결과: "현재는 68이다"

왜 빼기인가?

감소 = 줄어든다 = 원래보다 작아진다 = 빼기
"원래 상태에서 변화량을 빼면 현재 상태"

이해도 최종 검증

완전 이해 체크:

  1. "100에서 32를 빼는 이유는?"
    → "100은 시작값이고, 32는 지금까지 줄어든 양이니까"

  2. "32는 어디서 나온 건가?"
    → "전체 변화량 80에 진행률 0.4를 곱한 값"

  3. "왜 더하기가 아니라 빼기인가?"
    → "감소하는 애니메이션이기 때문에"

🎉 이제 완전히 이해하셨나요? 100 - 32 = 68의 모든 비밀이 풀렸습니다!

profile
공부한 내용을 기록합니다

0개의 댓글