计算机图形学实验python——圆的中点、正负算法

圆弧终点

from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *

def zhong(R):
    x = 0
    yr = R
    d = 5/4 - R
    glBegin(GL_POINTS)
    while yr >= x:
        yuan(x,yr)
        if d <= 0:
            d = d + 2 * x + 3
        else:
            d = d + 2 * (x - yr) + 5
            yr -= 1
        x += 1
    glEnd()
    glFlush()

def yuan(x,y):
    glVertex2i(x,y)
    glVertex2i(-x,-y)
    glVertex2i(-x,y)
    glVertex2i(x,-y)
    glVertex2i(y,-x)
    glVertex2i(-y,x)
    glVertex2i(-y,-x)
    glVertex2i(y,x)

def Display():
    glColor3f(1.0, 0.0, 0.0)
    glPointSize(7)
    #glEnable(GL_POINT_SMOOTH)
    zhong(30)



def main():
    glutInit()
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA)
    glutInitWindowSize(700, 700)
    glutCreateWindow("zhong")
    gluOrtho2D(-50,50,-50,50)
    glClearColor(1.0,1.0,1.0,0)
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    glutDisplayFunc(Display)
    glutMainLoop()
main()

运行结果

圆弧正负

from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *



def zhengfu(R):
    D = 1
    x = 0
    y = R
    glBegin(GL_POINTS)
    yuan(x,y)
    x = 1
    yuan(x,y)
    while y >= 0:
        if D >= 0:
            D = D - 2 * y + 1
            y -= 1
        else:
            D = D + 2 * x + 1
            x += 1
        yuan(x,y)
    glEnd()
    glFlush()

def yuan(x,y):
    glVertex2i(x,y)
    glVertex2i(-x,-y)
    glVertex2i(-x,y)
    glVertex2i(x,-y)

def Display():
    glColor3f(1.0, 0.0, 0.0)
    glPointSize(10)
    #glEnable(GL_POINT_SMOOTH)
    zhengfu(20)



def main():
    glutInit()
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA)
    glutInitWindowSize(800, 800)
    glutCreateWindow("zhong")
    gluOrtho2D(-40,40,-40,40)
    glClearColor(1.0,1.0,1.0,0)
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    glutDisplayFunc(Display)
    glutMainLoop()
main()

运行结果

不太好看

椭圆中点

from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *


def zhong(a,b):
     r = (a**2 + b**2)**(1/2)
     midx = int((a**2)/r + 0.5)
     midy = int((b**2)/r + 0.5)
     x = 0
     yr = int(b + 0.5)
     d = 4 * b**2 - 4 * a**2 * b + a**2
     glBegin(GL_POINTS)
     while x <= midx:
          tuoyuan(x,yr)
          if d > 0:
               yr -= 1
               d = d + 4 * b**2 * (2*x + 3) - 8 * a**2 * yr
          else:
               d = d + 4 * b**2 * (2*x + 3)
          x += 1

     xr = int(a + 0.5)
     y = 0
     d = 4 * a**2 - 4 * a * b**2 + b**2
     while y <= midy:
          tuoyuan(xr, y)
          if d > 0:
               xr -= 1
               d = d + 4 * a**2 * (2*y + 3) - 8 * b**2 * xr
          else:
               d = d + 4 * a**2 * (2*y + 3)
          y += 1
     glEnd()
     glFlush()
          
def tuoyuan(x,y):
     glVertex2i(x,y)
     glVertex2i(x,-y)
     glVertex2i(-x,-y)
     glVertex2i(-x,y)


     
def Display():
     glColor3f(1.0,0.0,0.0)
     glPointSize(8)
     zhong(35,20)


def main():
    glutInit()
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA)
    glutInitWindowSize(800, 800)
    glutCreateWindow("zhong")
    gluOrtho2D(-50,50,-50,50)
    glClearColor(1.0,1.0,1.0,0)
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    glutDisplayFunc(Display)
    glutMainLoop()
main()

运行结果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值