#!/usr/bin/env python # # gen_stars.py # interface # # Created by Tobias Schwinger on 3/22/13. # Copyright (c) 2013 High Fidelity, Inc. All rights reserved. # # Input file generator for the starfield. from random import random,randint from math import sqrt, hypot, atan2, pi, fmod, degrees from sys import argv,stderr hemisphere_only, equator, meridians=False, 0, 1000 n_random = 50000 if len(argv) > 1: n_random = int(argv[1]) bars_total, bars_prev = 77, 0 def meridian(azimuth,n,(r0,g0,b0),(r1,g1,b1)): alts = 180.0/n for alti in range(n): # color altj = n-alti-1 r = (r0 *altj+alti* r1)/n g = (g0 *altj+alti* g1)/n b = (b0 *altj+alti* b1)/n # position altitude = alts*alti print "%f %f #%02x%02x%02x" % (azimuth,altitude,r,g,b) print "%f %f #%02x%02x%02x" % (azimuth,-altitude,r,g,b) #if meridians: #meridian( 0,meridians,(255,255,255), (180, 60,255)) # N->S #meridian(90,meridians,( 80,255, 80), (255,240, 40)) # E->W if equator: azis = 360.0/equator for azii in range(equator): azimuth = azis*azii print "%f %f #%02x%02x%02x" % (azimuth,0,255,255,255) for i in range(n_random): # color w = randint(30,randint(40,255)) r = max(0,min(255,w + randint(-10,70))) g = max(0,min(255,w + randint(-20,60))) b = max(0,min(255,w + randint(-10,100))) # position while True: x,y,z = random()*2-1,random(),random()*2-1 if not hemisphere_only: y = y*2-1 l = sqrt(x*x + y*y + z*z) if l <= 1.0: break x /= l; y /= l; z /= l xz = hypot(x,z) azimuth = degrees(fmod(atan2(x,z)+pi,2*pi)) altitude = degrees(atan2(y,xz)) bars = round(bars_total*i/n_random) if bars != bars_prev: bars_prev = bars bars = int(bars) stderr.write('\r[%s%s]' % ('#' * bars, '-' * (bars_total-bars))) print "%f %f #%02x%02x%02x" % (azimuth,altitude,r,g,b) stderr.write('\r[%s]\n' % ('#' * bars_total,))