0

我试图在同一个场景中有两条相同的贝塞尔曲线,一条带有末端尖端,另一条带有开始尖端,但是尽管具有相同的锚点和手柄,但贝塞尔曲线的出现方式不同。我知道我可以将两个提示添加到同一个贝塞尔曲线,但是要将图形集成到我现有的代码中(以对其进行动画处理),我需要将它们分开。演示问题的示例代码如下:

from manimlib.imports import *
class Testing3(Scene):
    def construct(self):
        coords_list=[0.818*UP+.9*UP, -2*RIGHT+((1/6-19/36)*np.sqrt(3))*UP+.9*UP]
        node_list=[]
        for i in range(2):
            mobject = VMobject()
            number = TexMobject(str(i+1))
            circle = Circle(radius=0.4,color=WHITE)
            mobject.add(number)
            mobject.add(circle)
            mobject.move_to(coords_list[i])
            node_list.append(mobject)
        
        arc1=TipableVMobject()
        arc1.add_cubic_bezier_curve(
            node_list[1].get_center(),
            node_list[1].get_center()-3*RIGHT+2*UP,
            node_list[1].get_center()-2*RIGHT+5.2*UP,
            node_list[0].get_center()
        )
        arc1.pointwise_become_partial(
            arc1,
            0.4/arc1.get_arc_length(n_sample_points=20),
            1-0.2/arc1.get_arc_length(n_sample_points=100)
        )
        arc1.add_tip(tip_length=0.2)
        
        arc2=TipableVMobject()
        arc2.add_cubic_bezier_curve(
            node_list[1].get_center(),
            node_list[1].get_center()-3*RIGHT+2*UP,
            node_list[1].get_center()-2*RIGHT+5.2*UP,
            node_list[0].get_center()
        )
        arc2.pointwise_become_partial(
            arc2,
            0.4/arc2.get_arc_length(n_sample_points=20),
            1-0.2/arc2.get_arc_length(n_sample_points=100)
        )
        arc2.add_tip(tip_length=0.2,at_start=True)
        self.add(*node_list,arc1,arc2)
        self.wait()

我曾尝试制作贝塞尔曲线的副本,但它会产生相同的结果。

4

1 回答 1

1

目前我只能这样做:

class Testing3(Scene):
    def construct(self):
        coords_list=[0.818*UP+.9*UP, -2*RIGHT+((1/6-19/36)*np.sqrt(3))*UP+.9*UP]
        node_list=[]
        for i in range(2):
            mobject = VMobject()
            number = TexMobject(str(i+1))
            circle = Circle(radius=0.4,color=WHITE)
            mobject.add(number)
            mobject.add(circle)
            mobject.move_to(coords_list[i])
            node_list.append(mobject)

        arc1=TipableVMobject()
        arc1.add_cubic_bezier_curve(
        node_list[1].get_center(),
        node_list[1].get_center()-3*RIGHT+2*UP,
        node_list[1].get_center()-2*RIGHT+5.2*UP,
        node_list[0].get_center()
        )
        arc1.pointwise_become_partial(
        arc1,
        0.4/arc1.get_arc_length(n_sample_points=20),
        1-0.2/arc1.get_arc_length(n_sample_points=100)
        )
        arc1.add_tip(tip_length=0.2,
        #at_start=True
        )
        arc1.add_tip(tip_length=0.2,
        at_start=True
        )
        arc1.set_color(RED)

        arc2=TipableVMobject()
        arc2.add_cubic_bezier_curve(
        node_list[1].get_center(),
        node_list[1].get_center()-3*RIGHT+2*UP,
        node_list[1].get_center()-2*RIGHT+5.2*UP,
        node_list[0].get_center()
        )
        arc2.pointwise_become_partial(
        arc2,
        0.4/arc2.get_arc_length(n_sample_points=20),
        1-0.2/arc2.get_arc_length(n_sample_points=100)
        )
        arc2.add_tip(tip_length=0.2,
        #at_start=True
        )
        arc2.add_tip(tip_length=0.2,
        at_start=True
        )
        arc2.set_color(BLUE)

        arc1.remove(arc1[-2])
        arc2.remove(arc2[-1])

        self.add(*node_list,arc1)

        self.wait()
        self.add(arc2)
        self.wait()

于 2019-05-26T07:57:17.073 回答