From 6949c66922dd340785840d3ea0fa0977e9284e52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Manr=C3=ADquez=20Novoa?= <49853152+chopan050@users.noreply.github.com> Date: Wed, 6 Dec 2023 14:40:10 +0100 Subject: [PATCH] Optimized `get_unit_normal()` and replaced `np.cross()` with custom `cross()` in `manim.utils.space_ops` (#3494) * Added cross and optimized get_unit_normal in manim.utils.space_ops * Added missing border case to new get_unit_normal where one vector is nonzero * Updated test_threed.py::test_Sphere test data --- manim/utils/space_ops.py | 69 +++++++++++++----- .../control_data/threed/Sphere.npz | Bin 24819 -> 24817 bytes 2 files changed, 50 insertions(+), 19 deletions(-) diff --git a/manim/utils/space_ops.py b/manim/utils/space_ops.py index 16af964e74..60bfd0e894 100644 --- a/manim/utils/space_ops.py +++ b/manim/utils/space_ops.py @@ -2,7 +2,7 @@ from __future__ import annotations -from manim.typing import Point3D_Array, Vector +from manim.typing import Point3D_Array, Vector, Vector3 __all__ = [ "quaternion_mult", @@ -53,6 +53,16 @@ def norm_squared(v: float) -> float: return np.dot(v, v) +def cross(v1: Vector3, v2: Vector3) -> Vector3: + return np.array( + [ + v1[1] * v2[2] - v1[2] * v2[1], + v1[2] * v2[0] - v1[0] * v2[2], + v1[0] * v2[1] - v1[1] * v2[0], + ] + ) + + # Quaternions # TODO, implement quaternion type @@ -273,12 +283,12 @@ def z_to_vector(vector: np.ndarray) -> np.ndarray: (normalized) vector provided as an argument """ axis_z = normalize(vector) - axis_y = normalize(np.cross(axis_z, RIGHT)) - axis_x = np.cross(axis_y, axis_z) + axis_y = normalize(cross(axis_z, RIGHT)) + axis_x = cross(axis_y, axis_z) if np.linalg.norm(axis_y) == 0: # the vector passed just so happened to be in the x direction. - axis_x = normalize(np.cross(UP, axis_z)) - axis_y = -np.cross(axis_x, axis_z) + axis_x = normalize(cross(UP, axis_z)) + axis_y = -cross(axis_x, axis_z) return np.array([axis_x, axis_y, axis_z]).T @@ -359,7 +369,7 @@ def normalize_along_axis(array: np.ndarray, axis: np.ndarray) -> np.ndarray: return array -def get_unit_normal(v1: np.ndarray, v2: np.ndarray, tol: float = 1e-6) -> np.ndarray: +def get_unit_normal(v1: Vector3, v2: Vector3, tol: float = 1e-6) -> Vector3: """Gets the unit normal of the vectors. Parameters @@ -376,16 +386,37 @@ def get_unit_normal(v1: np.ndarray, v2: np.ndarray, tol: float = 1e-6) -> np.nda np.ndarray The normal of the two vectors. """ - v1, v2 = (normalize(i) for i in (v1, v2)) - cp = np.cross(v1, v2) - cp_norm = np.linalg.norm(cp) - if cp_norm < tol: - # Vectors align, so find a normal to them in the plane shared with the z-axis - cp = np.cross(np.cross(v1, OUT), v1) - cp_norm = np.linalg.norm(cp) - if cp_norm < tol: + # Instead of normalizing v1 and v2, just divide by the greatest + # of all their absolute components, which is just enough + div1, div2 = max(np.abs(v1)), max(np.abs(v2)) + if div1 == 0.0: + if div2 == 0.0: return DOWN - return normalize(cp) + u = v2 / div2 + elif div2 == 0.0: + u = v1 / div1 + else: + # Normal scenario: v1 and v2 are both non-null + u1, u2 = v1 / div1, v2 / div2 + cp = cross(u1, u2) + cp_norm = np.sqrt(norm_squared(cp)) + if cp_norm > tol: + return cp / cp_norm + # Otherwise, v1 and v2 were aligned + u = u1 + + # If you are here, you have an "unique", non-zero, unit-ish vector u + # If it's also too aligned to the Z axis, just return DOWN + if abs(u[0]) < tol and abs(u[1]) < tol: + return DOWN + # Otherwise rotate u in the plane it shares with the Z axis, + # 90° TOWARDS the Z axis. This is done via (u x [0, 0, 1]) x u, + # which gives [-xz, -yz, x²+y²] (slightly scaled as well) + cp = np.array([-u[0] * u[2], -u[1] * u[2], u[0] * u[0] + u[1] * u[1]]) + cp_norm = np.sqrt(norm_squared(cp)) + # Because the norm(u) == 0 case was filtered in the beginning, + # there is no need to check if the norm of cp is 0 + return cp / cp_norm ### @@ -529,8 +560,8 @@ def line_intersection( np.pad(np.array(i)[:, :2], ((0, 0), (0, 1)), constant_values=1) for i in (line1, line2) ) - line1, line2 = (np.cross(*i) for i in padded) - x, y, z = np.cross(line1, line2) + line1, line2 = (cross(*i) for i in padded) + x, y, z = cross(line1, line2) if z == 0: raise ValueError( @@ -558,7 +589,7 @@ def find_intersection( result = [] for p0, v0, p1, v1 in zip(*[p0s, v0s, p1s, v1s]): - normal = np.cross(v1, np.cross(v0, v1)) + normal = cross(v1, cross(v0, v1)) denom = max(np.dot(v0, normal), threshold) result += [p0 + np.dot(p1 - p0, normal) / denom * v0] return result @@ -814,6 +845,6 @@ def perpendicular_bisector( """ p1 = line[0] p2 = line[1] - direction = np.cross(p1 - p2, norm_vector) + direction = cross(p1 - p2, norm_vector) m = midpoint(p1, p2) return [m + direction, m - direction] diff --git a/tests/test_graphical_units/control_data/threed/Sphere.npz b/tests/test_graphical_units/control_data/threed/Sphere.npz index 4909da623b66e19cb30816172447927d6bbd85d1..58cd442676c86855d1b31a2fe6f54b074c4809f0 100644 GIT binary patch literal 24817 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 literal 24819 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Öot6{zno#Vqs++ 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 b)5HIBVZkL=4RuQYy7j>KB=9V_s($+~N_vJ9