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

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

?? x_tree.cc

?? X-tree的C++源碼
?? CC
字號:
#include <math.h>#ifdef S3#include "s3.h"#else#include "x_tree.h"#endif#define CHECK_MBR//////////////////////////////////////////////////////////////////////////////// globals//////////////////////////////////////////////////////////////////////////////int XTDirNode__dimension;void* XTDirNode__my_tree;int XTDataNode__dimension;//////////////////////////////////////////////////////////////////////////////// C-functions//////////////////////////////////////////////////////////////////////////////float area(int dimension, float *mbr)// berechnet Flaeche (Volumen) eines mbr der Dimension dimension{    int i;    float sum;    sum = 1.0;    for (i = 0; i < dimension; i++)	sum *= mbr[2*i+1] - mbr[2*i];    return sum;}float margin(int dimension, float *mbr)// berechnet Umfang eines mbr der Dimension dimension{    int i;    float *ml, *mu, *m_last, sum;    sum = 0.0;    m_last = mbr + 2*dimension;    ml = mbr;    mu = ml + 1;    while (mu < m_last)    {	sum += *mu - *ml;	ml += 2;	mu += 2;    }    return sum;}bool inside(float &p, float &lb, float &ub)// ist ein Skalar in einem Intervall ?{    return (p >= lb && p <= ub);}bool inside(float *v, float *mbr, int dimension)// ist ein Vektor in einer Box ?{    int i;    for (i = 0; i < dimension; i++)	if (!inside(v[i], mbr[2*i], mbr[2*i+1]))	    return FALSE;    return TRUE;}float overlap (int dim, float *q1, float *q2) {      // Bestimmt den Schnittquader   // zwischen q1 und q2      float sum = 1.0;      for (int i = 0; i < dim; i++) {      sum *= min(q1[2*i+1],q2[2*i+1]) - max(q1[2*i],q2[2*i]);      if (sum <= 0) {	 sum = 0;	 break;      }   }   return sum;}/*float overlap(int dimension, float *r1, float *r2)// calcutales the overlapping area of r1 and r2// calculate overlap in every dimension and multiplicate the values{    float sum;    float *r1pos, *r2pos, *r1last, r1_lb, r1_ub, r2_lb, r2_ub;    sum = 1.0;    r1pos = r1; r2pos = r2;    r1last = r1 + 2 * dimension;    while (r1pos < r1last)    {	r1_lb = *(r1pos++);	r1_ub = *(r1pos++);	r2_lb = *(r2pos++);	r2_ub = *(r2pos++);        // calculate overlap in this dimension        if (inside(r1_ub, r2_lb, r2_ub))        // upper bound of r1 is inside r2 	{            if (inside(r1_lb, r2_lb, r2_ub))            // and lower bound of r1 is inside                sum *= (r1_ub - r1_lb);            else                sum *= (r1_ub - r2_lb);	}	else	{            if (inside(r1_lb, r2_lb, r2_ub))	    // and lower bound of r1 is inside		sum *= (r2_ub - r1_lb);	    else 	    {		if (inside(r2_lb, r1_lb, r1_ub) &&		    inside(r2_ub, r1_lb, r1_ub))	        // r1 contains r2		    sum *= (r2_ub - r2_lb);		else		// r1 and r2 do not overlap		    sum = 0.0;	    }	}    }    return sum;}*/ void enlarge(int dimension, float **mbr, float *r1, float *r2)// enlarge r in a way that it contains s{    int i;    *mbr = new float[2*dimension];    for (i = 0; i < 2*dimension; i += 2)    {	(*mbr)[i]   = min(r1[i],   r2[i]);	(*mbr)[i+1] = max(r1[i+1], r2[i+1]);    }#ifdef CHECK_MBR    check_mbr(dimension,*mbr);#endif}bool section(int dimension, float *mbr1, float *mbr2){    int i;    for (i = 0; i < dimension; i++)    {	if (mbr1[2*i]     > mbr2[2*i + 1] ||	    mbr1[2*i + 1] < mbr2[2*i]) 	    return FALSE;    }    return TRUE;}bool section_c(int dimension, float *mbr1, const void *center, float radius){	float r2;	r2 = radius * radius;	if ( (r2 - MINDIST(center,mbr1)) < 1.0e-8)		return TRUE;	else		return FALSE;	}int sort_lower_mbr(const void *d1, const void *d2)// Vergleichsfunktion fuer qsort, sortiert nach unterem Wert der mbr bzgl.// der angegebenen Dimension{    SortMbr *s1, *s2;    float erg;    int dimension;    s1 = (SortMbr *) d1;    s2 = (SortMbr *) d2;    dimension = s1->dimension;    erg = s1->mbr[2*dimension] - s2->mbr[2*dimension];    if (erg < 0.0)	return -1;    else if (erg == 0.0)	return 0;    else 	return 1;}int sort_upper_mbr(const void *d1, const void *d2)// Vergleichsfunktion fuer qsort, sortiert nach oberem Wert der mbr bzgl.// der angegebenen Dimension{    SortMbr *s1, *s2;    float erg;    int dimension;    s1 = (SortMbr *) d1;    s2 = (SortMbr *) d2;    dimension = s1->dimension;    erg = s1->mbr[2*dimension+1] - s2->mbr[2*dimension+1];    if (erg < 0.0)	return -1;    else if (erg == 0.0)	return 0;    else 	return 1;}int sort_center_mbr(const void *d1, const void *d2)// Vergleichsfunktion fuer qsort, sortiert nach center of mbr {    SortMbr *s1, *s2;    int i, dimension;    float d, e1, e2;    s1 = (SortMbr *) d1;    s2 = (SortMbr *) d2;    dimension = s1->dimension;    e1 = e2 = 0.0;    for (i = 0; i < dimension; i++)    {        d = ((s1->mbr[2*i] + s1->mbr[2*i+1]) / 2.0) - s1->center[i];        e1 += d*d;        d = ((s2->mbr[2*i] + s2->mbr[2*i+1]) / 2.0) - s2->center[i];        e2 += d*d;    }    if (e1 < e2)	return -1;    else if (e1 == e2)	return 0;    else 	return 1;}float OBJECT_DIST(const void  *Point1, const void  *Point2){    //    // Berechnet das Quadrat der euklid'schen Metrik.    // (Der tatsaechliche Abstand ist uninteressant, weil    // die anderen Metriken (MINDIST und MINMAXDIST fuer    // die NearestNarborQuery nur relativ nie absolut     // gebraucht werden; nur Aussagen "<" oder ">" sind    // relevant.    //    DataStruct *d1,*d2;    float summe = 0;    int i;        d1 = (DataStruct *) Point1;    d2 = (DataStruct *) Point2;    for( i = 0; i < d1->dimension; i++)	summe += pow(    d1->Data[i] - d2->Data[i], 2 );    //return( sqrt(summe) );    return(summe);}float MINDIST(const void *Point, float *bounces){    //    // Berechne die kuerzeste Entfernung zwischen einem Punkt Point    // und einem MBR bounces (Lotrecht!)    //    DataStruct *p;    float summe = 0.0;    float r;    int i;    p = (DataStruct *) Point;        for(i = 0; i < p->dimension; i++)    {	if (p->Data[i] < bounces[2*i])	    r = bounces[2*i];	else	{	    if (p->Data[i] > bounces[2*i +1])		r = bounces[2*i+1];	    else 		r = p->Data[i];	}    	summe += pow( p->Data[i] - r , 2);    }    return(summe);    }float MINMAXDIST(const void *Point, float *bounces){    // Berechne den kleinsten maximalen Abstand von einem Punkt Point    // zu einem MBR bounces.    // Wird benutzt zur Abschaetzung von Abstaenden bei NearestNarborQuery.    // Kann als Supremum fuer die aktuell kuerzeste Distanz:     // Alle Punkte mit einem Abstand > MINMAXDIST sind keine Kandidaten mehr    // fuer den NearestNarbor    // vgl. Literatur:     // Nearest Narbor Query v. Roussopoulos, Kelley und Vincent,     // University of Maryland        DataStruct *p;        float summe = 0;    float minimum = 1.0e20;    float S = 0;    float rmk, rMi;    int k,i,j;    p = (DataStruct *) Point;        for( i = 0; i < p->dimension; i++)     { 	rMi = (	p->Data[i] >= (bounces[2*i]+bounces[2*i+1])/2 )	    ? bounces[2*i] : bounces[2*i+1];	S += pow( p->Data[i] - rMi , 2 );    }    for( k = 0; k < p->dimension; k++)    {  		rmk = ( p->Data[k] <=  (bounces[2*k]+bounces[2*k+1]) / 2 ) ? 	    bounces[2*k] : bounces[2*k+1];	summe = pow( p->Data[k] - rmk , 2 );			rMi = (	p->Data[k] >= (bounces[2*k]+bounces[2*k+1]) / 2 )	    ? bounces[2*k] : bounces[2*k+1];	summe += S - pow( p->Data[k] - rMi , 2 );		minimum = min( minimum,summe);    }    return(minimum);    }int sort_min_dist(const void *element1, const void *element2){    //    // Vergleichsfunktion fuer die Sortierung der BranchList bei der    // NearestNarborQuery (Sort, Branch and Prune)    //    BranchList *e1,*e2;    e1 = (BranchList *) element1;    e2 = (BranchList *) element2;        if (e1->mindist < e2->mindist) 	return(-1);    else if (e1->mindist > e2->mindist)	return(1);    else	return(0);}int prune_branch_list(float *nearest_distanz, const void *activebrunchList, 		    int n){    // Schneidet im Array BranchList alle Eintraege ab, deren Distanz groesser    // ist als die aktuell naeheste Distanz    //    BranchList *bl;         int i,j,k, aktlast;        bl = (BranchList *) activebrunchList;        // 1. Strategie:    //     // Ist MINDIST(P,M1) > MINMAXDIST(P,M2), so kann der     // NearestNeighbor auf keinen Fall mehr in M1 liegen!    //    aktlast = n;        for( i = 0; i < aktlast ; i++ )    {	if (bl[i].minmaxdist < bl[aktlast-1].mindist)	    for( j = 0; (j < aktlast) ; j++ )		if ((i!=j) && (bl[j].mindist>bl[i].minmaxdist))		{		    aktlast = j;		    break;		}	    }        // 2. Strategie:    //    // nearest_distanz > MINMAXDIST(P,M)    // -> nearest_distanz = MIMMAXDIST(P,M)    //    for( i = 0; i < aktlast; i++)	if (*nearest_distanz > bl[i].minmaxdist)	    *nearest_distanz = bl[i].minmaxdist;        // 3. Strategie:    //     // nearest_distanz < MINDIST(P,M)    //    // in M kann der Nearest-Narbor sicher nicht mehr liegen.    //    for( i = 0; (i < aktlast) && (*nearest_distanz >= bl[i].mindist) ; i++);        aktlast = i;    // printf("n: %d aktlast: %d \n",n,aktlast);       return (aktlast);    }int testBrunchList(const void *abL, const void *sL,		   int n, int last){    // Schneidet im Array BranchList alle Eintr"age ab, deren Distanz gr"o"ser	// ist als die aktuell naeheste Distanz	//	BranchList *activebrunchList, *sectionList; 		int i,number, aktlast;		activebrunchList = (BranchList *) abL;	sectionList      = (BranchList *) sL;	aktlast = last; 	for(i = last; i < n ; i++)	{	    number = activebrunchList[i].entry_number;  	    if (sectionList[number].section)	    {		// obwohl vom Abstand her dieser Eintrag gecanceld werden		// m"usste, wird hier der Eintrag in die ABL wieder		    // aufgenommen, da evtl. ein Treffer der range-Query zu erwarten ist!		    //		    // An der letzten Stelle der Liste kommt der aktuelle Eintrag!		    aktlast++;		    activebrunchList[aktlast].entry_number = activebrunchList[i].entry_number;		    activebrunchList[aktlast].mindist = activebrunchList[i].mindist;		    activebrunchList[aktlast].minmaxdist = activebrunchList[i].minmaxdist;		     }      	 	    	}		return (aktlast);    }void check_mbr(int dimension, float *mbr){}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品理伦片| 精品国产网站在线观看| 亚洲一区二区三区四区不卡| 97成人超碰视| 亚洲午夜电影网| 欧美一区二区在线视频| 奇米色777欧美一区二区| 精品国精品自拍自在线| 国产成a人亚洲精品| 亚洲美女少妇撒尿| 9191久久久久久久久久久| 蜜臀久久久99精品久久久久久| 精品噜噜噜噜久久久久久久久试看| 国产美女精品在线| 亚洲免费观看视频| 欧美一区二区三区视频在线观看 | 日韩毛片视频在线看| 色综合色综合色综合色综合色综合 | 国产精品综合一区二区三区| 国产午夜亚洲精品午夜鲁丝片| 不卡在线视频中文字幕| 一区二区三区自拍| 欧美成人午夜电影| 色妞www精品视频| 蜜桃av一区二区在线观看 | 日韩一级成人av| 国产91清纯白嫩初高中在线观看 | 精品一区中文字幕| 中文字幕中文字幕在线一区 | 国产99久久久国产精品| 亚洲激情男女视频| 欧美sm极限捆绑bd| 欧美主播一区二区三区| 韩国欧美国产一区| 午夜电影一区二区三区| 欧美激情在线看| 正在播放亚洲一区| 一本色道亚洲精品aⅴ| 精品在线播放免费| 亚洲不卡在线观看| 国产精品久久久久aaaa樱花| 精品国精品国产尤物美女| 欧美午夜精品久久久久久超碰| 美女网站在线免费欧美精品| 国产精品色哟哟网站| 3d动漫精品啪啪一区二区竹菊| 成人动漫在线一区| 狠狠狠色丁香婷婷综合激情 | 一区二区三区视频在线看| 日韩欧美黄色影院| 欧美综合亚洲图片综合区| 成人综合日日夜夜| 国产主播一区二区三区| 日本亚洲电影天堂| 亚洲福利视频一区二区| 亚洲欧美日韩国产另类专区| 久久九九久久九九| 欧美zozo另类异族| 欧美一区欧美二区| 91精品国产色综合久久不卡蜜臀| 成人av网站在线观看| 国产一二三精品| 国内精品久久久久影院一蜜桃| 日韩激情一区二区| 日韩有码一区二区三区| 亚洲福中文字幕伊人影院| 亚洲精品国产品国语在线app| 中文字幕免费在线观看视频一区| 久久免费国产精品| 国产午夜精品一区二区三区嫩草| 日韩精品最新网址| 日韩视频在线你懂得| 制服丝袜中文字幕亚洲| 欧美肥大bbwbbw高潮| 欧美日韩国产综合视频在线观看 | 国产精品久久久久aaaa| 久久久国际精品| 久久嫩草精品久久久精品一| 精品久久久三级丝袜| 久久综合中文字幕| 久久久91精品国产一区二区精品 | 日韩精品一二区| 日日摸夜夜添夜夜添亚洲女人| 亚洲成人免费观看| 免费人成在线不卡| 蜜桃av一区二区在线观看| 久久国产精品色婷婷| 国模一区二区三区白浆| 国产精品99久久久| 9久草视频在线视频精品| 91在线视频免费观看| 色综合久久久久综合| 欧美日韩第一区日日骚| 日韩三级伦理片妻子的秘密按摩| 久久亚洲精品小早川怜子| 欧美极品少妇xxxxⅹ高跟鞋| 亚洲少妇中出一区| 亚洲国产乱码最新视频 | 韩日精品视频一区| 国产成人亚洲综合a∨猫咪| 波多野结衣在线一区| 色噜噜夜夜夜综合网| 91精品国产免费久久综合| www国产精品av| 1024精品合集| 亚洲国产精品一区二区尤物区| 蜜桃久久久久久| av在线不卡电影| 精品视频在线免费| 精品免费99久久| 亚洲人成小说网站色在线| 天天操天天色综合| 国产福利视频一区二区三区| 91免费看片在线观看| 日韩一区二区三区四区五区六区| 国产亚洲女人久久久久毛片| 夜夜嗨av一区二区三区| 国产在线日韩欧美| 欧美日韩免费不卡视频一区二区三区 | 中文字幕一区日韩精品欧美| 亚洲1区2区3区视频| 国产精品乡下勾搭老头1| 欧美老人xxxx18| 中文字幕乱码亚洲精品一区| 天天操天天综合网| 色综合天天综合网天天看片| 91精品国产乱码久久蜜臀| 亚洲日本免费电影| 久久99久久久久久久久久久| 在线看国产日韩| 国产欧美在线观看一区| 日韩成人午夜精品| 色婷婷综合在线| 久久嫩草精品久久久精品一| 日韩黄色片在线观看| 91免费看`日韩一区二区| 久久久精品免费网站| 男女激情视频一区| 欧美日韩精品免费观看视频| 日韩理论片一区二区| 国产精品99久久久久| 日韩一级大片在线观看| 亚洲成a人片综合在线| www.欧美.com| 国产欧美日韩麻豆91| 狠狠色综合日日| 日韩一区二区三区免费观看| 亚洲一区二区三区视频在线 | 欧美日韩视频在线观看一区二区三区 | 91香蕉国产在线观看软件| www亚洲一区| 久久成人免费网| 欧美一级久久久久久久大片| 夜夜亚洲天天久久| 色www精品视频在线观看| 国产精品久久毛片av大全日韩| 国产乱妇无码大片在线观看| 一区二区在线观看不卡| 成人午夜看片网址| 国产欧美精品国产国产专区| 国产综合久久久久久鬼色 | 国产清纯在线一区二区www| 久草这里只有精品视频| 日韩亚洲欧美中文三级| 日本sm残虐另类| 91精品国产日韩91久久久久久| 日韩电影在线观看电影| 欧美嫩在线观看| 免费在线观看视频一区| 欧美一级国产精品| 精品一区二区三区在线观看 | 国产欧美日韩麻豆91| 国产成人av福利| 国产色产综合产在线视频| 成人免费高清视频在线观看| 国产精品久久久久久久久晋中| 成年人国产精品| 亚洲免费伊人电影| 欧美人伦禁忌dvd放荡欲情| 婷婷开心激情综合| 日韩视频国产视频| 国产综合色在线| 亚洲日本在线看| 欧美日韩亚洲综合一区 | 国产亚洲一区字幕| 成人网页在线观看| 亚洲无人区一区| 日韩亚洲欧美综合| 成人妖精视频yjsp地址| 国产精品久久久一本精品| 在线观看91视频| 日韩国产欧美在线观看| 久久一区二区三区国产精品| 成人午夜电影久久影院| 伊人一区二区三区| 精品日本一线二线三线不卡 | 色综合久久中文综合久久牛| 天天av天天翘天天综合网色鬼国产| 精品毛片乱码1区2区3区| a亚洲天堂av|