〔manim教程〕第二講 manim常用幾何類 學習筆記


?
00:44
?- 直線類Line
- 箭頭類Arrow
- add_tip等方法
#默認情況它下是二維坐標下從(-1,0)到(1,0)的一條線段 line_1=Line() #現(xiàn)在傳入兩個坐標,改變Line的起止位置 line_1=Line(np.array([-4,-3,0]),np.array([0,3,0])) #當然還可以傳入buff參數(shù)來調整與目標點的距離 line_1=Line(np.array([-4,-3,0]),np.array([0,3,0]),buff=0) #傳入stroke_width參數(shù)調整線的寬度 line_1=Line(np.array([-4,-3,0]),np.array([0,3,0]),stroke_width=6) #使用put_start_and_end_on可以以兩點確定一條直線 line_1.put_start_and_end_on(np.array([-2,2,0]),np.array([0,-2,0])) #對Line使用scale,只會改變其長度,而不會改變其粗細 line_1.scale(3) #虛線 line_2=DashedLine(np.array([-2,-2,0]),np.array([0,2,0])) #Line還有一個參數(shù):path_arc,可以將直線變成弧線 path_arc即為弧線的圓心角 line_3=Line(np.array([-2,-2,0]),np.array([-2,2,0]),path_arc=None)
Arrow繼承于Line類,只是在Line的基礎上在尾部加了箭頭
line_1=Line(np.array([-4,-2,0]),np.array([-4,2,0])) line_1.add_tip() vec_1=Arrow(np.array([-2,-2,0]),np.array([-2,2,0]))
Arrow參數(shù)
vec_1=Arrow(np.array([-2,-2,0]),?np.array([-2,2,0]),?buff=0,?tip_length=%.2f) vec_1=Arrow(np.array([-2,-2,0]), np.array([-2,2,0]),buff=0,max_tip_length_to_length_ratio=%.2f)
Vector
#由原點開始的向量 vec_1=Vector(UP*2+LEFT*1) #DoubleArrow可以表示雙箭頭 vec_2=DoubleArrow(np.array([-2,-2,0]),np.array([-1,0,0])) #圓弧Arc也可以添加箭頭 arc_1=Arc(angle=TAU/3).add_tip() arc_1.add_tip(at_start=True) #使用TangentLine可以給物件作切線,alpha取值范圍為0到1 cir=Circle() line=TangentLine(cir, alpha=%.2f,?length=5)
?
03:01
?- 圓弧類Arc
- Arc的常用子類
Arc類用來繪制圓弧
arc=Arc(arc_center=ORIGIN, radius=1.0, stroke_width=4.0, start_angle=0*DEGREES, angle=90*DEGREES, color=BLACK) self.add(arc)
Arc的子類
- AnnularSector()
- ArcBetweenPoints(p1,p2,angle)
- CurvedArrow(p1,p2,angle)
- CurvedDoubleArrow(p1,p2,angle)
- Circle()
?
05:02
?- 圓類Circle和點類Dot
- 橢圓類Ellipse
Circle繼承自Arc
circle=Circle( arc_center=ORIGIN, radius=1.0, stroke_width=4.0, stroke_color=RED, fill_color=RED, fill_opacity=0.0 ) self.add(circle)
Dot 繼承自Circle
dot=Dot( arc_center=ORIGIN, radius=0.08, stroke_width=0, fill_color=RED, fill_opacity=1 )
Ellipse繼承自Circle 用于繪制橢圓
ellipse=Ellipse( width=1.0, height=2.0, arc_center=2.0, radius=1, stroke_width=4, fill_color=RED, fill_opacity=0.0, ) self.add(ellipse)
?
07:11
?- Annulus 圓環(huán)
- AnnularSector 環(huán)狀扇形
- Sector 扇形
圓環(huán)
annulus = Annulus( outer_radius = 3, inner_radius = 2.5, fill_color = BlUE, fill_opacity=0.6, stroke_color = YELLOW )
環(huán)狀扇形
ann_sec = AnnularSector( outer_radius=3, inner_radius=2.5, start_angle=PI/6, angle=PI/3, fill_color=BLUE, fill_opacity=0.6, stroke_width=10, stroke_color=YELLOW )
扇形
sector = Sector( outer_radius=3, start_angle=PI/6, angle=PI/3, fill_color=BLUE, fill_opacity=0.6, stroke_width=10, stroke_color=YELLOW, )
?
09:23
?manim中通過點的位置來確定多邊形的形狀與位置
p1 = np.array([-1, 0, 0]) p2 = np.array([-1, 1.25, 0]) p3 = np.array([1, 0, 0]) triangle = Polygon(p1, p2, p3) triangle.set_fill(color=ORANGE, opacity=0.8) triangle.set_fill(opacity=0.2) triangle.set_stroke(color=ORANGE,width=2) triangle.round_corners(0.2)
更多時候我們需要的是規(guī)則正多邊形
Reghep= RegularPolygon(7) Hexagon = RegularPolygon(6) Pentagon = RegularPolygon(5) Regtri = Triangle()
?
10:17
?rectangle = Rectangle( height=2, width=3, fill_color="#66ccff", fill_opacity=1.0, stroke_color=PURPLE_C, stroke_width=20, stroke_opacity=1, sheen_facor=0.2, sheen_direction=UR, )
Square正方形
square = Square(side_length=4) # (dafault)side_length=2.0 square.set_height(3) square.set_width(5) square.set_height(3,stretch=True)
RoundedRectangle使長方形的四個角變得圓滑
roundedrec = RoundedRectangle( #(default)corner_radius=0.5 corner_radius=0.5 ) #(Rectangle)corner_radius=0 rec=Rectangle(height=3,width=4) rec.round_corners(1.5)
?
13:12
?- list與VGroup的區(qū)別與聯(lián)系
- VGroup的常用方法
VGroup類似list
a = [0,1,2] a.append(3) a.remove(2)
VGroup
b = VGroup(mob0,mob1,mob2) b.add(mob3) b.add_to_back(mob) b.remove(mob2)
VGroup整體也是VMobject
vg = VGroup(a,b,c) vg.shift(UP) vg[0].shift(DOWN*2) b.shift(DOWN) vg.arrange(DOWN,center=True,aligned_edge=LEFT).shift(LEFT*3)
VGroup可嵌套
vg = VGroup(a,b,c) vg2 = VGroup(d,e) VG = VGroup(vg,vg2)
標簽: