资源简介
设计和实现一个图形函数库,具有绘制直线段、任意圆弧、椭圆弧、多边形区域的阴影填充和颜色填充等功能。
代码片段和文件信息
#include
#include
#include
void DDA(HDC hdcint x0int y0int xnint yn)
{
/*确定增量dxdy*/
int max;
double dxdy;
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=x0yi=y0;
int pix_x=floor(xi)pix_y=floor(yi);
SetPixel(hdcpix_xpix_yRGB(232423));
for(int i=0;i!=max;++i){
xi+=dx;
yi+=dy;
pix_x=floor(xi);
pix_y=floor(yi);
SetPixel(hdcpix_xpix_yRGB(232423));
}
}
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) YRGB(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 if(array[i][0]>array[i+1][0]){
int temp;
temp=array[i][0];
array[i][0]=array[i+1][0];
array[i+1][0]=temp;
temp=array[i][1];
array[i][1]=array[i+1][1];
array[i+1][1]=temp;
changed=true;
}
}
n++;
}while(changed);
}
void shadowFill(HDC hdcint P[][2]int mnint mdouble hdouble a)
{
const double k=1.0;
const double db=3.0;
double B[8][2];
int ij;
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]=B[i][1];
B[i][1]=temp;
}
}
B[m-1][0]=(double)(P[m-1][1]-k*P[m-1][0]);
B[m-1][1]=(double)(P[0][1]-k*P[0][0]);
if(B[m-1][0]>B[m-1][1]){
double temp=B[m-1][0];
B[m-1][0]=B[m-1][1];
B[m-1][1]=temp;
}
for(i=m;(i+1)<=(mn-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
相关资源
- 交互式计算机图形学 第六版 OpenGL源代
- MFC 圆弧算法的实现
- 计算机图形学走样反走样时钟
- 西北工业大学软件学院计算机图形学
- 计算机图形学实验源代码中南民族大
- 绘制任意斜率的直线段
- 计算机图形学简单CAD系统
- 计算机图形学多边形种子填充算法
- 计算机图形学 消隐
- 计算机图形学作业,中点算法画椭圆
- MFC中点圆的生成算法
- 北京邮电大学大一C++期末考题.zip
- 改进的有效边表算法--计算机图形学
- 最好的CS游戏opengl、C++实现
- 计算机图形学 清华大学教材 及 vc++
- 孔令德的计算机图形学实验及课程设
- c++计算机图形编程-简易绘图程序
- 计算机图形学大作业参考代码(VC版)
- 计算机图形学 图形变换 C++ MFC
- 用visual C++ 6.0编写的计算机图形的一些
- 计算机图形学简单多边形裁剪程序
- 计算机图形学 大作业 多功能图形学程
- MFC多边形画法--计算机图形学
- 计算机图形学 visual c++ 6.0 实时动画有
- 计算机图形学 visual c++ 6.0 三维变换有
- 计算机图形学基于opengl图形变换源代
- 计算机图形学大作业简易绘图板mfc
- 计算机图形学OPENGL 动画代码
- 计算机图形学画线、画圆、种子填充
- vc6.0实现的计算机图形学各种算法源代
评论
共有 条评论