#include <stdlib.h>
#include <memory.h>
#include <math.h>
+#include "../../config.h"
#include "../q.h"
+#include "../types.h"
#include "active.h"
actlist_t* actlist_new()
free(a);
}
-void actlist_dump(actlist_t*a, int32_t y)
+void actlist_dump(actlist_t*a, int32_t y, double gridsize)
{
segment_t*s = a->list;
double lastx;
double x = ((double)s->delta.x*(y-s->a.y)/s->delta.y)+s->a.x;
if(s!=a->list) {
if(lastx>x)
- fprintf(stderr, "?%f<->%f? ", lastx, x);
+ fprintf(stderr, "?%.2f<->%.2f? ", lastx * gridsize, x * gridsize);
}
lastx = x;
}
- fprintf(stderr, "[%d]", s->nr);
+ fprintf(stderr, "[%d]", (int)s->nr);
s = s->right;
if(s) fprintf(stderr, " ");
- else fprintf(stderr, " y=%d\n", y);
+ else fprintf(stderr, " y=%.2f\n", y * gridsize);
}
}
void actlist_verify(actlist_t*a, int32_t y)
//double d = cmp(t, p1, p2);
double d = single_cmp(t, p1);
if(d>=0 && to_the_left) {
- actlist_dump(a, p1.y);
+ actlist_dump(a, p1.y, 1);
segment_t*s = a->list;
while(s) {
- fprintf(stderr, "[%d] %f/%f (%d,%d) -> (%d,%d)\n", s->nr,
+ fprintf(stderr, "[%d] %f/%f (%d,%d) -> (%d,%d)\n", SEGNR(s),
single_cmp(s,p1), cmp(s,p1,p2),
s->a.x, s->a.y, s->b.x, s->b.y);
s = s->right;
}
}
-static int actlist_splay(actlist_t*a, point_t p1, point_t p2)
+static void actlist_splay(actlist_t*a, point_t p1, point_t p2)
{
if(!a->list) return;
} else if(!a->root->rightchild) {
a->root = a->root->leftchild;
} else {
+#ifdef HAVE_LRAND48
if(lrand48()&1) {
+#else
+ if(((ptroff_t)s)&16) {
+#endif
// free up root->left->right
segment_t*t = a->root->leftchild;
while(t->rightchild) {