3b1b-manim/manimlib/animation/numbers.py

64 lines
1.6 KiB
Python
Raw Normal View History

from __future__ import annotations
from manimlib.animation.animation import Animation
2019-02-09 15:35:44 -08:00
from manimlib.mobject.numbers import DecimalNumber
from manimlib.utils.bezier import interpolate
2022-04-12 19:19:59 +08:00
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from typing import Callable
class ChangingDecimal(Animation):
def __init__(
self,
decimal_mob: DecimalNumber,
number_update_func: Callable[[float], float],
2022-12-14 15:02:25 -08:00
suspend_mobject_updating: bool = False,
**kwargs
):
2021-01-13 00:09:10 -10:00
assert(isinstance(decimal_mob, DecimalNumber))
2019-02-09 15:35:44 -08:00
self.number_update_func = number_update_func
2022-12-14 15:02:25 -08:00
super().__init__(
decimal_mob,
suspend_mobject_updating=suspend_mobject_updating,
**kwargs
)
self.mobject = decimal_mob
2019-02-09 15:35:44 -08:00
def interpolate_mobject(self, alpha: float) -> None:
2019-02-09 15:35:44 -08:00
self.mobject.set_value(
2018-08-12 19:05:31 -07:00
self.number_update_func(alpha)
)
class ChangeDecimalToValue(ChangingDecimal):
def __init__(
self,
decimal_mob: DecimalNumber,
target_number: float | complex,
**kwargs
):
2019-02-09 15:35:44 -08:00
start_number = decimal_mob.number
super().__init__(
decimal_mob,
lambda a: interpolate(start_number, target_number, a),
**kwargs
)
2020-03-13 14:06:08 -07:00
class CountInFrom(ChangingDecimal):
def __init__(
self,
decimal_mob: DecimalNumber,
source_number: float | complex = 0,
**kwargs
):
2020-03-13 14:06:08 -07:00
start_number = decimal_mob.number
super().__init__(
decimal_mob,
lambda a: interpolate(source_number, start_number, a),
**kwargs
)