chiark
/
gitweb
/
~ian
/
moebius2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
best interpolation so far
[moebius2.git]
/
interpolate.c
diff --git
a/interpolate.c
b/interpolate.c
index b705bcff861c4dcc2c01faba9e554be202ef65aa..778e37ceaefc6b3d8ed117a823e7e093ebc00055 100644
(file)
--- a/
interpolate.c
+++ b/
interpolate.c
@@
-94,6
+94,8
@@
static void traverse_next(Traverse *t) {
t->v= v2;
}
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. */
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 {
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]);
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);
}
}
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 */,
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) {
int x,y;
for (y=0; y<(Y+1)/2; y+=INC) {
- interpolate_line(y<<YSHIFT, 0, OX*2+1);
+ interpolate_line(y<<YSHIFT
| ((y>>1)&1)
, 0, OX*2+1);
}
for (x=0; x<X; x+=INC) {
interpolate_line( x, 5, OY);
}
for (x=0; x<X; x+=INC) {
interpolate_line( x, 5, OY);