You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Manim场景中Swap方法导致点消失或位置重叠问题

问题分析与修复

你的代码出现点消失或位置重叠的问题,根源有两个:

  • 索引逻辑错误:原代码中random_permutation[i-1]和next_index-1的操作完全偏离排列映射逻辑,导致目标点选取混乱(比如i=0时会取排列最后一个元素再减1,引发索引越界或选到错误的点)。
  • Swap动画误用:错误收集的待交换点列表存在重复,同一个点被多次执行Swap动画,导致位置冲突。

修复方案

使用MoveToTarget动画替代Swap,让每个点直接移动到排列指定的目标位置,避免交换冲突,同时修正索引逻辑:

from manim import*
import numpy as np
from itertools import permutations
import random

class CircleWithPoints(Scene):
    def construct(self):
        n = 6  # Number of points
        radius = 2
        colors = [RED, GREEN, GOLD, BLUE, PINK, PURPLE]

        # Create circle
        circle = Circle(radius=radius, color=WHITE)
        self.play(Create(circle))

        # Generate initial positions for points on the circle
        positions = []
        for i in range(n):
            angle = i * 2 * np.pi / n
            x = radius * np.cos(angle)
            y = radius * np.sin(angle)
            positions.append([x, y, 0])

        # Create and display points
        points = []
        for i in range(n):
            point = Dot(point=positions[i], color=colors[i])
            points.append(point)
            self.play(Write(point), run_time=0.25)

        # Pick a random permutation of indices (0 to n-1)
        all_permutations = list(permutations(range(n)))
        permutation = random.choice(all_permutations)

        self.wait(1)

        # Set target positions for each point: point i moves to the initial position of permutation[i]
        for i in range(n):
            points[i].target = Dot(point=positions[permutation[i]], color=colors[i])

        # Animate all points moving to their targets at once
        self.play(*[MoveToTarget(p) for p in points])

        self.wait(1)

关键说明

  1. 预先生成所有点的初始位置,避免重复计算。
  2. 随机排列直接映射目标位置:permutation[i]表示第i个点要移动到初始时第permutation[i]个点的位置,符合排列的置换逻辑。
  3. MoveToTarget让每个点独立移动到目标位置,不会出现冲突,完美解决点消失或重叠的问题。

内容的提问来源于stack exchange,提问作者Adam Boussif

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 03:17:06