计算机图形学实验二:圆的中点坐标算法+Bresenham算法及椭圆的中点坐标算法
解救众多被计算机图形学实验所困扰的学生党们,本博客仅粘贴代码,圆的中点坐标算法+Bresenham算法及椭圆的中点坐标算法的原理请自行百度或Google,网上从来不缺原理。
ps :本代码属于硬核坐标放大,改进版坐标放大的方法请看博主另一篇博客计算机图形学实验三:多边形填充算法之活性边表方法实现中的坐标放大方法,比这里面的放大方法好了不下100倍!只是博主做完实验一身轻松,就不想再倒回去折腾了,你们就自己动手改吧,不然就用我这个硬核坐标放大也是没有问题的,就是解释器爱稍微麻烦了一点。
代码在此,参考为上,借鉴最佳
#include "pch.h"
#include <iostream>
#include<GL/glut.h>
#include<math.h>
#include<Windows.h>
const int WindowWidth = 800, WindowHeight = 800;
//中点坐标画圆算法
void CenterCircle(int x0, int y0, int r) {
//x0,y0,x1,y1是圆点坐标,椭圆没有考虑,但方法一样,很简单
int x1 = 0, y1 = r * 20;
int dk = 500 - y1 * 20; //dk = 1.25 - y1 <- dk = 2x1 - y1 + 1.25
int x2 = x1, y2 = y1;
int tempx = x2, tempy = y2;
glVertex2i(x2 + x0 * 20, y2 + y0 * 20);
glVertex2i(-x2 + x0 * 20, -y2 + y0 * 20);
glVertex2i(y2 + x0 * 20, x2 + y0 * 20);
glVertex2i(-y2 + x0 * 20, -x2 + y0 * 20);
glVertex2i(x2 + x0 * 20, -y2 + y0 * 20);
glVertex2i(-x2 + x0 * 20, y2 + y0 * 20);
glVertex2i(y2 + x0 * 20, -x2 + y0 * 20);
glVertex2i(-y2 + x0 * 20, x2 + y0 * 20);
for (; x2 <= y2 ;) {
if (dk < 0) {
tempx = x2, tempy = y2;
x2 = x2 + 20;
glVertex2i(x2 + x0 * 20, y2 + y0 * 20);
glVertex2i(-x2 + x0 * 20, -y2 + y0 * 20);
glVertex2i(y2 + x0 * 20, x2 + y0 * 20);
glVertex2i(-y2 + x0 * 20, -x2 + y0 * 20);
glVertex2i(x2 + x0 * 20, -y2 + y0 * 20);
glVertex2i(-x2 + x0 * 20, y2 + y0 * 20);
glVertex2i(y2 + x0 * 20, -x2 + y0 * 20);
glVertex2i(-y2 + x0 * 20, x2 + y0 * 20);
dk = dk + 40 * tempx + 1200; //dk = dk + 2 * tempx + 3
}
else {
tempx = x2, tempy = y2;
x2 = x2 + 20;
y2 = y2 - 20;
glVertex2i(x2 + x0 * 20, y2 + y0 * 20);
glVertex2i(-x2 + x0 * 20, -y2 + y0 * 20);