*.d
*.tmp
*.new
+core
+vgcore.*
+lumpy
+prime
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
#!/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 $!;
#!/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])$/;
}
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();
$!=0; system($_[0]); die "$! $?" if $! or $?;
}
+sub initdata_process_prime() {
+ my ($i,$fmt);
+ open P, "$prime" or die $!;
+ $!=0; $_= <P>; m/^(\d+) (\d+) .*/ or die "$_ ? $!";
+ ($dim,$nvertices)= ($1,$2);
+ $!=0; $_= <P>; m/^(\%.*)\n/ or die "$_ ? $!";
+ $fmt= $1;
+ for ($i=0; $i<$nvertices; $i++) {
+ $!=0; defined($_=<P>) 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 $!";
- $_= <I>;
- m/^(\d+) .*/ or die "$_ ?";
-
- $dim= $1;
-
- for ($i=0; $i<$dim; $i++) {
- for (;;) {
- $!=0; defined($_= <I>) or die "$initdata $!";
- last if m/\S/;
+ for ($i=0; $i<$nvertices; $i++) {
+ for ($k=0; $k<3; $k++) {
+ for (;;) {
+ $!=0; defined($_= <I>) 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 $!;
#include "common.h"
-#define XBITS 3
+#define XBITS 6 /*3*/
#define X (1<<XBITS)
#define YBITS 4
#define Y ((1<<YBITS) - 1)
int main(int argc, const char **argv) {
static const int prec= DBL_DIG+2;
- int vi, k;
+ int vi;
- if (argc!=10 || !strlen(argv[2]) || strlen(argv[2]) != strlen(argv[3]))
- { fputs("wrong # args or lengths\n",stderr); exit(8); }
+ if (argc!=1) { fputs("need no args\n",stderr); exit(8); }
+
+ printf("%d %d %d %d %d\n%%-%d.%dg\n",
+ DIM, N, X, Y, D3,
+ prec+5,prec);
- printf("%s%d%s%d%s%d%s%d%s%d\n",
- argv[7], DIM, argv[8], N, argv[8], X, argv[8], Y, argv[8], D3);
-
FOR_VERTEX(vi) {
int x= vi & XMASK; /* distance along strip */
int y= vi >> YSHIFT; /* distance across strip */
* 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;
* 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<V6; e++) ve[e]= EDGE_END2(vb,e);
assert(ve[0]>=0);
if (ve[5]>=0) addtriangle(vb,ve[0],ve[5]);
+//continue;
if (ve[1]>=0) addtriangle(vb,ve[1],ve[0]);
}
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;