|
15 | 15 | from manim.renderer.shader_wrapper import ShaderWrapper
|
16 | 16 | from manim.utils.bezier import (
|
17 | 17 | bezier,
|
| 18 | + bezier_remap, |
18 | 19 | get_quadratic_approximation_of_cubic,
|
19 | 20 | get_smooth_cubic_bezier_handle_points,
|
20 | 21 | integer_interpolate,
|
21 | 22 | interpolate,
|
22 |
| - partial_quadratic_bezier_points, |
| 23 | + partial_bezier_points, |
23 | 24 | proportions_along_bezier_curve_for_point,
|
24 |
| - quadratic_bezier_remap, |
25 | 25 | )
|
26 | 26 | from manim.utils.color import BLACK, WHITE, ManimColor, ParsableManimColor
|
27 | 27 | from manim.utils.config_ops import _Data
|
@@ -555,7 +555,7 @@ def subdivide_sharp_curves(self, angle_threshold=30 * DEGREES, recurse=True):
|
555 | 555 | alphas = np.linspace(0, 1, n + 1)
|
556 | 556 | new_points.extend(
|
557 | 557 | [
|
558 |
| - partial_quadratic_bezier_points(tup, a1, a2) |
| 558 | + partial_bezier_points(tup, a1, a2) |
559 | 559 | for a1, a2 in zip(alphas, alphas[1:])
|
560 | 560 | ],
|
561 | 561 | )
|
@@ -1275,33 +1275,12 @@ def insert_n_curves_to_point_list(self, n: int, points: np.ndarray) -> np.ndarra
|
1275 | 1275 | if len(points) == 1:
|
1276 | 1276 | return np.repeat(points, nppc * n, 0)
|
1277 | 1277 |
|
1278 |
| - bezier_groups = self.get_bezier_tuples_from_points(points) |
1279 |
| - norms = np.array([np.linalg.norm(bg[nppc - 1] - bg[0]) for bg in bezier_groups]) |
1280 |
| - total_norm = sum(norms) |
1281 |
| - # Calculate insertions per curve (ipc) |
1282 |
| - if total_norm < 1e-6: |
1283 |
| - ipc = [n] + [0] * (len(bezier_groups) - 1) |
1284 |
| - else: |
1285 |
| - ipc = np.round(n * norms / sum(norms)).astype(int) |
1286 |
| - |
1287 |
| - diff = n - sum(ipc) |
1288 |
| - for _ in range(diff): |
1289 |
| - ipc[np.argmin(ipc)] += 1 |
1290 |
| - for _ in range(-diff): |
1291 |
| - ipc[np.argmax(ipc)] -= 1 |
1292 |
| - |
1293 |
| - new_length = sum(x + 1 for x in ipc) |
1294 |
| - new_points = np.empty((new_length, nppc, 3)) |
1295 |
| - i = 0 |
1296 |
| - for group, n_inserts in zip(bezier_groups, ipc): |
1297 |
| - # What was once a single quadratic curve defined |
1298 |
| - # by "group" will now be broken into n_inserts + 1 |
1299 |
| - # smaller quadratic curves |
1300 |
| - alphas = np.linspace(0, 1, n_inserts + 2) |
1301 |
| - for a1, a2 in zip(alphas, alphas[1:]): |
1302 |
| - new_points[i] = partial_quadratic_bezier_points(group, a1, a2) |
1303 |
| - i = i + 1 |
1304 |
| - return np.vstack(new_points) |
| 1278 | + bezier_tuples = self.get_bezier_tuples_from_points(points) |
| 1279 | + current_number_of_curves = len(bezier_tuples) |
| 1280 | + new_number_of_curves = current_number_of_curves + n |
| 1281 | + new_bezier_tuples = bezier_remap(bezier_tuples, new_number_of_curves) |
| 1282 | + new_points = new_bezier_tuples.reshape(-1, 3) |
| 1283 | + return new_points |
1305 | 1284 |
|
1306 | 1285 | def interpolate(self, mobject1, mobject2, alpha, *args, **kwargs):
|
1307 | 1286 | super().interpolate(mobject1, mobject2, alpha, *args, **kwargs)
|
@@ -1354,32 +1333,26 @@ def pointwise_become_partial(
|
1354 | 1333 | return self
|
1355 | 1334 | if lower_index == upper_index:
|
1356 | 1335 | self.append_points(
|
1357 |
| - partial_quadratic_bezier_points( |
| 1336 | + partial_bezier_points( |
1358 | 1337 | bezier_triplets[lower_index],
|
1359 | 1338 | lower_residue,
|
1360 | 1339 | upper_residue,
|
1361 | 1340 | ),
|
1362 | 1341 | )
|
1363 | 1342 | else:
|
1364 | 1343 | self.append_points(
|
1365 |
| - partial_quadratic_bezier_points( |
1366 |
| - bezier_triplets[lower_index], lower_residue, 1 |
1367 |
| - ), |
| 1344 | + partial_bezier_points(bezier_triplets[lower_index], lower_residue, 1), |
1368 | 1345 | )
|
1369 | 1346 | inner_points = bezier_triplets[lower_index + 1 : upper_index]
|
1370 | 1347 | if len(inner_points) > 0:
|
1371 | 1348 | if remap:
|
1372 |
| - new_triplets = quadratic_bezier_remap( |
1373 |
| - inner_points, num_quadratics - 2 |
1374 |
| - ) |
| 1349 | + new_triplets = bezier_remap(inner_points, num_quadratics - 2) |
1375 | 1350 | else:
|
1376 | 1351 | new_triplets = bezier_triplets
|
1377 | 1352 |
|
1378 | 1353 | self.append_points(np.asarray(new_triplets).reshape(-1, 3))
|
1379 | 1354 | self.append_points(
|
1380 |
| - partial_quadratic_bezier_points( |
1381 |
| - bezier_triplets[upper_index], 0, upper_residue |
1382 |
| - ), |
| 1355 | + partial_bezier_points(bezier_triplets[upper_index], 0, upper_residue), |
1383 | 1356 | )
|
1384 | 1357 | return self
|
1385 | 1358 |
|
|
0 commit comments