mirror of
https://github.com/3b1b/manim.git
synced 2025-09-01 00:48:45 +00:00
Improve VMobject.add_arc_to
This commit is contained in:
parent
690eb24562
commit
5f41e238ba
1 changed files with 11 additions and 2 deletions
|
@ -11,6 +11,7 @@ from manimlib.constants import DEFAULT_STROKE_WIDTH
|
||||||
from manimlib.constants import DEGREES
|
from manimlib.constants import DEGREES
|
||||||
from manimlib.constants import JOINT_TYPE_MAP
|
from manimlib.constants import JOINT_TYPE_MAP
|
||||||
from manimlib.constants import ORIGIN, OUT
|
from manimlib.constants import ORIGIN, OUT
|
||||||
|
from manimlib.constants import TAU
|
||||||
from manimlib.mobject.mobject import Mobject
|
from manimlib.mobject.mobject import Mobject
|
||||||
from manimlib.mobject.mobject import Point
|
from manimlib.mobject.mobject import Point
|
||||||
from manimlib.utils.bezier import bezier
|
from manimlib.utils.bezier import bezier
|
||||||
|
@ -378,7 +379,7 @@ class VMobject(Mobject):
|
||||||
data = self.data if self.has_points() else self._data_defaults
|
data = self.data if self.has_points() else self._data_defaults
|
||||||
return rgb_to_hex(data["stroke_rgba"][0, :3])
|
return rgb_to_hex(data["stroke_rgba"][0, :3])
|
||||||
|
|
||||||
def get_stroke_width(self) -> float | np.ndarray:
|
def get_stroke_width(self) -> float:
|
||||||
data = self.data if self.has_points() else self._data_defaults
|
data = self.data if self.has_points() else self._data_defaults
|
||||||
return data["stroke_width"][0, 0]
|
return data["stroke_width"][0, 0]
|
||||||
|
|
||||||
|
@ -550,8 +551,16 @@ class VMobject(Mobject):
|
||||||
self.add_cubic_bezier_curve_to(new_handle, handle, point)
|
self.add_cubic_bezier_curve_to(new_handle, handle, point)
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def add_arc_to(self, point: Vect3, angle: float, n_components: int = 8) -> Self:
|
def add_arc_to(self, point: Vect3, angle: float, n_components: int | None = None, threshold: float = 1e-3) -> Self:
|
||||||
self.throw_error_if_no_points()
|
self.throw_error_if_no_points()
|
||||||
|
if abs(angle) < threshold:
|
||||||
|
self.add_line_to(point)
|
||||||
|
return self
|
||||||
|
|
||||||
|
# Assign default value for n_components
|
||||||
|
if n_components is None:
|
||||||
|
n_components = int(np.ceil(8 * angle / TAU))
|
||||||
|
|
||||||
arc_points = quadratic_bezier_points_for_arc(angle, n_components)
|
arc_points = quadratic_bezier_points_for_arc(angle, n_components)
|
||||||
target_vect = point - self.get_end()
|
target_vect = point - self.get_end()
|
||||||
curr_vect = arc_points[-1] - arc_points[0]
|
curr_vect = arc_points[-1] - arc_points[0]
|
||||||
|
|
Loading…
Add table
Reference in a new issue