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.
相关产品推荐
相关产品推荐

