Bug fixes
diff --git a/manimlib/mobject/geometry.py b/manimlib/mobject/geometry.py
index 768be33869..abe3eec7b8 100644
--- a/manimlib/mobject/geometry.py
+++ b/manimlib/mobject/geometry.py
@@ -347,7 +347,7 @@ def surround(
     def point_at_angle(self, angle: float) -> np.ndarray:
         start_angle = self.get_start_angle()
         return self.point_from_proportion(
-            (angle - start_angle) / TAU
+            ((angle - start_angle) % TAU) / TAU
         )
 
     def get_radius(self) -> float:
diff --git a/manimlib/mobject/matrix.py b/manimlib/mobject/matrix.py
index 76688a4d56..bb4aad84ef 100644
--- a/manimlib/mobject/matrix.py
+++ b/manimlib/mobject/matrix.py
@@ -94,15 +94,12 @@ def __init__(self, matrix: npt.ArrayLike, **kwargs):
         or mobjects
         """
         VMobject.__init__(self, **kwargs)
-        matrix = self.matrix = np.array(matrix, ndmin=2)
-        mob_matrix = self.matrix_to_mob_matrix(matrix)
+        mob_matrix = self.mob_matrix = self.matrix_to_mob_matrix(matrix)
         self.organize_mob_matrix(mob_matrix)
-        # self.elements = VGroup(*mob_matrix.flatten())
         self.elements = VGroup(*it.chain(*mob_matrix))
         self.add(self.elements)
         self.add_brackets()
         self.center()
-        self.mob_matrix = mob_matrix
         if self.add_background_rectangles_to_entries:
             for mob in self.elements:
                 mob.add_background_rectangle()
@@ -129,7 +126,7 @@ def organize_mob_matrix(self, matrix: npt.ArrayLike):
         return self
 
     def add_brackets(self):
-        height = self.matrix.shape[0]
+        height = len(self.mob_matrix)
         bracket_pair = Tex("".join([
             "\\left[",
             "\\begin{array}{c}",
diff --git a/manimlib/mobject/mobject.py b/manimlib/mobject/mobject.py
index bab9323fad..ef23bc4937 100644
--- a/manimlib/mobject/mobject.py
+++ b/manimlib/mobject/mobject.py
@@ -627,7 +627,7 @@ def load(file_path):
             mobject = pickle.load(fp)
         return mobject
 
-    def become(self, mobject: Mobject):
+    def become(self, mobject: Mobject, match_updaters=False):
         """
         Edit all data and submobjects to be idential
         to another mobject
@@ -647,7 +647,8 @@ def become(self, mobject: Mobject):
             if isinstance(value, Mobject) and value in family2:
                 setattr(self, attr, family1[family2.index(value)])
         self.refresh_bounding_box(recurse_down=True)
-        self.match_updaters(mobject)
+        if match_updaters:
+            self.match_updaters(mobject)
         return self
 
     def looks_identical(self, mobject: Mobject):
@@ -1265,7 +1266,10 @@ def get_opacity(self) -> float:
         return self.data["rgbas"][0, 3]
 
     def set_color_by_gradient(self, *colors: ManimColor):
-        self.set_submobject_colors_by_gradient(*colors)
+        if self.has_points():
+            self.set_color(colors)
+        else:
+            self.set_submobject_colors_by_gradient(*colors)
         return self
 
     def set_submobject_colors_by_gradient(self, *colors: ManimColor):
diff --git a/manimlib/utils/space_ops.py b/manimlib/utils/space_ops.py
index faeef1588f..7c2cfe4ebb 100644
--- a/manimlib/utils/space_ops.py
+++ b/manimlib/utils/space_ops.py
@@ -294,7 +294,10 @@ def find_intersection(
     denom[abs(denom) < threshold] = np.inf  # So that ratio goes to 0 there
     ratio = numer / denom
     ratio = np.repeat(ratio, n).reshape((m, n))
-    return p0 + ratio * v0
+    result = p0 + ratio * v0
+    if m == 1:
+        return result[0]
+    return result
 
 
 def get_closest_point_on_line(

A few simple bug fixes

- #1882
- #1878
- #1877
- #1875