Beispiel #1
0
int main(int argc, char **argv) {
    int i, vcount = 1000000;
    void *kd, *set;
    unsigned int msec, start;

    if (argc > 1 && isdigit(argv[1][0])) {
        vcount = atoi(argv[1]);
    }
    printf("inserting %d random vectors... ", vcount);
    fflush(stdout);

    kd = kd_create(3);

    start = get_msec();
    for (i = 0; i < vcount; i++) {
        float x, y, z;
        x = ((float) rand() / RAND_MAX) * 200.0 - 100.0;
        y = ((float) rand() / RAND_MAX) * 200.0 - 100.0;
        z = ((float) rand() / RAND_MAX) * 200.0 - 100.0;

        assert(kd_insert3(kd, x, y, z, 0) == 0);
    }
    msec = get_msec() - start;
    printf("%.3f sec\n", (float) msec / 1000.0);

    start = get_msec();
    set = kd_nearest_range3(kd, 0, 0, 0, 40);
    msec = get_msec() - start;
    printf("range query returned %d items in %.5f sec\n", kd_res_size(set), (float) msec / 1000.0);
    kd_res_free(set);

    kd_free(kd);
    return 0;
}
Beispiel #2
0
int main(int argc, char **argv)
{
	int i,j, vcount = 10;
	int tot_count = 101;
	void *kd[tot_count], *set[tot_count];
	unsigned int msec, start;
/*
	if(argc > 1 && isdigit(argv[1][0])) {
		vcount = atoi(argv[1]);
	}
*/
	printf("inserting  random vectors... ");

	/* Creating Trees correspinding to each age group */
	for (i=0;i<tot_count;i++)
		kd[i]=kd_create(3);

	start = get_msec();

	/* Reading Input File */
	FILE *file;
	char *line = NULL;
	size_t len = 0;
	char read;
	file=fopen(argv[1], "r");

	if (file == NULL)
		return 1;

	int a;
	double b;
	double c;
	double d;

	/* Inseting the person's co-ordinates and age in the respective trees */
	while ((read = getline(&line, &len, file)) != -1) {
		convert(line, &a, &b, &c, &d);
		assert(kd_insert3(kd[a], b, c, d, 0) == 0);	 
	}

	if (line)
		free(line);

	msec = get_msec() - start;
	printf("%.3f sec\n", (float)msec / 1000.0);

	start = get_msec();
	double lat, longitude, latitude;
	/**
	  printf("range query returned %d items in %.5f sec\n", kd_res_size(set[0]), (float)msec / 1000.0);
	 **/
	int reqd_dist,index , ind;
	while(1){
		printf("Enter How many top places you want\n");
		scanf("%d",&reqd_dist);
		int counter = 0;
		int initial_radius = 100;
		printf("Enter the age of the person\n");
		scanf("%d",&index);
		printf("Enter the co-ordinates of a person \n");
		scanf("%f %f",&longitude,&latitude);
		double a_x, a_y,a_z;
		coordinates_to_lat(longitude, latitude, &a_x,&a_y,&a_z);
		int starting_index[101] ={0};
		/* Copmuter Science   */
		int loop_break = 0;
		int end_index =  index + sqrt(reqd_dist);
		if(end_index >= 101)
			end_index = 100;
		while(counter <= reqd_dist){
			for (i=index ; i<= end_index ; i++){
				set[i] = kd_nearest_range3(kd[i], a_x, a_y,a_z, initial_radius);
				/*printf("After %d\n",kd_res_size(set[i]));
				*/
			}

			/* TODO :: change sqrt(reqd_dist) to something else...... */	
			for(ind = index; ind <= end_index; ind++){
				double x = 1, y = 1, z = 1;
				a = 1;
				while(starting_index[ind]){
					kd_res_next(set[ind]);
					starting_index[ind]-=1;
				}
				while(a){
					kd_res_item3(set[ind], &x, &y, &z);
					/*printf("%f %f %f\n",x,y,z);*/
					lat_to_coordinates(x, y, z, &lat, &longitude);
					printf("%d %0.2f %0.2f\n",ind,lat, longitude);
					counter += 1;
					int val = kd_res_end(set[ind]);
					if(val == 1){
						a = 0;
						break;
					}
					else{
						a = kd_res_next(set[ind]);
						/*printf("%d\n",a);*/
					}
					if(counter >= reqd_dist){
						loop_break = 1;
						break;
					}
				}
				if(loop_break ==1)
					break;
			}

			for (i=index ; i<= end_index;i++){
				starting_index[i] = kd_res_size(set[i]);
			}

			if(loop_break ==1)
				break;
			initial_radius += initial_radius;
		}
	}
	msec = get_msec() - start;
	/*	for(i=1;i<tot_count;i++){
		kd_res_free(set[i]);
		kd_free(kd[i]);
		}
	 */
	/**
	  printf("range query returned %d items in %.5f sec\n", kd_res_size(set[i]), (float)msec / 1000.0);
	 **/
	/*
	   printf("range query returned %d items in %.5f sec\n", kd_res_size(set), (float)msec / 1000.0);
	   kd_res_free(set);
	   kd_free(kd);
	 */
	return 0;
}