From a0f36c8849d41b4be54f00e3f9e19ce79a67abae Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sat, 19 Jan 2008 01:15:32 +0000 Subject: [PATCH 1/1] best interpolation so far --- Makefile | 12 ++++++++++-- energy.c | 9 ++++----- interpolate.c | 16 +++++++++++----- 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/Makefile b/Makefile index dd4b218..ecccd72 100644 --- a/Makefile +++ b/Makefile @@ -40,8 +40,8 @@ lumpy.cfm: oldmoebius-converter prime.data ../moebius/ins-new ../moebius/a.out ring.cfm: oldmoebius-converter prime.data /dev/null ../moebius/a.out ./$^ -o$@ -best.CFM: minimise sgtatham.cfm - ./$^ -iwip.cfm -o$@ +best.CFM: + ./minimise sgtatham.cfm -iwip.cfm -o$@ view-%: view+%.o mgraph+%.o common.o $(CC) $(CFLAGS) -o $@ $^ $(LIBGSL) -L/usr/X11R6/lib -lX11 @@ -49,6 +49,14 @@ view-%: view+%.o mgraph+%.o common.o interpolate-%: interpolate+%.o mgraph+%.o common.o $(CC) $(CFLAGS) -o $@ $^ $(LIBGSL) +define interpolate +dense-$1.cfm: interpolate-$1 $2 + ./$$< <$2 $$o +endef + +$(eval $(call interpolate,64, best.CFM)) +$(eval $(call interpolate,125, dense-64.cfm, dense-64.cfm)) + # this ridiculous repetition is due to make being too lame view+%.o: view.c diff --git a/energy.c b/energy.c index 4789698..dd9206f 100644 --- a/energy.c +++ b/energy.c @@ -32,11 +32,10 @@ double compute_energy(const struct Vertices *vs) { if (printing) printf("%15lld c>e |", evaluations); - COST(3e2, line_bending_cost(vs->a)); - COST(1e3, edge_length_variation_cost(vs->a)); - COST(0.2e3, rim_proximity_cost(vs->a)); -// COST(1e2, graph_layout_cost(vs->a)); - COST(1e8, noncircular_rim_cost(vs->a)); + COST( 3e2, line_bending_cost(vs->a)); + COST( 1e3, edge_length_variation_cost(vs->a)); + COST( 0.2e3, rim_proximity_cost(vs->a)); + COST( 1e8, noncircular_rim_cost(vs->a)); if (printing) printf("| total %# e |", energy); diff --git a/interpolate.c b/interpolate.c index b705bcf..778e37c 100644 --- a/interpolate.c +++ b/interpolate.c @@ -94,6 +94,8 @@ static void traverse_next(Traverse *t) { t->v= v2; } +#if 0 + static void interpolate(void) { /* four points P Q R S, although P and S may be missing * interpolate in QR finding M. */ @@ -139,10 +141,12 @@ static void interpolate(void) { K srtarg[k]= all.a[vq][k]; K { + const double alpha= 3.0; all.a[vm][k]= 0.5 * (all.a[vq][k] + all.a[vr][k]); -// pqtarg[k]= 0.5 * (pqtarg[k] + all.a[vm][k]); -// srtarg[k]= 0.5 * (srtarg[k] + all.a[vm][k]); -// all.a[vm][k]= 0.5 * (pqtarg[k] + srtarg[k]); + pqtarg[k]= 0.5 * (pqtarg[k] + all.a[vm][k]); + srtarg[k]= 0.5 * (srtarg[k] + all.a[vm][k]); + all.a[vm][k]= (pqtarg[k] + srtarg[k] + alpha * all.a[vm][k]) + / (2 + alpha); note_computed(vm,k); } } @@ -151,7 +155,9 @@ static void interpolate(void) { } } -#if 0 +#endif + +#if 1 static void interpolate_line(int startvertex, int direction /* edge number */, @@ -222,7 +228,7 @@ static void interpolate(void) { int x,y; for (y=0; y<(Y+1)/2; y+=INC) { - interpolate_line(y<>1)&1), 0, OX*2+1); } for (x=0; x