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

Manim中如何实现两点间连线?解决轴线起始异常问题

解决Manim中自定义水平线起止点的问题

我明白你遇到的问题啦——get_horizontal_line方法默认会从坐标轴的左边界(也就是你设置的x_range最小值,这里是-8,你看到从0开始可能是视图显示的视觉效果)画到指定点的x坐标,所以才会出现线条从y轴附近延伸到(3,1)的情况。要画出从(1,1)到(3,1)的虚线,有两种简单的办法:

方法一:直接用Line类手动连接两点

这是最灵活的方式,你可以直接指定线条的起点和终点,还能一键设置虚线样式:

# 替换原来的bodkociarkaMinus2a定义
bodkociarkaMinus2a = Line(
    suradnicovaOs.coords_to_point(1, 1),
    suradnicovaOs.coords_to_point(3, 1),
    stroke_dasharray=[0.2, 0.2],  # 调整数值可以改变虚线的疏密
    color=WHITE  # 可以自定义颜色,和其他辅助线保持一致
)

方法二:给get_horizontal_line指定x范围

如果你更习惯用Axes提供的方法,可以通过x_range参数明确指定水平线的起始和结束x值:

# 替换原来的bodkociarkaMinus2a定义
bodkociarkaMinus2a = suradnicovaOs.get_horizontal_line(
    suradnicovaOs.c2p(3,1),
    x_range=[1, 3]  # 直接指定x从1到3
)
# 再设置虚线样式
bodkociarkaMinus2a.set_stroke(dasharray=[0.2, 0.2])

修改后的完整代码

把你的代码里的bodkociarkaMinus2a替换成上面任意一种写法就行,下面是完整的修改版示例:

from manim import *

class KvadratickaFunkcia(Scene):
    def construct(self):

        suradnicovaOs = Axes(
            x_range=[-8,8,1],
            y_range=[-8,8,1],
            tips=False,
            x_length=10,
            y_length=10,

            axis_config=
            {
            "stroke_color": GREY_A,
            "include_numbers": True,
            }
        )

       
        #vzorec  x-2
        posunParabolyVzorecMinus2a = MathTex("{y = (x-2)^2+0}", font_size=50).to_edge(UL).set_color(YELLOW)
        posunParabolyVzorecMinus2a[0][5].set_color(RED)
        posunParabolyVzorecMinus2a[0][9].set_color(RED)
        #vzorec parabola y: (y-2)**2+0
        parabolaMinus2a = suradnicovaOs.plot(lambda y: (y-2)**2+0 )
        #body 1,2,3
        bodMinus2a= Dot(suradnicovaOs.coords_to_point(1, 1), color=YELLOW)
        # 这里用方法一的Line实现虚线
        bodkociarkaMinus2a = Line(
            suradnicovaOs.coords_to_point(1, 1),
            suradnicovaOs.coords_to_point(3, 1),
            stroke_dasharray=[0.2, 0.2]
        )
        bodMinus2a2 = Dot(suradnicovaOs.coords_to_point(2, 0), color=YELLOW)
        bodkociarkaMinus2a2 = suradnicovaOs.get_vertical_line(suradnicovaOs.c2p(1,1))
        bodMinus2a3 = Dot(suradnicovaOs.coords_to_point(3, 1), color=YELLOW)
        bodkociarkaMinus2a3 = suradnicovaOs.get_vertical_line(suradnicovaOs.c2p(3,1))
        VsetkyBodyMinus123AA = VGroup(bodMinus2a,bodMinus2a2,bodMinus2a3,bodkociarkaMinus2a,bodkociarkaMinus2a2,bodkociarkaMinus2a3)

        self.play(Write(suradnicovaOs), run_time=3)
        self.play(Create(posunParabolyVzorecMinus2a))
        self.play(Create(VsetkyBodyMinus123AA))   
        self.wait()
        self.play(FadeIn(parabolaMinus2a)) 

这样运行之后,你就能看到从(1,1)到(3,1)的虚线啦,完全符合你的需求~

内容的提问来源于stack exchange,提问作者Šimon K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 17:55:39