""" 正弦演绎.py,正弦是三角形一个锐角的对边长度除以斜边长度的值, 而余弦则是邻边长度除以斜边长度的值,请修改程序,显示余弦值, 余弦记作cos(angle) """ import time import turtle from sympy import * def mark(w,pos,char,bg,fg): """标注一个符号在圆点上,pos:坐标,char:字符,bg:背景色,fg:前景色""" c = w.pencolor() # 记录画笔颜色 w.penup() w.goto(pos) w.pencolor(fg) w.dot(20,bg) w.sety(w.ycor()-8) w.setx(w.xcor()+2) w.write(char,align='center',font=('',12,'normal')) w.sety(w.ycor()+8) w.setx(w.xcor()-2) w.pencolor(c) def draw_line(w,l): p1,p2 = l.points p1,p2 = p1.evalf(),p2.evalf() w.penup() w.goto(p1) w.pd() w.goto(p2) w.pu() def draw_arc(w,radius,angle): """w是海龟,radius是弧的半径,angle是角度""" w.home();w.fd(radius);w.left(90) w.pd();w.circle(radius,angle);w.pu() turtle.tracer(0,0) turtle.speed(0);turtle.ht() turtle.fd(300);turtle.stamp();turtle.bk(600);turtle.fd(300); turtle.left(90) turtle.fd(300);turtle.stamp();turtle.bk(600);turtle.home() p0 = Point(0,0) ab = Segment(p0,Point(250,0)) # 线段 turtle.sety(200);turtle.write('正 弦 演 绎',align='center',font=('',22,'bold')) w = turtle.Turtle('blank') w.speed(0) draw_line(w,ab) for angle in range(1,61): # 角度制的度数 w.clear() ac = ab.rotate(angle*3.1415926/180,p0) # 绕p0旋转(如果用pi,会很慢) C = ac.points[1] # C点 B = Point(C.x,0) # B点 cb_len = C.y # cb的长度就是C点y坐标 value = cb_len / ac.length # 角CAB的正弦值,对边/斜边 value = value.evalf() draw_line(w,ac) draw_line(w,Line(C,B)) draw_arc(w,20,angle) w.goto(0,-100) s = "sin(" + str(angle) + ")= BC/AC = " + str(value) w.write(s,align='center',font=('',14,'normal')) mark(w,(-15,-15),"A","blue","white") mark(w,(B.x,-15),"B","blue","white") mark(w,(C.x,C.y+15),"C","blue","white") turtle.update()
李兴球
李兴球的博客是Python创意编程原创博客
要发表评论,您必须先登录。
发表评论