From 04d38304c34c5cac06e7fed4c20e3fe108330b7b Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Wed, 2 Jan 2008 01:33:32 +0000 Subject: [PATCH] can use original model now --- .bzrignore | 4 ++++ Makefile | 10 +++++++++- approxmodel | 25 ++++++++++++++++++++++--- generator | 22 ++++++++++++++++++---- library.pl | 33 +++++++++++++++++++++++---------- mgraph.h | 2 +- primer.c | 27 ++++++++++----------------- view.c | 5 ++++- 8 files changed, 91 insertions(+), 37 deletions(-) diff --git a/.bzrignore b/.bzrignore index e8f4874..098b20b 100644 --- a/.bzrignore +++ b/.bzrignore @@ -6,3 +6,7 @@ best *.d *.tmp *.new +core +vgcore.* +lumpy +prime diff --git a/Makefile b/Makefile index b19bbaf..a4b09dc 100644 --- a/Makefile +++ b/Makefile @@ -10,20 +10,28 @@ CXXFLAGS= -MMD $(OPTIMISE) -g $(CXXWARNS) LIBGSL= -lgsl -lgslcblas +o= >$@.new && mv -f $@.new $@ + all: $(TARGETS) minimise: energy.o bgl.o common.o mgraph.o $(CXX) $(CXXFLAGS) -o $@ $^ $(LIBGSL) +prime: primer + ./$^ $o + primer: primer.o common.o $(CC) $(CFLAGS) -o $@ $^ $(LIBGSL) view: view.o common.o mgraph.o $(CC) $(CFLAGS) -o $@ $^ $(LIBGSL) -L/usr/X11R6/lib -lX11 -initial: generator primer sgtatham/z.typescript +sgtatham: generator prime sgtatham/z.typescript ./$^ -T -o$@ +lumpy: approxmodel prime ../moebius/ins-new ../moebius/a.out + ./$^ -o$@ + clean: rm -f *.o $(TARGETS) *.new *.tmp *.rej *.orig core vgcore.* rm -f initial diff --git a/approxmodel b/approxmodel index c1c7d36..cbe1799 100755 --- a/approxmodel +++ b/approxmodel @@ -1,18 +1,37 @@ #!/usr/bin/perl require 'library.pl'; die unless @ARGV==4; -($primer,$instructions,$aout,$output) = @ARGV; +($prime,$instructions,$aout,$output) = @ARGV; $output =~ s/^\-o// or die "$output ?"; -die if $primer =~ m/^\-/; +die if $prime =~ m/^\-/; die if $instructions =~ m/^\-/; $aoutin= "$output.aoutin.tmp"; $initdata= "$output.initdata.tmp"; run("cat $instructions >$aoutin"); -run("./$primer 'pointmap ' ' ' ' ' ' ' ' ' ' # ' 'echo ' ' ' u >>$aoutin"); open A, ">>$aoutin" or die $!; + +use Math::Trig; + +sub initdata_prime_point_callback ($$$$) { + my ($u,$v,$comment,$floatformat) = @_; # SGT's coordinates + # v corresponds to the old program's t, roughly + printf(A "pointmap $floatformat $floatformat %s\n", + $v/(pi), $u, $comment) + or die $!; +} + +sub initdata_return_vertex_transform () { + ($vertex[0],$vertex[2])= ($vertex[2],$vertex[0]); + map { $_ *= 0.7 } @vertex; + $vertex[1] *= -1; + $vertex[1] += 0.5; +} + +initdata_process_prime(); + print A "quit\n" or die $!; close A or die $!; diff --git a/generator b/generator index 6cdbab2..1812850 100755 --- a/generator +++ b/generator @@ -1,9 +1,9 @@ #!/usr/bin/perl require 'library.pl'; die unless @ARGV==4; -($primer,$zinput,$options,$output) = @ARGV; +($prime,$zinput,$options,$output) = @ARGV; $output =~ s/^\-o// or die "$output ?"; -die if $primer =~ m/^\-/; +die if $prime =~ m/^\-/; die if $zinput =~ m/^\-/; die unless $options =~ m/^\-([gTa])$/; @@ -31,10 +31,24 @@ for (;;) { } printf G "set print \"-\"\n" or die $!; + +sub initdata_prime_point_callback ($$$$) { + my ($u,$v,$comment,$floatformat) = @_; # SGT's coordinates + for ($k=0; $k<3; $k++) { + printf(G "print %s( $floatformat, $floatformat ) ;%s\n", + qw(x y z)[$k], $u, $v, $comment) + or die $!; + } +} + +sub initdata_return_vertex_transform () { + $vertex[1] *= -1; +} + +initdata_process_prime(); + close G or die $!; -run("./$primer 'print ' '+-+' 'xyz' '( ' ', ' '); # ' ". - "'print ' ', ' - >>$gnuplot"); run("gnuplot $gnuplot >$initdata"); make_initdata(); diff --git a/library.pl b/library.pl index cb7a59b..d95f619 100644 --- a/library.pl +++ b/library.pl @@ -3,21 +3,34 @@ sub run ($) { $!=0; system($_[0]); die "$! $?" if $! or $?; } +sub initdata_process_prime() { + my ($i,$fmt); + open P, "$prime" or die $!; + $!=0; $_=

; m/^(\d+) (\d+) .*/ or die "$_ ? $!"; + ($dim,$nvertices)= ($1,$2); + $!=0; $_=

; m/^(\%.*)\n/ or die "$_ ? $!"; + $fmt= $1; + for ($i=0; $i<$nvertices; $i++) { + $!=0; defined($_=

) or die "$prime $!"; + m/^\s*(\S+)\s*(\S+)\s*(.*)/ or die "$_ ?"; + initdata_prime_point_callback($1,$2,$3,$fmt); + } +} + sub make_initdata () { open I, "$initdata" or die "$initdata $!"; open B, ">$output.new" or die "$output.new $!"; - $_= ; - m/^(\d+) .*/ or die "$_ ?"; - - $dim= $1; - - for ($i=0; $i<$dim; $i++) { - for (;;) { - $!=0; defined($_= ) or die "$initdata $!"; - last if m/\S/; + for ($i=0; $i<$nvertices; $i++) { + for ($k=0; $k<3; $k++) { + for (;;) { + $!=0; defined($_= ) or die "$initdata $!"; + last if m/\S/; + } + $vertex[$k]= $_; } - print B pack "d", $_ or die $!; + initdata_return_vertex_transform(); + print B pack "d3", @vertex or die $!; } close B or die $!; diff --git a/mgraph.h b/mgraph.h index ba3ec29..e307978 100644 --- a/mgraph.h +++ b/mgraph.h @@ -62,7 +62,7 @@ #include "common.h" -#define XBITS 3 +#define XBITS 6 /*3*/ #define X (1<> YSHIFT; /* distance across strip */ @@ -26,18 +26,11 @@ int main(int argc, const char **argv) { * So that corresponds to 0..X (since 0==X in our scheme). * Vertices with odd y coordinate are halfway to the next x coordinate. */ - double v= (x*2 + (y&1)) * 1.0 / (X*2); + double v= (x*2 + (y&1)) * M_PI / (X*2); - if (!strchr(argv[9],'u')) - v *= M_PI; - - K { - if (k >= strlen(argv[2])) break; - printf("%s%c%c%s%-*.*g%s%-*.*g%s%03x %2d %2d\n", - argv[1], argv[2][k], argv[3][k], argv[4], - prec+5,prec,u, argv[5], prec+5,prec,v, - argv[6], vi, x, y); - } + printf("%-*.*g %-*.*g # %03x %2d %2d\n", + prec+5,prec,u, prec+5,prec,v, + vi, x, y); } flushoutput(); return 0; diff --git a/view.c b/view.c index 742db80..d265011 100644 --- a/view.c +++ b/view.c @@ -84,9 +84,12 @@ static void generate_display_list(void) { * orientable so it shouldn't matter). Picking the parallelogram * to our right avoids getting it wrong at the join. */ +//if ((vb & YMASK) > Y1) continue; +//if ((vb & XMASK) > 2) continue; for (e=0; e=0); if (ve[5]>=0) addtriangle(vb,ve[0],ve[5]); +//continue; if (ve[1]>=0) addtriangle(vb,ve[1],ve[0]); } @@ -97,7 +100,7 @@ static void generate_display_list(void) { if (vertex_in_triangles[v] != expd) { fprintf(stderr,"vertex %02x used for %d triangles, expected %d\n", v, vertex_in_triangles[v], expd); - abort(); +// abort(); } } vertex_in_triangles_checked= 1; -- 2.30.2