You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Manim坐标轴技术求助:绘制水平线、轴连线及两点距离

在Manim中绘制坐标轴辅助线与距离展示的解决方案

嘿,我来帮你搞定这个Manim绘图的问题!你已经搭好了GraphScene的基础框架,接下来只需要添加点的创建、辅助线绘制和距离标注的逻辑就行,我给你一步步拆解并修改代码:

完整修改后的代码

from manimlib.imports import *
class GraphX(GraphScene):
    CONFIG ={
        'x_min': -4,
        'x_max': 4,
        'y_min': -2,
        'y_max': 2,
        'x_axis_label': '$x$',
        'y_axis_label': '$y$',
        'graph_origin': 0.5 * DOWN + 0 * LEFT,
    }
    def show_function_graph(self):
        self.setup_axes(animate = True)
        # 1. 定义目标点的数学坐标,这里以(2,1)为例
        target_x, target_y = 2, 1
        
        # 2. 将数学坐标转换为Manim屏幕坐标(GraphScene核心方法)
        target_point = self.coords_to_point(target_x, target_y)
        # 创建点并添加标签
        dot = Dot(target_point, color=RED)
        dot_label = TextMobject(f'$({target_x},{target_y})$').next_to(dot, UP+RIGHT, buff=0.1)
        self.play(FadeIn(dot), Write(dot_label))
        
        # 3. 绘制到x轴的垂直线(辅助线)
        x_axis_foot = self.coords_to_point(target_x, 0)
        vertical_line = Line(target_point, x_axis_foot, color=BLUE, stroke_width=2, dash_length=0.1)
        self.play(Create(vertical_line))
        # 标注点到x轴的距离
        y_distance = Distance(target_point, x_axis_foot, color=BLUE)
        y_distance_label = TextMobject(f'$|{target_y}|$').next_to(y_distance, RIGHT, buff=0.2)
        self.play(Create(y_distance), Write(y_distance_label))
        
        # 4. 绘制到y轴的水平线(辅助线)
        y_axis_foot = self.coords_to_point(0, target_y)
        horizontal_line = Line(target_point, y_axis_foot, color=GREEN, stroke_width=2, dash_length=0.1)
        self.play(Create(horizontal_line))
        # 标注点到y轴的距离
        x_distance = Distance(target_point, y_axis_foot, color=GREEN)
        x_distance_label = TextMobject(f'$|{target_x}|$').next_to(x_distance, UP, buff=0.2)
        self.play(Create(x_distance), Write(x_distance_label))
        
        self.wait(3)
    def construct(self):
        self.show_function_graph()

关键步骤解释

  • 坐标转换:GraphScene里的coords_to_point()是核心,它能把你熟悉的数学坐标(x,y)转换成Manim的屏幕坐标,避免手动计算位置出错。
  • 辅助线绘制:用Line类连接目标点和坐标轴上的垂足,设置dash_length让辅助线变成虚线,更符合数学绘图的习惯。
  • 距离展示:使用Distance类可以自动生成带双向箭头的距离线段,再配合TextMobject标注具体的距离值,清晰直观。
  • 动画控制:用play()方法把每个元素的创建/显示做成动画,让整个演示过程更流畅。

你可以根据自己的需求修改target_xtarget_y的值,来展示不同的点。如果需要通用的(x,y)标签,把f'$({target_x},{target_y})$'改成'$(x,y)$'`就行啦!

内容的提问来源于stack exchange,提问作者Rahat Hossain

火山引擎 最新活动