极坐标的介绍
http://t.csdnimg.cn/ucau3http://t.csdnimg.cn/ucau3这个文章里可以知道极坐标的基本知识,接下来实现极坐标的绘制
PolarPlane
是 Manim(一个用于数学动画的Python库)中的一个类,用于创建极坐标平面。与笛卡尔坐标系不同,极坐标系是基于角度和半径来定位点的。具体来说,这里的每个点由一个角度和距离原点的距离表示。
PolarPlane
的主要特性:
-
极坐标系:
PolarPlane
用极径(r)和极角(θ)来展示坐标系,便于处理与角度和半径相关的数学概念。 -
网格和坐标:它通常会显示一个网格,以帮助观众理解不同的极径和角度。
-
灵活性:可以与其他 Manim 对象结合使用,可以在极坐标系中绘制图形或曲线。
使用场景:
- 显示极坐标相关的数学概念,如极函数、幅角等。
- 动画涉及到旋转或与角度相关的变化。
- 解析极坐标方程图像。
绘制极坐标的构造函数
构造函数:
PolarPlane(radius_max=4.0, size=None, radius_step=1, azimuth_step=None,
azimuth_units='PI radians', azimuth_compact_fraction=True, azimuth_offset=0,
azimuth_direction='CCW', azimuth_label_buff=0.1, azimuth_label_font_size=24,
radius_config=None, background_line_style=None, faded_line_style=None,
faded_line_ratio=1, make_smooth_after_applying_functions=True, **kwargs)
PolarPlane
类的构造函数接受多个参数,以便用户自定义极坐标平面的特性。下面是每个参数的解释:
参数解释
-
radius_max: 极坐标平面上半径的最大值。默认为
4.0
。 -
size: 极坐标平面的大小。如果未指定,通常会根据
radius_max
自动计算。 -
radius_step: 半径标记之间的间隔。例如,如果设置为
1
,则每个单位的半径都会有标记。 -
azimuth_step: 指定 azimuth(方位角)标记之间的角度步长,例如 30 度 (PI/6)。
-
azimuth_units: 指定方位角的单位,可以是
‘degrees’
或‘PI radians’
。默认为‘PI radians’
。 -
azimuth_compact_fraction: 是否以紧凑的分数形式显示方位角标签(例如,π/2 而不是 1.5708)。默认为
True
。 -
azimuth_offset: 方位角的偏移量,以弧度为单位。默认值为
0
。 -
azimuth_direction: 指定方位角的递增方向,可以是
'CW'
(顺时针)或'CCW'
(逆时针)。默认为'CCW'
。 -
azimuth_label_buff: 方位角标签与极坐标图的距离,增加此数值可以使标签更远离原点。
-
azimuth_label_font_size: 方位角标签的字体大小,默认为
24
。 -
radius_config: 自定义半径标记样式,可以是颜色、线条样式等。
-
background_line_style: 背景线的样式,通常用于极轨迹和背景网格的样式。
-
faded_line_style: 淡化线条的样式,通常用于控制一些辅助线的风格。
-
faded_line_ratio: 控制淡化线条的比例,默认值为
1
。 -
make_smooth_after_applying_functions: 在应用函数后是否使线条平滑,默认为
True
。 -
kwargs: 其他参数,传递给基类或其他组件。详细看该文章:http://t.csdnimg.cn/6PKEbhttp://t.csdnimg.cn/6PKEb
示例代码1:
from manim import *
class PolarPlaneExample1122(Scene):
def construct(self):
polarplane_pi01 = PolarPlane(
azimuth_units="PI radians",
size=5,
azimuth_label_font_size=33.6,
radius_config={"font_size": 33.6},
).add_coordinates()
self.add(polarplane_pi01)
polar_plane = PolarPlane(
#radius_max=7.5,
size=5,
radius_step=1, # 修改为1,显示更细的半径刻度
#azimuth_step=PI/5, # 修改为PI/4,显示更多的角度刻度
azimuth_units='PI radians',
#azimuth_compact_fraction=True,
#azimuth_offset=PI/4,
#azimuth_direction='CCW',
#azimuth_label_buff=0.9,
azimuth_label_font_size=33.6,
radius_config={"font_size": 33.6},
#radius_config={"color": BLUE},
#background_line_style={"stroke_color": GREY_A, "stroke_width":10},
#faded_line_style={"stroke_color": GREY_B, "stroke_width": 0.5},
#faded_line_ratio=0.5,
#make_smooth_after_applying_functions=True
).add_coordinates()
self.add(polar_plane)
r = 1
theta = PI / 5
x = r * np.cos(theta)
y = r * np.sin(theta)
point = np.array([x, y, 0])
dot = Dot(point, color=YELLOW)
self.add(dot)
angle_label = MathTex(r"\theta = \frac{\pi}{5}").next_to(dot, UP)
self.add(angle_label)
%manim -qm -v WARNING PolarPlaneExample1122
运行结果:
示例2:
from manim import *
class PolarPlaneExample2222(Scene):
def construct(self):
# 创建极坐标平面
polar_plane = PolarPlane(azimuth_units="PI radians",
size=6,
azimuth_label_font_size=33.6,
radius_config={"font_size": 33.6}).add_coordinates()
# 添加背景线条
self._init_background_lines(polar_plane)
# 获取轴并添加
axes = polar_plane.get_axes()
self.add(axes)
# 获取坐标标签并添加
coordinate_labels = polar_plane.get_coordinate_labels()
#self.add(coordinate_labels)
# 进行一些动画
self.play(Create(polar_plane))
self.wait(2)
def _init_background_lines(self, polar_plane):
# 使用 _get_lines() 生成背景线条
non_faded_lines, faded_lines = polar_plane._get_lines()
# 添加非淡化线条
self.add(non_faded_lines)
# 添加淡化线条
self.add(faded_lines)
运行结果: