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

📄 geometry.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
字号:
//////////////////////////////////////////////////////////////////////////////// Filename    : Geometry.cpp// Written by  : excel96// Description : //////////////////////////////////////////////////////////////////////////////#include "Geometry.h"#include <stdlib.h>uint getPointsFromLine(int x1, int y1, int x2, int y2, list<POINT>& rList){// Draw line in surface 	double xStep, yStep, X, Y;	int xLength, yLength, xCount, yCount, tmp;	xLength = abs(x2 - x1);	yLength = abs(y2 - y1);	if (xLength == 0)	{		return getPointsFromVLine(y1, y2, x1, rList);	}	else if (yLength == 0)	{		return getPointsFromHLine(x1, x2, y1, rList);	}	else if (xLength > yLength)	{		if(x1 > x2)		{			SWAP(x1, x2, tmp);			SWAP(y1, y2, tmp);		}		yStep = (double)(y2 - y1) / (double)(x2 - x1);		Y = y1;		for (xCount = x1; xCount <= x2; xCount++)		{			// 付瘤阜 痢捞扼搁 扁匡扁甫 公矫窍绊,			// 碍力肺 付瘤阜 谅钎甫 笼绢持绰促.			if (xCount == x2)			{				rList.push_front(POINT(x2, y2));			}			else			{				rList.push_front( POINT(xCount, (int)Y) );				Y += yStep;			}		}	}	else	{		if (y1 > y2)		{			SWAP(x1, x2, tmp);			SWAP(y1, y2, tmp);		}		xStep = (double)(x2 - x1) / (double)(y2 - y1);		X = x1;		for (yCount = y1; yCount <= y2; yCount++)		{			if (yCount == y2)			{				rList.push_back(POINT(x2, y2));			}			else			{				rList.push_front( POINT((int)X, yCount) );				X += xStep;			}		}	}	return rList.size();}uint getPointsFromVLine(int y1, int y2, int X, list<POINT>& rList){	int temp;	if (y1 > y2) SWAP(y1, y2, temp);	for (int i=y1; i <= y2; i++) rList.push_front(POINT(X, i));	return rList.size();}uint getPointsFromHLine(int x1, int x2, int Y, list<POINT>& rList){	int temp;	if (x1 > x2) SWAP(x1, x2, temp);	for(int i = x1; i <= x2; i++) rList.push_front(POINT(i, Y));	return rList.size();}uint getPointsFromLineEx(int x1, int y1, int x2, int y2, int range, list<POINT>& rList){	int xLength, yLength, nx2, ny2;	xLength = abs(x2 - x1);	yLength = abs(y2 - y1);	if (xLength == 0)	{		return getPointsFromVLineEx(y1, y2, x1, range, rList);	}	else if (yLength == 0)	{		return getPointsFromHLineEx(x1, x2, y1, range, rList);	}	else if (xLength > yLength)	{		//cout << "xLength:" << xLength << endl;		// 泅犁狼 X 辨捞啊 荤沥芭府焊促 辨促搁 弊成 急阑 弊绢辑 府畔茄促. 		if (xLength >= range) return getPointsFromLine(x1, y1, x2, y2, rList);		// 葛磊鄂 辨捞甫 备茄促.		int xoffset = range - xLength;		//cout << "xOffset:" << xoffset << endl;		if (x1 < x2) nx2 = x2 + xoffset;		else         nx2 = x2 - xoffset;		//cout << "nx2:" << nx2 << endl;		double yoffset = (double)(y2 - y1) / (double)(x2 - x1) * (double)xoffset;		//cout << "yOffset:" << yoffset << endl;		if (y1 < y2) ny2 = y2 + abs((int)yoffset);		else         ny2 = y2 - abs((int)yoffset);		//ny2 = y2 - (int)yoffset;		//cout << "ny2:" << ny2 << endl;		getPointsFromLine(x1, y1, nx2, ny2, rList);	}	else	{		//cout << "yLength:" << yLength << endl;		// 泅犁狼 Y 辨捞啊 荤沥芭府焊促 辨促搁 弊成 急阑 弊绢辑 府畔茄促. 		if (yLength >= range) return getPointsFromLine(x1, y1, x2, y2, rList);		// 葛磊鄂 辨捞甫 备茄促.		int yoffset = range - yLength;		//cout << "yOffset:" << yoffset << endl;		if (y1 < y2) ny2 = y2 + yoffset;		else         ny2 = y2 - yoffset;		//cout << "ny2:" << ny2 << endl;		double xoffset = (double)(x2 - x1) / (double)(y2 - y1) * (double)yoffset;		//cout << "xOffset:" << xoffset << endl;		if (x1 < x2) nx2 = x2 + abs((int)xoffset);		else         nx2 = x2 - abs((int)xoffset);		//nx2 = x2 - (int)xoffset;		//cout << "nx2:" << nx2 << endl;		getPointsFromLine(x1, y1, nx2, ny2, rList);	}	// getPointsFromLineEx()绰 x^2 + y^2 = r^2苞 y = ax狼 背痢阑 茫酒辑,	// 盔痢俊辑 背痢鳖瘤狼 谅钎甸阑 府胶飘肺 府畔窍绰 窃荐牢单,	// 舅绊府硫 惑俊辑狼 巩力肺 牢秦 (x2,y2), 溜 贸澜俊 格钎肺 沁带 	// 谅钎啊 狐瘤绰 版快啊 积辨 荐 乐促.	// 捞繁 版快甫 规瘤窍扁 困秦辑 府胶飘俊 盔贰 格钎 谅钎啊 绝促搁,	// 笼绢持绢 霖促.	bool bAdd = true;	list<POINT>::iterator itr = rList.begin();	for (; itr != rList.end(); itr++)	{		if (((*itr).x == x2) && ((*itr).y == y2))		{			bAdd = false;			break;		}	}	if (bAdd)	{		rList.push_front(POINT(x2, y2));	}	return rList.size();}uint getPointsFromVLineEx(int y1, int y2, int X, int range, list<POINT>& rList){	int yLength = abs(y2 - y1);	if (yLength < range)	{		if (y2 > y1) y2 = y2 + range - yLength;		else         y2 = y2 - range + yLength;	}	return getPointsFromVLine(y1, y2, X, rList);}uint getPointsFromHLineEx(int x1, int x2, int Y, int range, list<POINT>& rList){	int xLength = abs(x2 - x1);	if (xLength < range)	{		if (x2 > x1) x2 = x2 + range - xLength;		else         x2 = x2 - range + xLength;	}	return getPointsFromHLine(x1, x2, Y, rList);}

⌨️ 快捷键说明

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