X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=main.cc;h=645d93a568db6c4df3907f622413631f9e62ca1b;hb=HEAD;hp=593cf01aad65efcd1a2fec56f066d354db4a59f5;hpb=2e3e71f7eedb63bae01eb61518cc9639f3febb7c;p=moebius.git diff --git a/main.cc b/main.cc index 593cf01..645d93a 100644 --- a/main.cc +++ b/main.cc @@ -18,52 +18,94 @@ #include "graphics.hh" #include "parameter.hh" -static Parameter tn("tn", "Number of sections around `strip'", 30, 1, 1, 500); -static Parameter un("un", "Number of sections across `strip'", 15, 1, 1, 500); -static Parameter version("version", - "Version to use: 0=original strip, 1=reformulated," - " 2=reformulated again", 0, 1, 0, 2); -static Parameter theta("theta", "Angle of model rotation", - /*-PI/2.*/0, M_PI/8., -M_PI*2., M_PI*2.); -static Parameter eta("eta", "Angle of model elevation", - 0., M_PI/8., -M_PI*2., M_PI*2.); -static Parameter scale("scale", "Scale factor for resulting object", - 1.0, 0.25, 0.001, 1000.); -static Parameter planedistance("plane", - "Distance from projection plane to origin", - 4., .25, 0., 100.); -static Parameter eyedistance("eye", "Distance from projection eye to origin", - 1.5, .25, 0., 100.); -static Parameter cutoffdistance("cutoff", - "Distance from projection cutoff to origin", - 10., .25, -10., 100.); -static Parameter width("width", "Width of the `strip' before transformation", - .4, .1, 0., 1.); -static Parameter thickness("thick", "Thickness of the `pancake'", 1., .1, 0., 1.); -static Parameter bottomportion("bp", "Proportion in the bottom half", - .7, .1, 0., 1.); -static Parameter tear("tear", "Angle factor in tear-open", - 0/*1.1*/, .1, -5., 5.); -static Parameter teary("teary", "Axis y coord in tear-open", 1.3, .1, -10., 10.); -static Parameter twist("twist", "Angle per length in twist", - 0/*.8*/, .25, -5., 5.); -static Parameter twisty("twisty", "Axis y coord in twist", .85, .1, -10., 10.); -static Parameter bulge("bulge", "Amount of bulge", 0/*1.*/, .25, -15., 15.); -static Parameter bulgesd("bulgesd", "S.D. of bulge", 1., .2, .000001, 20.); -static Parameter bulgey("bulgey", "Axis y coord in bulge", .85, .1, -10., 10.); -static Parameter shearx("shearx", "Amount of shear (x)", 0., .1, -15., 15.); -static Parameter sheary("sheary", "Amount of shear (y)", 0/*1.*/, .1, -15., 15.); -static Parameter shearsdx("shearsdx", "S.D. of shear (x)", .5, .1, -15., 15.); -static Parameter shearsdy("shearsdy", "S.D. of shear (y)", .5, .1, -15., 15.); -static Parameter shearey("shearey", "Centre of shear (y)", 1.3, .1, -10., 10.); +static Parameter +tn("tn", "Number of sections around `strip'", 30, 1, 1, 500); + +static Parameter +un("un", "Number of sections across `strip'", 15, 1, 1, 500); + +static Parameter +version("version", "Version to use: 0=original strip," + " 1=reformulated, 2=reformulated again", 0, 1, 0, 2); + +static Parameter +theta("theta", "Angle of model rotation", + /*-PI/2.*/0, M_PI/8., -M_PI*2., M_PI*2.); + +static Parameter +eta("eta", "Angle of model elevation", + 0., M_PI/8., -M_PI*2., M_PI*2.); + +static Parameter +scale("scale", "Scale factor for resulting object", 1.0, 0.25, 0.001, 1000.); + +static Parameter +planedistance("plane", "Distance from projection plane to origin", + 4., .25, 0., 100.); + +static Parameter +eyedistance("eye", "Distance from projection eye to origin", + 1.5, .25, 0., 100.); + +static Parameter +cutoffdistance("cutoff", "Distance from projection cutoff to origin", + 10., .25, -10., 100.); + +static Parameter +width("width", "Width of the `strip' before transformation", .4, .1, 0., 1.); + +static Parameter +thickness("thick", "Thickness of the `pancake'", 1., .1, 0., 1.); + +static Parameter +bottomportion("bp", "Proportion in the bottom half", .7, .1, 0., 1.); + +static Parameter +tear("tear", "Angle factor in tear-open", 0/*1.1*/, .1, -5., 5.); + +static Parameter +teary("teary", "Axis y coord in tear-open", 1.3, .1, -10., 10.); + +static Parameter +twist("twist", "Angle per length in twist", 0/*.8*/, .25, -5., 5.); + +static Parameter +twisty("twisty", "Axis y coord in twist", .85, .1, -10., 10.); + +static Parameter +bulge("bulge", "Amount of bulge", 0/*1.*/, .25, -15., 15.); + +static Parameter +bulgesd("bulgesd", "S.D. of bulge", 1., .2, .000001, 20.); + +static Parameter +bulgey("bulgey", "Axis y coord in bulge", .85, .1, -10., 10.); + +static Parameter +shearx("shearx", "Amount of shear (x)", 0., .1, -15., 15.); + +static Parameter +sheary("sheary", "Amount of shear (y)", 0/*1.*/, .1, -15., 15.); + +static Parameter +shearsdx("shearsdx", "S.D. of shear (x)", .5, .1, -15., 15.); + +static Parameter +shearsdy("shearsdy", "S.D. of shear (y)", .5, .1, -15., 15.); + +static Parameter +shearey("shearey", "Centre of shear (y)", 1.3, .1, -10., 10.); + SortedCellList *list=0; X11Output *x11= 0; DualX11Output *dualx11= 0; +static Moebius *strip= 0; + void generate() { if (list) delete list; - Moebius *strip; + if (strip) { delete strip; strip= 0; } switch (version) { case 0: strip= new MoebiusStrip(width); break; case 1: strip= new MoebiusEnfoldment(thickness,bottomportion); break; @@ -90,11 +132,12 @@ void generate() { } t0= t1; } - delete strip; } int main(int argc, char **argv) { + static const char pointmap_cmd[]= "pointmap "; char buf[100]; + double pointmap_t, pointmap_u; for (;;) { Point::setobserver(theta,eta,planedistance,eyedistance,cutoffdistance); @@ -160,6 +203,15 @@ int main(int argc, char **argv) { AnyParameter::help(); } else if (!strcmp(buf,"help")) { AnyParameter::list(); + } else if (!strncmp(buf,pointmap_cmd,sizeof(pointmap_cmd)-1)) { + if (sscanf(buf+sizeof(pointmap_cmd)-1, "%lf %lf", + &pointmap_t, &pointmap_u) != 2) { + cerr << "failed to parse pointmap args\n"; + continue; + } + Point p= strip->middlepoint(pointmap_t,pointmap_u); + cout << "\n"; + for (int i=0; i<3; i++) cout << p.halftransformed()[i] << "\n"; } else if (!*buf) { break; } else {