计算机图形学作业-运用数值微分法和中点作圆法使用Python的OpenGL库画出时钟

来源:互联网 发布:suse linux 扩磁盘 编辑:程序博客网 时间:2024/05/19 23:10
from OpenGL.GL import *  from OpenGL.GLU import *  from OpenGL.GLUT import * from math import *import time  def Display():    glClear(GL_COLOR_BUFFER_BIT)    glBegin(GL_POINTS)    MidCircle(0,0,15)    glEnd()    PI=3.1415926       R=15      TR=R-1    glLineWidth(2)      for i in range(100):          DrawLines(TR*sin(2*PI/12*i),TR*cos(2*PI/12*i),R*sin(2*PI/12*i),R*cos(2*PI/12*i))    h_Length=5      m_Length=8      s_Length=12     count=60.0      s_Angle=s/count      count*=60      m_Angle=(m*60+s)/count      count*=12      h_Angle=(h*60*60+m*60+s)/count      glLineWidth(1)    DrawLines(0.0,0.0,s_Length*sin(2*PI*s_Angle),s_Length*cos(2*PI*s_Angle))      glLineWidth(5)      DrawLines(0.0,0.0,h_Length*sin(2*PI*h_Angle),h_Length*cos(2*PI*h_Angle))      glLineWidth(3)      DrawLines(0.0,0.0,m_Length*sin(2*PI*m_Angle),m_Length*cos(2*PI*m_Angle))       glLineWidth(1)    glBegin(GL_POLYGON)       for i in range(100):          glVertex2f(0.03*cos(2*PI/100*i),0.03*sin(2*PI/100*i));        glEnd()    glFlush() def MidCircle(x0,y0,r): #中点画圆法作圆    x=x0    y=y0+r     deltax=3     deltay=2-r-r      d=1-r    glVertex2i(x,y)    while(x<y):          if(d<0):              d=d+deltax              deltax=deltax+2              x=x+1        else:             d=d+deltax+deltay              deltax=deltax+2              deltay=deltay+2              x=x+1             y=y-1        glVertex2i(x,y)          glVertex2i(y,x)          glVertex2i(x,y0+y0-y)          glVertex2i(y0+y0-y,x)          glVertex2i(x0+x0-x,y)          glVertex2i(y,x0+x0-x)          glVertex2i(x0+x0-x,y0+y0-y)          glVertex2i(y0+y0-y,x0+x0-x)def DrawLines(x0,y0,xn,yn): #数值微分法画直线    dx = float(xn) - float(x0)      dy = float(yn) - float(y0)      steps = 0      deltaX = 0      deltaY = 0      x = x0      y = y0      if(abs(dx) > abs(dy)):        steps = int(fabs(dx)*100)      else:           steps = int(fabs(dy)*100)    deltaX = dx / float(steps)    deltaY = dy / float(steps)    glBegin(GL_POINTS)      for i in range(steps):          x += deltaX          y += deltaY          glVertex2f(x, y)      glEnd()  h=0  m=0  s=0def Update():     global h,m,s      t=time.localtime(time.time())      h=int(time.strftime('%H',t))      m=int(time.strftime('%M',t))      s=int(time.strftime('%S',t))      glutPostRedisplay() glutInit()glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB)glutInitWindowPosition(200,200)glutInitWindowSize(400,400)glutCreateWindow("Three Window")glOrtho(-20,20,-20,20,1.0,-1.0)glutDisplayFunc(Display)glutIdleFunc(Update)  glutMainLoop()
0 0