亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? convex.cpp

?? cnvex hull with algorith graham
?? CPP
字號:
#include "ConvexHull.h"
#include <GL/glut.h>
//#include <GL/glu.h>
#include <iostream>
#include <cmath>
#include <vector>

using namespace std;

TPoint* Convex::ptrArray=NULL;

//GLenum drawingMode = GL_POINTS;

typedef GLfloat TColor[3];

TColor red={1,0,0}, green={0,1,0}, blue={0,0,1};

struct TPointContext
{
	TPoint* pointPtr;
	TColor pointColor;
};

vector<TPointContext> separateVector;
vector<TPointContext> connectVector;

Convex convex;
TPointSet pointSet;


int pointComp(const void* elem1, const void* elem2)
{
	TPoint *ptr1, *ptr2;
	float result;

	ptr1=Convex::ptrArray + *(const int*)(elem1);
	ptr2=Convex::ptrArray + *(const int*)(elem2);
	result= ptr1->x-ptr2->x;
	if (result>0)
	{
		return 1;
	}
	else
	{
		if (result<0)
		{
			return -1;
		}
		else
		{
			return 0;
		}
	}
}

float direction(const TPoint* p, const TPoint* q, const TPoint* r)
{
	return q->x*r->y +p->x*q->y+p->y*r->x - p->y*q->x - q->y*r->x -p->x*r->y;
}

void TPoint::display()
{
	printf("[x=%f,y=%f]\n", x, y);
}

TPointSet::TPointSet()
{
	number=0;
	ptrArray=NULL;
}

void TPointSet::display()
{
	for (int i=0; i<number; i++)
	{
		ptrArray[i].display();
	}
}


TPointSet::~TPointSet()
{
	if (number!=0)
	{
		delete[]ptrArray;
	}
}

void TPointSet::setArray(TPoint* inputArray, int inputNumber)
{
	number=inputNumber;
	ptrArray=new TPoint[number];
	memcpy(ptrArray, inputArray, sizeof(TPoint)*number);
}

float Convex::generateRandomValue()
{
	float intPart, floatPart;
	intPart=rand()%MaxIntegerValue * (rand()%2==0?1 : (-1));
	floatPart=(float)rand()/(float)RAND_MAX;
	return intPart+floatPart;
}

void Convex::generatePoint(int pointNumber)
{
	number=pointNumber;
	TPointContext pointContext;
	ptrArray=new TPoint[number];
	for (int i=0; i<number; i++)
	{
		ptrArray[i].x=generateRandomValue();
		ptrArray[i].y=generateRandomValue();
		pointContext.pointPtr=ptrArray+i;
		memcpy(pointContext.pointColor, red, sizeof(TColor));
		separateVector.push_back(pointContext);
		glutPostRedisplay();			
	}
	//glutPostRedisplay();	
}

//randomly generating points
Convex::Convex()
{
	number=0;
	ptrArray=NULL;	
}

void Convex::sortPoint()
{
	indexArray=new int[number];
	for (int i=0; i<number; i++)
	{
		indexArray[i]=i;
	}
	qsort(indexArray, number, sizeof(int), pointComp);
}

void Convex::addPoint(vector<int>& intVector, int rIndex)
{
	int currentSize;
	int pIndex, qIndex;
	while (intVector.size()>=2)
	{
		currentSize=intVector.size();
		pIndex=intVector[currentSize-2];
		qIndex=intVector[currentSize-1];

		if (direction(ptrArray+pIndex, ptrArray+qIndex, ptrArray+rIndex)>=0)
		{
			intVector.pop_back();
		}
		else
		{			
			break;
		}
	}
	intVector.push_back(rIndex);
}


void Convex::collectVertex(vector<int>& intVector, bool upper)
{
	int index, offset, counter=number-2;

	intVector.clear();
	if (upper)
	{
		index=0;
		offset=1;
	}
	else
	{
		index=number-1;
		offset=-1;
	}

	intVector.push_back(indexArray[index]);
	index+=offset;
	intVector.push_back(indexArray[index]);
	
	while (counter>0)
	{
		index+=offset;

		addPoint(intVector, indexArray[index]);
		counter--;
	}
}


void Convex::display()
{
	for (int i=0; i<number; i++)
	{
		ptrArray[i].display();
	}
}

void Convex::convexHull(TPointSet& pointSet)
{
	int i;
	int upSize, downSize;
	if (number<3)
	{
		pointSet.setArray(ptrArray, number);
	}
	else
	{
		sortPoint();
		collectVertex(upVector, true);
		collectVertex(downVector, false);
		upSize=upVector.size();
		//we need to remove the first and last
		downSize=downVector.size()-2;
		pointSet.number=upSize+downSize;
		pointSet.ptrArray=new TPoint[pointSet.number];
		for (i=0; i<pointSet.number; i++)
		{
			if (i<upSize)
			{
				pointSet.ptrArray[i]=ptrArray[upVector[i]];
			}
			else
			{
				//starting from second, so add 1
				pointSet.ptrArray[i]=ptrArray[downVector[i-upSize+1]];
			}
		}
	}
}





void displayCallback()
{
	int separateNumber, connectNumber, i;
	glClearColor(1,1,1,1);
	glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

	separateNumber=separateVector.size();
	connectNumber=connectVector.size();

	glPointSize(10.0);
	if (separateNumber>0)
	{
		glBegin(GL_POINTS);
		for (i=0; i<separateNumber; i++)
		{
			glVertex2f(separateVector[i].pointPtr->x, separateVector[i].pointPtr->y);
			glColor3fv(separateVector[i].pointColor);
		}
		glEnd();
	}
	if (connectNumber>0)
	{
		glBegin(GL_LINE_LOOP);
		for (i=0; i<connectNumber; i++)
		{
			glVertex2f(connectVector[i].pointPtr->x, connectVector[i].pointPtr->y);
			glColor3fv(connectVector[i].pointColor);
		}
		glEnd();
	}


	glutSwapBuffers();
	//glutPostRedisplay();
}

void keyboardCallback(unsigned char key, int x, int y)
{
	int i;
	TPointContext pointContext;
	switch (key)
	{
	case 27:
		exit(0);
		break;
	case 's':
		convex.generatePoint(10);
		break;
	case 'c':
		convex.convexHull(pointSet);
		for (i=0; i<pointSet.number; i++)
		{
			memcpy(pointContext.pointColor, green, sizeof(TColor));
			pointContext.pointPtr=pointSet.ptrArray+i;
			connectVector.push_back(pointContext);
			glutPostRedisplay();
		}
		break;
	}
	glutPostRedisplay();
}

void reshapeCallback(int width, int height)
{
	glutPostRedisplay();
}


void init()
{
	gluOrtho2D((float)winSize_width/2.0, (float)winSize_width/-2.0, 
		(float)winSize_height/-2.0, (float)winSize_height/2.0);
}


int main(int argc, char** argv)
{
	glutInit(&argc, argv);
	glutInitWindowPosition(winPos_x, winPos_y);
	glutInitWindowSize(winSize_width, winSize_height);	
	glutInitDisplayMode(GLUT_RGBA|GLUT_ALPHA|GLUT_DOUBLE);
	glutCreateWindow(windowTitle);
	glutDisplayFunc(displayCallback);
	glutKeyboardFunc(keyboardCallback);
	glutReshapeFunc(reshapeCallback);

	init();




	//printf("before convex hull\n");
	//convex.display();

	//convex.convexHull(pointSet);
	//printf("after convex hull\n");
	//pointSet.display();
	//glutPostRedisplay();
	//glutShowWindow();

	glutMainLoop();

	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区三区的| 在线观看av一区二区| 亚洲图片欧美色图| 亚洲人成伊人成综合网小说| 国产精品久久久久久久久免费樱桃| 精品久久久久久无| 26uuu国产一区二区三区 | **欧美大码日韩| 国产精品久久久久永久免费观看| 国产精品美女久久福利网站| 国产精品国产三级国产普通话三级 | 91日韩精品一区| 色狠狠色狠狠综合| 欧美人狂配大交3d怪物一区| 欧美二区乱c少妇| 久久久久亚洲综合| 成人免费在线观看入口| 亚洲人成在线播放网站岛国| 偷偷要91色婷婷| 国产米奇在线777精品观看| 高清不卡在线观看| 在线观看不卡一区| 欧美mv日韩mv亚洲| 日韩理论片在线| 水野朝阳av一区二区三区| 另类人妖一区二区av| 波多野结衣在线一区| 在线观看日韩av先锋影音电影院| 91精品国产高清一区二区三区| 精品国产91九色蝌蚪| 亚洲人妖av一区二区| 青青草伊人久久| 成人午夜视频网站| 欧美一级欧美三级在线观看| 国产精品嫩草影院av蜜臀| 午夜免费久久看| 国产91色综合久久免费分享| 欧美老年两性高潮| 中文字幕久久午夜不卡| 免费久久精品视频| 色美美综合视频| 久久久久久电影| 日韩在线一二三区| 色香蕉成人二区免费| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 中文成人综合网| 另类专区欧美蜜桃臀第一页| 99r国产精品| 精品国产乱码91久久久久久网站| 一区二区视频免费在线观看| 国产电影精品久久禁18| 日韩欧美国产不卡| 五月天精品一区二区三区| 91麻豆精品在线观看| 国产欧美视频一区二区| 久久国产福利国产秒拍| 欧美日韩免费观看一区三区| 亚洲另类色综合网站| 99国产精品国产精品久久| 欧美国产精品一区| 激情综合色综合久久| 欧美一区二区视频在线观看| 亚洲一区二区三区国产| 欧美曰成人黄网| 亚洲综合网站在线观看| 在线视频综合导航| 亚洲一区二区三区四区的| 色狠狠综合天天综合综合| 综合激情网...| 色老汉av一区二区三区| 一区二区三区四区在线| 日本道色综合久久| 亚洲精选视频免费看| 色成人在线视频| 婷婷夜色潮精品综合在线| 欧美伊人久久久久久久久影院 | 这里只有精品视频在线观看| 亚洲大片精品永久免费| 在线91免费看| 日韩高清一区在线| 欧美成人福利视频| 国产精品一品视频| 亚洲欧洲精品一区二区三区| 91欧美一区二区| 天天做天天摸天天爽国产一区 | 国产亚洲欧美中文| 大美女一区二区三区| 国产精品国产馆在线真实露脸| 99久久精品国产麻豆演员表| 一区二区三区电影在线播| 精品视频一区二区三区免费| 免费成人深夜小野草| 国产女主播视频一区二区| 不卡视频一二三| 婷婷久久综合九色综合绿巨人| 日韩欧美一区二区三区在线| 国产精品一区二区三区99| 综合婷婷亚洲小说| 51精品视频一区二区三区| 国产制服丝袜一区| 伊人婷婷欧美激情| 欧美成人a视频| 99免费精品视频| 日本成人在线不卡视频| 国产精品每日更新在线播放网址| 色哟哟一区二区| 国产麻豆91精品| 亚洲综合小说图片| 国产日韩精品一区二区三区在线| 91福利国产成人精品照片| 经典三级在线一区| 亚洲综合图片区| 国产日产精品一区| 欧美一级黄色录像| 色婷婷一区二区三区四区| 国产一区二区三区国产| 亚洲h精品动漫在线观看| 国产精品无圣光一区二区| 69p69国产精品| 在线日韩国产精品| 国产成人精品一区二| 五月婷婷综合激情| 一区二区三区在线视频播放 | 91麻豆文化传媒在线观看| 精品亚洲欧美一区| 五月激情丁香一区二区三区| ...中文天堂在线一区| 精品国产91九色蝌蚪| 欧美一区二区三区日韩视频| 色哟哟国产精品| 99久久精品国产麻豆演员表| 国产不卡视频在线播放| 久久99精品久久久久久动态图| 亚洲成人综合在线| 一区二区三区四区亚洲| 18欧美亚洲精品| 国产精品美女久久久久久| 久久精品视频在线看| 精品国产精品网麻豆系列| 91精品国产欧美一区二区| 欧美视频一区二区三区四区| 色一情一伦一子一伦一区| 色综合久久久久| 99视频精品在线| 99久久精品国产一区| 99久久免费国产| 99精品国产99久久久久久白柏| 国产传媒欧美日韩成人| 国产精品一级在线| 懂色av中文一区二区三区 | 亚洲精品精品亚洲| 亚洲人被黑人高潮完整版| 亚洲精品伦理在线| 一区二区日韩av| 亚洲成人免费电影| 日产欧产美韩系列久久99| 久久se精品一区精品二区| 国产精品一级片| 成人精品国产免费网站| 91麻豆视频网站| 欧美午夜影院一区| 91精品国产综合久久久久久| 日韩视频一区在线观看| 欧美精品一区二区在线观看| 国产免费观看久久| 怡红院av一区二区三区| 日本不卡一二三区黄网| 国内久久婷婷综合| 丁香婷婷综合五月| 日本久久一区二区| 欧美一区二区在线播放| 欧美高清在线一区二区| 一区二区在线电影| 美女任你摸久久| jlzzjlzz国产精品久久| 精品1区2区3区| 久久综合久久综合亚洲| 一区二区三区在线看| 麻豆精品在线视频| 99久久99久久综合| 日韩女同互慰一区二区| 亚洲视频在线观看三级| 免费美女久久99| 91热门视频在线观看| 精品久久久久久综合日本欧美 | 日日夜夜免费精品视频| 国产精品一区二区三区99| 在线亚洲人成电影网站色www| 日韩精品一区二区在线| 亚洲欧美激情视频在线观看一区二区三区 | 日韩欧美国产不卡| 国产精品动漫网站| 热久久久久久久| 91亚洲男人天堂| wwwwww.欧美系列| 午夜成人免费电影| 91色视频在线| 国产精品视频免费看| 免费不卡在线观看| 日本黄色一区二区|