a1 = calc_angle(a, b, origin);
a2 = calc_angle(origin, b, c);
- printf("a1 = %.2f a2 = %.2f\n", a1 * RAD_TO_DEG, a2 * RAD_TO_DEG);
+ // printf("a1 = %.2f a2 = %.2f\n", a1 * RAD_TO_DEG, a2 * RAD_TO_DEG);
return ( (a1 + a2) < FG_PI );
}
in_count = input_list.size();
sum_x = sum_y = 0.0;
- while ( current != last ) {
+ for ( ; current != last ; ++current ) {
sum_x += (*current).x;
sum_y += (*current).y;
-
- ++current;
}
average.x = sum_x / in_count;
average.y = sum_y / in_count;
- printf("Average center point is %.4f %.4f\n", average.x, average.y);
+ // printf("Average center point is %.4f %.4f\n", average.x, average.y);
// STEP TWO: Translate input points so average is at origin
current = input_list.begin();
last = input_list.end();
trans_list.erase( trans_list.begin(), trans_list.end() );
- while ( current != last ) {
+ for ( ; current != last ; ++current ) {
p.x = (*current).x - average.x;
p.y = (*current).y - average.y;
- printf("%.6f %.6f\n", p.x, p.y);
+ // printf("%.6f %.6f\n", p.x, p.y);
trans_list.push_back(p);
- ++current;
}
// STEP THREE: convert to radians and sort by theta
last = trans_list.end();
radians_map.erase( radians_map.begin(), radians_map.end() );
- while ( current != last ) {
+ for ( ; current != last ; ++current) {
p = cart_to_polar_2d(*current);
if ( p.dist > radians_map[p.theta] ) {
radians_map[p.theta] = p.dist;
}
- ++current;
}
- printf("Sorted list\n");
+ // printf("Sorted list\n");
map_current = radians_map.begin();
map_last = radians_map.end();
- while ( map_current != map_last ) {
+ for ( ; map_current != map_last ; ++map_current ) {
p.x = (*map_current).first;
p.y = (*map_current).second;
- printf("p is %.6f %.6f\n", p.x, p.y);
-
- ++map_current;
+ // printf("p is %.6f %.6f\n", p.x, p.y);
}
// STEP FOUR: traverse the sorted list and eliminate everything
// not on the perimeter.
- printf("Traversing list\n");
+ // printf("Traversing list\n");
// double check list size ... this should never fail because a
// single runway will always generate four points.
if ( radians_map.size() < 3 ) {
- printf("convex hull not possible with < 3 points\n");
+ // printf("convex hull not possible with < 3 points\n");
exit(0);
}
last_size = radians_map.size() + 1;
while ( last_size > radians_map.size() ) {
- printf("Running an iteration of the graham scan algorithm\n");
+ // printf("Running an iteration of the graham scan algorithm\n");
last_size = radians_map.size();
map_current = radians_map.begin();
// printf("Pc is %.6f %.6f\n", Pc.theta, Pc.dist);
if ( test_point(Pa, Pb, Pc) ) {
- printf("Accepted a point\n");
+ // printf("Accepted a point\n");
// accept point, advance Pa, Pb, and Pc.
++map_current;
} else {
- printf("REJECTED A POINT\n");
+ // printf("REJECTED A POINT\n");
// reject point, delete it and advance only Pb and Pc
map_next = map_current;
++map_next;
con_hull.erase( con_hull.begin(), con_hull.end() );
map_current = radians_map.begin();
map_last = radians_map.end();
- while ( map_current != map_last ) {
+ for ( ; map_current != map_last ; ++map_current ) {
p.theta = (*map_current).first;
p.dist = (*map_current).second;
result.x = cos(p.theta) * p.dist + average.x;
- result.y = sin(p.theta) * p.dist + average.x;
+ result.y = sin(p.theta) * p.dist + average.y;
printf("%.6f %.6f\n", result.x, result.y);
con_hull.push_back(result);
-
- ++map_current;
}
return con_hull;
// $Log$
+// Revision 1.3 1998/09/09 20:59:55 curt
+// Loop construct tweaks for STL usage.
+// Output airport file to be used to generate airport scenery on the fly
+// by the run time sim.
+//
// Revision 1.2 1998/09/09 16:26:32 curt
// Continued progress in implementing the convex hull algorithm.
//
fgBUCKET b;
long int index;
char base[256], tmp[256];
- string path, command, exfile, file;
+ string path, command, exfile, file, aptfile;
int i, count;
printf( "(apt) %s", last_airport.c_str() );
- while ( runway_list.size() ) {
- line_str = runway_list.front();
- runway_list.pop_front();
+ list < string >::iterator last_runway = runway_list.end();
+ for ( list < string >::iterator current_runway = runway_list.begin();
+ current_runway != last_runway ; ++current_runway ) {
+ line_str = (*current_runway);
printf( "%s", line_str.c_str() );
sscanf( line_str.c_str(), "%lf %lf %d %d %d %s %d %c %d\n",
// add rwy_list to apt_list
current = rwy_list.begin();
last = rwy_list.end();
- while ( current != last ) {
+ for ( ; current != last ; ++current ) {
apt_list.push_back(*current);
- ++current;
}
}
printf("Runway points in degrees\n");
current = apt_list.begin();
last = apt_list.end();
- while ( current != last ) {
+ for ( ; current != last; ++current ) {
// printf( "(%.4f, %.4f)\n",
printf( "%.5f %.5f\n", current->lon, current->lat );
- ++current;
}
printf("\n");
current = hull_list.begin();
last = hull_list.end();
sum_x = sum_y = 0.0;
- while ( current != last ) {
+ for ( ; current != last; ++current ) {
+ // printf("return = %.6f %.6f\n", (*current).x, (*current).y);
sum_x += (*current).x;
sum_y += (*current).y;
-
- ++current;
}
average.x = sum_x / count;
average.y = sum_y / count;
- // find bucket based on first point in hull list. Eventually
- // we'll need to handle cases where the area crosses bucket
- // boundaries.
- fgBucketFind( (*current).lon, (*current).lat, &b);
+ // find bucket based on average center point of hull list.
+ // Eventually we'll need to handle cases where the area crosses
+ // bucket boundaries.
+ fgBucketFind( average.lon, average.lat, &b);
printf( "Bucket = lon,lat = %d,%d x,y index = %d,%d\n",
b.lon, b.lat, b.x, b.y);
system( command.c_str() );
sprintf(tmp, "%ld", index);
- exfile = path + "/" + tmp + ".node.ex";
- file = path + "/" + tmp + ".poly";
+ exfile = path + "/" + tmp + ".node.ex";
+ file = path + "/" + tmp + ".poly";
+ aptfile = path + "/" + tmp + ".apt";
printf( "extra node file = %s\n", exfile.c_str() );
printf( "poly file = %s\n", file.c_str() );
+ printf( "apt file = %s\n", aptfile.c_str() );
// output exclude nodes
printf("Output exclude nodes\n");
current = hull_list.begin();
last = hull_list.end();
i = 1;
- while ( current != last ) {
+ for ( ; current != last ; ++current ) {
// printf( "(%.4f, %.4f)\n",
fprintf( fd, "%d %.2f %.2f %.2f\n", i,
- (*current).lon * 3600.0, (*current).lat * 3600.0, elev);
- ++current;
+ (*current).lon * 3600.0, (*current).lat * 3600.0,
+ (double)elev * FEET_TO_METER );
++i;
}
fclose(fd);
// output poly
+ printf("Output poly\n");
if ( (fd = fopen(file.c_str(), "w")) == NULL ) {
printf("Cannot open file: %s\n", file.c_str());
exit(-1);
fprintf( fd, "1 %.2f %.2f\n", average.x * 3600.0, average.y * 3600);
fclose(fd);
+
+ // output "apt" file
+ printf("Output airport\n");
+ if ( (fd = fopen(aptfile.c_str(), "w")) == NULL ) {
+ printf("Cannot open file: %s\n", aptfile.c_str());
+ exit(-1);
+ }
+
+ // write main airport identifier
+ fprintf(fd, "a %s", last_airport.c_str() );
+
+ // write perimeter polygon
+ current = hull_list.begin();
+ last = hull_list.end();
+ for ( ; current != last ; ++current ) {
+ fprintf( fd, "p %.7f %.7f %.2f\n", (*current).lon, (*current).lat,
+ (double)elev * FEET_TO_METER );
+ }
+
+ // write runway info
+ for ( list < string >::iterator current_runway = runway_list.begin();
+ current_runway != last_runway ; ++current_runway ) {
+ line_str = (*current_runway);
+ line_str = line_str.substr(1, line_str.size());
+ fprintf(fd, "r %s", line_str.c_str() );
+ }
+
+ fclose(fd);
}
process_airport(last_airport, runway_list, argv[2]);
}
+ // clear runway list for start of next airport
+ runway_list.erase(runway_list.begin(), runway_list.end());
+
last_airport = airport;
}
}
}
-#if 0
- // P13 (Globe, AZ)
- // lon = -110.6642442;
- // lat = 33.3528903;
- // heading = 102.0 * DEG_TO_RAD;
- // length = 1769;
- // width = 23;
-
- // KANE
- lon = -93.2113889;
- lat = 45.145;
- elevation = 912 * FEET_TO_METER;
- heading = 270.0 * DEG_TO_RAD;
- length = 1220;
- width = 23;
-
- gen_runway_area( lon * DEG_TO_RAD, lat * DEG_TO_RAD,
- heading, length, width, nodes, &count );
-
- fgBucketFind(lon, lat, &b);
- printf( "Bucket = lon,lat = %d,%d x,y index = %d,%d\n",
- b.lon, b.lat, b.x, b.y);
-
- index = fgBucketGenIndex(&b);
- fgBucketGenBasePath(&b, base);
- sprintf(path, "%s/Scenery/%s", argv[1], base);
- sprintf(command, "mkdir -p %s\n", path);
- system(command);
-
- sprintf(exfile, "%s/%ld.node.ex", path, index);
- sprintf(file, "%s/%ld.poly", path, index);
- printf( "extra node file = %s\n", exfile);
- printf( "poly file = %s\n", file);
-
- // output extra nodes
- if ( (fd = fopen(exfile, "w")) == NULL ) {
- printf("Cannot open file: %s\n", exfile);
- exit(-1);
- }
-
- fprintf(fd, "%d 2 0 0\n", count);
- for ( i = 0; i < count; i++ ) {
- fprintf( fd, "%d %.2f %.2f %.2f\n", i + 1,
- nodes[i].lon * RAD_TO_ARCSEC, nodes[i].lat * RAD_TO_ARCSEC,
- elevation);
- }
- fclose(fd);
-
- // output poly
- if ( (fd = fopen(file, "w")) == NULL ) {
- printf("Cannot open file: %s\n", file);
- exit(-1);
- }
-
- // output empty node list
- fprintf(fd, "0 2 0 0\n");
-
- // output segments
- fprintf(fd, "%d 0\n", count);
- for ( i = 0; i < count - 1; i++ ) {
- fprintf( fd, "%d %d %d\n", i + 1, i + 1, i + 2 );
- }
- fprintf( fd, "%d %d %d\n", count, count, 1 );
-
- // output hole center
- fprintf( fd, "1\n");
- fprintf( fd, "1 %.2f %.2f\n", lon * 3600.0, lat * 3600);
-
- fclose(fd);
-
-#endif
-
-
-// $Log: main.c,v
+// $Log$
+// Revision 1.4 1998/09/09 20:59:56 curt
+// Loop construct tweaks for STL usage.
+// Output airport file to be used to generate airport scenery on the fly
+// by the run time sim.
+//
//