#!/usr/bin/perl # Main Belt Asteroids # script by Arlene Ducao (arlduc@amnh.org) # this script takes the objects from the list "MPCORB.DAT" # (ftp://cfa-ftp.harvard.edu/pub/MPCORB/) # whose semi-major axis (a) is between 2.15 and 3.3 AU -- placing them between Mars and Jupiter # and turns them into a Celestia ssc file. #to reduce file size, we only take the biggest asteroids (radius > 2.1 AU) #and we add modified Aten/Amor/Apollo NEO asteroids in as well! my ($Radius, $q, $Q, $Mplus, $Mminus, $Nplus, $Nminus, $Opps, $Ref); #quantities used in the other files my ($Designation, $H, $G, $Epoch, $M, $Peri, $Node, $Incl, $e, $n, $a); #quantities used in the other files my ($line); #############subroutines########################################## sub OtherAsteroidGet() { $Designation = substr($line, 0, 5); $Space = substr($line, 5, 3); $H = substr($line, 8, 5); $Space = substr($line, 13, 2); $G = substr($line, 15, 4); $Space = substr($line, 19, 1); $Epoch = substr($line, 20, 5); $Space = substr($line, 25, 1); $M = substr($line, 26, 9); $Space = substr($line, 35, 2); $Peri = substr($line, 37, 9); $Space = substr($line, 46, 2); $Node = substr($line, 48, 9); $Space = substr($line, 57, 3); $Incl = substr($line, 60, 8); $Space = substr($line, 68, 2); $e = substr($line, 70, 9); $Space = substr($line, 79, 2); $n = substr($line, 81, 10); $Space = substr($line, 91, 3); $a = substr($line, 94, 9); } sub asteroidPrint() { $Radius = 0.5 * 1329 *(10 **(-($H)/5))/sqrt(1) * 5000; # original equation is = 0.5 * 1329.*(10.**(-AbsMag[=H]/5.))/sqrt(albedo)) printf NEO_OUT ("\"%s\" \"Sol\"\n", $Designation); printf NEO_OUT ("{\n"); printf NEO_OUT (" Class \"asteroid\"\n"); printf NEO_OUT (" Mesh \"asteroid.cms\"\n"); printf NEO_OUT (" Texture \"asteroid.jpg\"\n"); printf NEO_OUT (" Radius %g \n", $Radius); printf NEO_OUT (" EllipticalOrbit\n {\n"); printf NEO_OUT (" Period %g \n", sqrt($a**3)); # real equation is sqrt(SemiMajorAxis**3) printf NEO_OUT (" SemiMajorAxis %g \n", $a); printf NEO_OUT (" Eccentricity %g \n", $e); printf NEO_OUT (" Inclination %g \n", $Incl); printf NEO_OUT (" AscendingNode %g \n", $Node); printf NEO_OUT (" ArgOfPericenter %g \n", $Peri); printf NEO_OUT (" MeanAnomaly %g \n", $M); printf NEO_OUT (" }\n"); printf NEO_OUT (" Albedo 1 # large because we want it visible!!! \n"); printf NEO_OUT (" RotationPeriod %g # random value (0MainBeltAsteroids.ssc" ); $count = 0; while (defined($line = )) { OtherAsteroidGet(); $count++; if (($a > 2.15) && ($a < 3.3) && ($H < 12)){ #printf NEO_OUT ("#FROM MPCORB\n"); asteroidPrint(); } } printf STDOUT ("written to MainBeltAsteroids.ssc\n");