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

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

?? convex.cpp

?? convex algorithm bodo
?? 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一区二区三区免费野_久草精品视频
日本韩国一区二区三区视频| 精品视频在线免费| 一本色道a无线码一区v| 91精品国产一区二区三区蜜臀| 久久久久久久久岛国免费| 亚洲一区二区三区三| 国产精品2024| 欧美一区二区网站| 亚洲日韩欧美一区二区在线| 国产一区二区三区综合 | 夜夜嗨av一区二区三区网页| 免费成人在线网站| 欧美精品国产精品| 亚洲日本一区二区| 成人av在线电影| 国产亚洲欧美日韩日本| 美女网站在线免费欧美精品| 欧美日韩亚洲综合| 亚洲最大成人综合| 91免费小视频| 日本一区二区视频在线观看| 国产一区福利在线| 91精品午夜视频| 视频一区在线播放| 欧美日韩高清一区二区三区| 最好看的中文字幕久久| 粉嫩av一区二区三区| 精品国产免费视频| 精品一区在线看| 日韩欧美国产一区二区在线播放| 亚洲亚洲人成综合网络| 欧美四级电影在线观看| 亚洲激情第一区| 91在线观看一区二区| 国产精品入口麻豆九色| 国产99精品在线观看| 国产日韩欧美精品一区| 国产高清一区日本| 国产精品天干天干在线综合| 东方aⅴ免费观看久久av| 国产精品色在线观看| 成人免费毛片高清视频| 亚洲欧洲日韩av| 一本大道久久精品懂色aⅴ| 亚洲精品国产精华液| 欧美色综合久久| 日韩精品免费专区| 久久亚洲一级片| 国产成人99久久亚洲综合精品| 国产精品日韩成人| 一本大道av伊人久久综合| 亚洲成av人片在线观看| 欧美一级片免费看| 国产精品一二三区| 亚洲私人黄色宅男| 欧美日韩国产首页| 精品亚洲成a人在线观看| 久久久精品国产免大香伊| 成人免费视频视频在线观看免费 | 欧美一二三区在线| 国产酒店精品激情| 一区二区三区在线观看动漫 | 日韩欧美一区二区不卡| 国产麻豆视频一区| 亚洲欧美国产三级| 91精品中文字幕一区二区三区| 美脚の诱脚舐め脚责91| 国产精品嫩草99a| 91福利视频网站| 美女一区二区久久| 亚洲狠狠丁香婷婷综合久久久| 91精品国产麻豆| 国产美女一区二区三区| 一区二区三区精品在线| 精品欧美一区二区久久| 色婷婷综合视频在线观看| 精品伊人久久久久7777人| 亚洲品质自拍视频网站| 久久综合中文字幕| 欧美午夜在线观看| 成人国产亚洲欧美成人综合网| 亚洲第一福利一区| 国产精品国产三级国产专播品爱网| 欧美午夜片在线观看| 成人国产视频在线观看| 久久99精品国产91久久来源| 亚洲免费色视频| 国产亚洲一区字幕| 欧美一区二区三区爱爱| 99久久er热在这里只有精品15| 美女精品一区二区| 五月激情六月综合| 中文字幕亚洲一区二区va在线| 日韩欧美一区二区不卡| 欧美性xxxxxxxx| 97成人超碰视| 国产一区在线视频| 麻豆免费精品视频| 日韩av电影天堂| 亚洲一区在线观看免费 | 国产女主播在线一区二区| 欧美精品一卡二卡| 欧美亚洲一区二区三区四区| 懂色av一区二区夜夜嗨| 韩国女主播成人在线观看| 奇米精品一区二区三区在线观看| 一区二区三区在线播放| 亚洲男同性视频| 中文字幕在线一区| 国产精品人成在线观看免费| 久久精品视频在线免费观看| 精品毛片乱码1区2区3区| 日韩一级黄色片| 日韩一级在线观看| 67194成人在线观看| 欧美精品粉嫩高潮一区二区| 欧美日韩精品欧美日韩精品一综合| 色丁香久综合在线久综合在线观看| www.久久久久久久久| eeuss鲁一区二区三区| 99久久免费国产| 色综合av在线| 欧美日韩在线直播| 91精品国产高清一区二区三区| 欧美丰满美乳xxx高潮www| 欧美精三区欧美精三区| 国产亚洲欧美日韩在线一区| 亚洲免费观看在线视频| 久久久久久久国产精品影院| 精品1区2区在线观看| 欧美成人一区二区| 精品国产亚洲在线| 亚洲国产精品v| 久久午夜羞羞影院免费观看| 久久久久久久久久久99999| 国产精品久久久久桃色tv| 成人欧美一区二区三区黑人麻豆 | 日本一区二区动态图| 国产精品天天看| 亚洲免费观看在线视频| 日韩国产欧美在线播放| 韩国av一区二区三区在线观看| 国产99久久久国产精品潘金| 一本大道av伊人久久综合| 欧美巨大另类极品videosbest | 18欧美乱大交hd1984| 亚洲观看高清完整版在线观看| 日韩av中文在线观看| 国产精品一色哟哟哟| 色婷婷综合视频在线观看| 91精品国产福利| 成人免费一区二区三区在线观看| 亚洲一区二区在线视频| 国产一区二区导航在线播放| 91碰在线视频| 精品日韩欧美在线| 亚洲精品综合在线| 韩国av一区二区三区在线观看| 91亚洲午夜精品久久久久久| 日韩欧美一卡二卡| 一区二区三区自拍| 国产在线麻豆精品观看| 欧美午夜理伦三级在线观看| 国产午夜精品理论片a级大结局| 亚洲精品成人悠悠色影视| 精品在线播放免费| 欧美日韩免费不卡视频一区二区三区| 欧美电视剧免费观看| 亚洲精品免费播放| 国产成人精品影视| 91精品国产91久久久久久最新毛片| 国产精品女同一区二区三区| 日av在线不卡| 欧美三级日韩在线| 国产精品国产三级国产普通话三级| 日本美女一区二区三区| 色八戒一区二区三区| 日本一区二区动态图| 美女精品自拍一二三四| 色视频一区二区| 国产精品午夜免费| 国产精品一卡二卡在线观看| 日韩精品一区二区三区三区免费 | 在线免费av一区| 国产精品久久久久9999吃药| 久久99精品国产| 日韩欧美国产一区在线观看| 老司机午夜精品| 欧美年轻男男videosbes| 亚洲精品成人精品456| 99久久精品免费| 欧美精彩视频一区二区三区| 激情av综合网| 日韩视频免费观看高清完整版在线观看 | 欧美精品一级二级| 一区二区三区精密机械公司| 成人av资源在线观看| 欧美国产综合一区二区| 国产不卡一区视频| 欧美激情综合五月色丁香小说|