#include <gl/glut.h>
#include <bits/stdc++.h>
using namespace std;
#define Windowshigh 400 //窗口高度
#define Windowsweight 400 //窗口宽度
const int INF = 0x3f3f3f3f; //无穷大
#define eps 1e-6 //极小量
typedef struct Point {
int x, y;
Point() {
x = y = 0; }
Point(int m_x, int m_y) :x(m_x), y(m_y) {
}
double operator / (const Point& b)const {
if (x == b.x) return INF / 1.0;
return (b.y * 1.0 - y * 1.0) * 1.0 / (b.x * 1.0 - x * 1.0) * 1.0;
}
void Swap() {
swap(x, y); }
}Point;
void draw(Point a, Point b, bool flag_k0, bool flag_k1) {
//标准的Bresenham算法,flag_k0用于标记k是否小于0,flag_k1用于标记abs(k)是否小于1
int deltax = b.x - a.x, deltay = b.y - a.y;
int d = deltax - 2 * deltay;
while (a.x <= b.x) {
if (flag_k0) {
flag_k1 ? glVertex2i(a.x, -a.y) : glVertex2i(-a.y, a.x);
}
else {
flag_k1 ? glVertex2i(a.x, a.y) : glVertex2i(a.y, a.x);
}
++a.x;
if (d < 0) d += 2 * (deltax - deltay);
else d -= 2 * deltay, ++a.y;
}
}
void MidBhline(int x0, int y0, int</
通用的Bresenham算法实现(线、圆、椭圆)
最新推荐文章于 2023-02-13 14:38:25 发布