资源简介
设计和实现一个图形函数库,具有绘制直线段、任意圆弧、椭圆弧、多边形区域的阴影填充和颜色填充等功能。(仅调用画点函数)
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]
相关资源
- 北邮数值与符号计算实验 快速傅里叶
- 计算机图形学OpenGL画机器人
- 计算机图形学 多边形裁剪程序
- 图形学实验 二维图形的几何变换
- 计算机图形学 帧动画
- 计算机图形学——球的光照模型算法
- 北邮计算机图形学作业一
- 抛物样条曲线 鼠标操作
- 正轴测投影+旋转
- 西南交通大学计算机图形学实验三,
- 计算机图形学画月亮C语言
- Cohen-Sutherland算法实现
- 计算机图形学 透视图算法
- Bezier曲线算法
- 计算机图形学VSC++生成时钟报告含代码
- 计算机图形学直线段的扫描转换C++实
- Cantor集算法实现
- 开放源码的计算机图形学几何算法包
- 计算机图形学课程设计皮球运动动画
- 计算机图形学考试内容-Opengl-会移动的
- 计算机图形学 课程设计 作业
- 双三次B样条曲面算法 计算机图形学
- 三次B样条曲线算法 计算机图形学 案
- Bezier曲线MFC实现源代码
- 计算机图形学实验之消隐处理
- 计算机图形学——立方体旋转 VC MFC
- 计算机图形学大作业 二维图形变换
- 北京邮电大学大三下计算机图形学作
- 计算机图形学 四面体的消隐
- 使用opengl的图形学大作业
评论
共有 条评论