• 大小: 12KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-06-10
  • 语言: C/C++
  • 标签: 北邮  图形学  

资源简介

设计和实现一个图形函数库,具有绘制直线段、任意圆弧、椭圆弧、多边形区域的阴影填充和颜色填充等功能。(仅调用画点函数) Windows API: setpixel(hdc,x,y,color)

资源截图

代码片段和文件信息

#include 
#include 
#include
void DDA(HDC hdc int x0 int y0 int xn int yn)
{
/*确定增量dxdy*/
double max;
double dx dy;
int d_x = abs(xn - x0);
int d_y = abs(yn - y0);
if (d_x >= d_y)
max = d_x;
else
max = d_y;
dx = (xn - x0) / max;
dy = (yn - y0) / max;
/*绘点*/
double xi = x0 yi = y0;
int pix_x = floor(xi) pix_y = floor(yi);
SetPixel(hdc pix_x pix_y RGB(23 24 23));
for (int i = 0; i != max; ++i){
xi += dx;
yi += dy;
pix_x = floor(xi);
pix_y = floor(yi);
SetPixel(hdc pix_x pix_y RGB(23 24 23));
}

}

void Bresenham(HDC hdc int x1 int y1 int x2 int y2)
{
int x y dx dy e;
dx = abs(x2 - x1);
dy = abs(y2 - y1);
e = 2 * dy - dx;
x = x1;
y = y1;
for (int i = 0; i < dx; i++) {
SetPixel(hdc x y RGB(0 0 0));
if (e >= 0) {
y++;
e = e - 2 * dx;
}
x++;
e = e + 2 * dy;
}

return;
}

void RoundArc(HDC hdc int x int y int r)
{
int X Y d;
X = x;
Y = y - r;
d = (y - Y)*(y - Y) + (Y + 1 - y)*(Y + 1 - y) - 2 * r * r;

while ((X - x) <= (y - Y))
{
if (d >= 0)
{
Y++;
d = d + 4 * (X + Y) - 4 * (x + y) + 10;
}
else
{
d = d + 4 * X - 4 * x + 6;
}

SetPixel(hdc X Y RGB(0 0 0));
SetPixel(hdc (2 * x - X) Y RGB(0 0 0));
SetPixel(hdc X (2 * y - Y) RGB(0 0 0));
SetPixel(hdc (2 * x - X) (2 * y - Y) RGB(0 0 0));
SetPixel(hdc (x + (y - Y)) (y - (X - x)) RGB(0 0 0));
SetPixel(hdc (x + (y - Y)) (y + (X - x)) RGB(0 0 0));
SetPixel(hdc (x - (y - Y)) (y - (X - x)) RGB(0 0 0));
SetPixel(hdc (x - (y - Y)) (y + (X - x)) RGB(0 0 0));

X++;
}
}


void EllipseArc(HDC hdc int x int y int a int b)
{
float t = 0 dt = 0.001;
int x1 = x + a y1 = y x2 y2;
while (t < 2 * 3.14159) {
t += dt;
x2 = x + (int)(a * cos(t));
y2 = y + (int)(b * sin(t));
Bresenham(hdc x1 y1 x2 y2);
x1 = x2;
y1 = y2;
}
}

void bubbleSort(double array[][2] int size)
{
bool changed = true;
int n = 0;
do{
changed = false;
for (int i = 0; i < size - 1 - n; i++){
if (array[i][0] > array[i + 1][0]){
int temp;
temp = (int)array[i][0];
array[i][0] = array[i + 1][0];
array[i + 1][0] = temp;
temp = (int)array[i][1];
array[i][1] = array[i + 1][1];
array[i + 1][1] = temp;
changed = true;
}
}
n++;
} while (changed);
}

#define VERTEX 4 
//void shadowFill(HDC hdcint (&P)[4][2]int mnint mdouble hdouble a)
//void shadowFill(HDC hdcint P[][2]int mnint mdouble hdouble a)
void shadowFill(HDC hdc int(*P)[2] int mn int m double h double a)
{
const double k = a;    //1.0;
const double db = h; //3.0;
double B[VERTEX][2];
int i j;
for (i = 0; (i + 1) <= (m - 1); ++i){
B[i][0] = (double)(P[i][1] - k*P[i][0]);
B[i][1] = (double)(P[i + 1][1] - k*P[i + 1][0]);
if (B[i][0]>B[i][1]){
double temp = B[i][0];
B[i][0] 

评论

共有 条评论