⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 graphalgorithm.cpp

📁 处理机调度
💻 CPP
字号:
#include <Windows.h>
#include <stdlib.h>
#include <math.h>
#include "GraphAlgorithm.h"
void DDALine(float x1,float y1,float x2,float y2,int color,HDC hdc)
{
	float m;
	float dx,dy;
	float x,y;
	
	int i,iterUp;
	
	x1=(int)(x1+0.5);
	y1=(int)(y1+0.5);
	
	x=x1;
	y=y1;
	
	dx=x2-x1;
	dy=y2-y1;
	
	if(fabs(dx)>=fabs(dy))
	{
		m=dy/dx;
		iterUp=(int)fabs(dx);
	}
	else
	{
		m=dx/dy;
		iterUp=(int)fabs(dy);
	}
	
	i=0;
	while(i<iterUp)
	{	
		SetPixel(hdc,x,y,color);
		if(fabs(dx)>=dy)
		{
			y=y+m;
			x++;
		}
		else
		{
			x=x+m;
			y++;
		}
		i++;
	}
}

void MIDLine(float x1,float y1,float x2,float y2,float xOffset,float yOffset,int color,HDC hdc)
{
	float a,b;
	float deta1,deta2;
	float d;
	float x,y;
	float k;
	int i,iterUp;
	float tmp;
	int pattern=1;
	
	
	/*
		to adjust to the different k value.
	*/	
	k=(y2-y1)/(x2-x1);	
		if(k<-1)
		{
			pattern=0;
			reValuePoint(&x1,y1,&y1,-x1);
			reValuePoint(&x2,y2,&y2,-x2);
		}
		else if(k<0)
		{
				reValuePoint(&x1,x1,&y1,-y1);
				reValuePoint(&x2,x2,&y2,-y2);	
		}
		else if(k<=1||y1==y2)/*including x1==x2*/
		{
			/*
				do nothing.
			*/
		
		}
		else if(k>1||x1==x2)/*k>1 including y1==y2*/
		{
			pattern=0;
					reValuePoint(&x1,y1,&y1,x1);
					reValuePoint(&x2,y2,&y2,x2);	
		}
	
		/*let x1<=x2*/
		if(x1>x2)
		{
			swapFloat(&x1,&x2);
			swapFloat(&y1,&y2);
		}
	
	

	/*data init*/
	a=y1-y2;
	b=x2-x1;
	
	d=2*a+b;//init d
	deta1=2*a;	//if d>0   ,d+=deta1
	deta2=2*(a+b);  //if d<=0,d+=deta2
	
	//start draw point
	x=x1;
	y=y1;
	
	i=0;
	iterUp=fabs(b);
	while(i<iterUp)
	{
		if(pattern==1)
			SetPixel(hdc,x+xOffset,y+yOffset,color);
		else if(pattern==0)
			SetPixel(hdc,y+yOffset,x+xOffset,color);
		if(d<0)
		{
			x+=1;
			y+=1;
			d+=deta2;
		}
		else
		{
			x+=1;
			//y+=0;
			d+=deta1;
		}
		i++;
	}
}


void BresenhamLine(float x1,float y1,float x2,float y2,int color,HDC hdc)
{
	float P;//pan ding value
	int i,iterUp;
	float dy,dx;
	float x,y;
	
	dy=y2-y1;
	dx=x2-x1;
	//data init
	x=x1;
	y=y1;
	
	if(fabs(dx)>fabs(dy))
	{
		P=2*dy-dx;
		iterUp=fabs(dx);
	}
	else
	{
		P=2*dx-dy;
		iterUp=fabs(dy);
	}
	
	i=0;
	if(fabs(dx)>fabs(dy))
	{
		while(i<iterUp)
		{
			if(P<0)
			{
				SetPixel(hdc,x+1,y,color);
				x++;
				P+=2*dy;
			}
			else
			{
				SetPixel(hdc,x+1,y+1,color);
				x++;
				y++;
				P+=2*dy-2*dx;
			}
			i++;
		}
	}
	else
	{	while(i<iterUp)
		{
			if(P<0)
			{
				SetPixel(hdc,x,y+1,color);
				y++;
				P+=2*dx;
			}
		else
			{
				SetPixel(hdc,x+1,y+1,color);
				x++;
				y++;
				P+=2*dx-2*dy;
			}
			i++;
		}			
	}
}

void MidCircle(float x,float y,float r,int color,HDC hdc)
{
	float Fn;
	float mX,mY;
	
	mX=0;
	mY=r;
	
	Fn=1-r;
	while(mX<=mY)
	{
		//up half circle.
		SetPixel(hdc,mX+x,mY+y,color);
		SetPixel(hdc,mY+y,mX+x,color);
		SetPixel(hdc,-mX+x,mY+y,color);
		SetPixel(hdc,mY+y,-mX+x,color);
		//down half circle.
		SetPixel(hdc,mX+x,-mY+y,color);
		SetPixel(hdc,-mY+y,mX+x,color);
		SetPixel(hdc,-mX+x,-mY+y,color);
		SetPixel(hdc,-mY+y,-mX+x,color);
		if(Fn<0)
		{
			mX+=1;
			Fn+=2*mX+1;
		}
		else
		{
			mX+=1;
			mY-=1;
			Fn+=2*mX+1-2*mY;
		}
	}
}

void swapFloat(float* x,float* y)
{
	float tmp;
	tmp=*x;
	*x=*y;
	*y=tmp;
}

void reValuePoint(float* oldX,float newX,float* oldY,float newY)
{
		*oldX=newX;
		*oldY=newY;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -