#include "mrg_misc3.inc"
global_settings
{
assumed_gamma 1.0
ambient_light .2
}
background{color rgb 0}
#declare lclock=clock+.0;
#declare cscale = 5;
#declare cpos =<0.0, 0, -5.0>*1.4*cscale;
camera {
location cpos
look_at <0.0, -1.2, 0.0>
right x*image_width/image_height
angle 60/cscale
}
//stellar color
#declare star_color = spline{//adapted from main sequence data table on wikipedia
linear_spline
// M/M pc class R/R L/L T
158,<.239,.420,1>// O2 16 ? 54,000
58,<.243,.424,1>// O5 14 ? 46,000
16,<.267,.447,1>// B0 5.7 16,000 29,000
5.4,<.341,.522,1>// B5 3.7 750 15,200
2.6,<.486,.647,1>// A0 2.3 63 9,600
1.9,<.612,.741,1>// A5 1.8 24 8,700
1.6,<.694,.8,1 >// F0 1.6 9.0 7,200
1.35,<.831,.894,1>//F5 1.2 4.0 6,400
1.08,<.93,.957,1>// G0 1.05 1.45 6,000
1.0,<.992,.996,1>// G2 1.0 1.0 5,900
0.95,<1,.965,.914>//G5 0.98 0.70 5,500
0.83,<1,.914,.796>//K0 0.89 0.36 5,150
0.62,<1,.796,.569>//K5 0.75 0.18 4,450
0.47,<1,.682,.384>//M0 0.64 0.075 3,850
0.25,<1,.541,.22>// M5 0.36 ? 3,200
}
//macro to calculate the area of overlap between two circles of radii R1, R2>=R1 centers seperated by delter
#macro set_eclipsed_area(Area,R1,R2,delter)
#local dd=abs(delter);
#local range1=(R2-R1);
#local range2=sqrt(R2*R2-R1*R1);
#local range3=(R1+R2);
#declare Area=-1;
#switch (dd)
#range (0,range1)
#declare Area=pi*R1*R1;
#break
#range (0,range2) //this is for xm <=0
#local xm=(R1*R1-R2*R2+dd*dd)/(2*dd);
#local aa=pi*R1*R1;
#local aa=aa-(R1*R1*acos(-xm/R1)+xm*sqrt(R1*R1-xm*xm));
#local aa=aa+R2*R2*acos((dd-xm)/R2)-(dd-xm)*sqrt(R2*R2-(dd-xm)*(dd-xm));
#declare Area=aa;
#break
#range (0,range3) //this is for xm >= 0
#local xm=(R1*R1-R2*R2+dd*dd)/(2*dd);
#local aa=R1*R1*acos(xm/R1)-xm*sqrt(R1*R1-xm*xm);
#local aa=aa+R2*R2*acos((dd-xm)/R2)-(dd-xm)*sqrt(R2*R2-(dd-xm)*(dd-xm));
#declare Area=aa;
#break
#else
#declare Area=0;
#end
#end
#declare rpm=5;
//orbital plane axis, tilting
//#declare tilta=function(tt){sin(2*pi*tt)*12}
#declare tilta=function(tt){max(int(rpm*tt),0)*12/rpm}
#declare tts=0;
#declare dtt=.005;
//binary star physical parameters
/*
a b c
0.1925 1.527 -0.9486
polynomial fit for m=a*r^2+b*r+c
*/
#declare r_of_m = function(mm) { (-1.527+sqrt(1.527*1.527-4*0.1925*(-0.9486-mm)))/(2*0.1925) };
#declare L_of_m = function(mm) { pow(mm,3.5) };
#declare m1=.8; //star masses, always have m1<=m2!
#declare m2=1.5;
#declare r1=r_of_m(m1); //stellar radii
#declare r2=r_of_m(m2);
#declare L1=L_of_m(m1); //stellar luminosities
#declare L2=L_of_m(m2);
#declare d=5*(r1+r2); //separation
#declare d1=m2*d/(m1+m2); //about center of mass
#declare d2=m1*d/(m1+m2);
#declare p1_0=-d1*x;
#declare p2_0=d2*x;
#declare p1=vrotate (p1_0,rpm*360*y*lclock);
#declare p1=vrotate (p1, tilta(lclock)*x);
#declare p2=vrotate (p2_0,rpm*360*y*lclock);
#declare p2=vrotate (p2, tilta(lclock)*x);
//Area Spline: used because
#declare tdd=0;
#declare dtd=.005;
#declare Areas = function{
spline {
quadratic_spline
#while(tdd<1.4*(r1+r2))
#declare Area=-1;
set_eclipsed_area(Area,r1,r2,tdd)
tdd,
#declare tdd=tdd+dtd;
#end
}
}
#macro L_tot(tt)
// #local tp1=vrotate (p1_0,rpm*360*orb_axis(tt)*tt);
//#local tp2=vrotate (p2_0,rpm*360*orb_axis(tt)*tt);
#local tp1=vrotate (p1_0,rpm*360*y*tt);
#local tp1=vrotate (tp1, tilta(tt)*x);
#local tp2=vrotate (p2_0,rpm*360*y*tt);
#local tp2=vrotate (tp2, tilta(tt)*x);
#local deltv=(tp1-tp1.z*z)-(tp2-tp2.z*z);
#local delt=vlength(deltv);
#local dz=tp1.z-tp2.z;
#declare tArea = 0;
#local Lm=0;
#if(dz>0)
#local Lm=L1*Areas(delt).x/(pi*r1*r1);
#end
#if(dz<0)
#local Lm=L2*Areas(delt).x/(pi*r2*r2);
#end
#declare Ltot=(L1+L2-Lm)/(L1+L2);
#end
union{
sphere{p1,r1
pigment{color rgb star_color(m1)}
finish{ambient 4*pow(m1,.25) diffuse 0}
}
sphere{p2,r2
pigment{color rgb star_color(m2)}
finish{ambient 4*pow(m2,.25) diffuse 0}
}
torus{vlength(p1),.05
pigment{color rgbt star_color(m1)+<0,0,0,.6>}
finish{ambient 4*pow(m1,.25) diffuse 0}
rotate x*tilta(lclock)
}
torus{vlength(p2),.05
pigment{color rgbt star_color(m2)+<0,0,0,.6>}
finish{ambient 4*pow(m2,.25) diffuse 0}
rotate x*tilta(lclock)
}
scale .2
}
//plot the macro
union{
// plot
#declare lth=.015;
#declare pt=0;
#declare dpt=.0005;
#declare vscale = 1;
#declare hscale=2.5;
#declare tscale=2.5*rpm;
#declare Area = -1;
#declare apt=pt+lclock;
#declare Ltot=0;
L_tot(apt)
#declare this=;
//marker for current brightness
cylinder{0,-.1*z,3*lth
pigment{color rgb <.8,1,.3>} finish{ambient 4 diffuse 0}
translate this-3*lth*x
}
union{
#while(pt>-1.0/rpm)
#declare pt=pt-dpt;
#declare apt=(pt+lclock);
#declare Ltot=0;
L_tot(apt)
#declare next=;
cylinder{this, next,lth pigment{color rgb <1,0,0>} finish{ambient 3}}
#declare this=next;
#end
}
cylinder{+.0*x,-(hscale+.0)*x,lth pigment{color rgb 1}finish{ambient 5 diffuse 0}}
text { ttf "arial.ttf","net Luminosity",.02, 0
pigment{color rgb <1,.7,.5>} finish{ambient 5 diffuse 0}
scale .18 rotate z*90
translate +.17*x+(vscale/2-.45)*y -.01*z
}
box{-.0*x-(.25)*y+.1*z,(hscale+.0)*x+(vscale+.25)*y+.05*z
pigment {
brick color rgb <0,1,0>, color rgb 0
brick_size 1/4 mortar .025
rotate x*90 translate .5*y
translate -x*tscale*lclock
}
finish{ambient 2}
translate -hscale*x
}
box{-.125*x-(.35)*y+.15*z,(hscale+.25)*x+(vscale+.35)*y+.35*z
pigment {color rgb <0,0,1> }
finish{ambient 2}
translate -hscale*x
}
scale 1.25
translate -3.5*y+.3*x
}