2022-02-15 18:39:45 +08:00
|
|
|
from __future__ import annotations
|
|
|
|
|
2018-12-24 12:37:51 -08:00
|
|
|
from manimlib.animation.animation import Animation
|
2019-02-09 15:35:44 -08:00
|
|
|
from manimlib.mobject.numbers import DecimalNumber
|
2018-12-24 12:37:51 -08:00
|
|
|
from manimlib.utils.bezier import interpolate
|
2018-03-31 18:49:28 -07:00
|
|
|
|
2022-04-12 19:19:59 +08:00
|
|
|
from typing import TYPE_CHECKING
|
|
|
|
|
|
|
|
if TYPE_CHECKING:
|
|
|
|
from typing import Callable
|
|
|
|
|
2018-04-06 13:58:59 -07:00
|
|
|
|
2018-03-31 18:49:28 -07:00
|
|
|
class ChangingDecimal(Animation):
|
|
|
|
CONFIG = {
|
2019-02-09 15:35:44 -08:00
|
|
|
"suspend_mobject_updating": False,
|
2018-03-31 18:49:28 -07:00
|
|
|
}
|
2018-04-06 13:58:59 -07:00
|
|
|
|
2022-02-15 18:39:45 +08:00
|
|
|
def __init__(
|
|
|
|
self,
|
|
|
|
decimal_mob: DecimalNumber,
|
|
|
|
number_update_func: Callable[[float], float],
|
|
|
|
**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
|
|
|
|
super().__init__(decimal_mob, **kwargs)
|
|
|
|
|
2022-02-15 18:39:45 +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)
|
2018-03-31 18:49:28 -07:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
class ChangeDecimalToValue(ChangingDecimal):
|
2022-02-15 18:39:45 +08:00
|
|
|
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):
|
2022-02-15 18:39:45 +08:00
|
|
|
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
|
|
|
|
)
|