mirror of
https://github.com/GoldenCheetah/GoldenCheetah.git
synced 2026-04-15 05:32:21 +00:00
Future's Algorithm
.. for calculating Vornoi diagrams.
This commit is contained in:
30
contrib/voronoi/Doc
Normal file
30
contrib/voronoi/Doc
Normal file
@@ -0,0 +1,30 @@
|
||||
voronoi - compute Voronoi diagram or Delaunay triangulation
|
||||
SYNOPSIS
|
||||
voronoi [-s -t] <pointfile >outputfile
|
||||
|
||||
Voronoi reads the standard input for a set of points in the plane and writes either
|
||||
the Voronoi diagram or the Delaunay triangulation to the standard output.
|
||||
Each input line should consist of two real numbers, separated by white space.
|
||||
|
||||
If option
|
||||
-t
|
||||
is present, the Delaunay triangulation is produced.
|
||||
Each output line is a triple
|
||||
i j k
|
||||
which are the indices of the three points in a Delaunay triangle. Points are
|
||||
numbered starting at 0. If this option is not present, the
|
||||
Voronoi diagram is produced. There are four output record types.
|
||||
s a b
|
||||
indicates that an input point at coordinates
|
||||
l a b c
|
||||
indicates a line with equation ax + by = c.
|
||||
v a b
|
||||
indicates a vertex at a b.
|
||||
e l v1 v2
|
||||
indicates a Voronoi segment which is a subsegment of line number l;
|
||||
with endpoints numbered v1 and v2. If v1 or v2 is -1, the line
|
||||
extends to infinity.
|
||||
|
||||
AUTHOR
|
||||
Steve J. Fortune (1987) A Sweepline Algorithm for Voronoi Diagrams,
|
||||
Algorithmica 2, 153-174.
|
||||
14
contrib/voronoi/Makefile-testing
Normal file
14
contrib/voronoi/Makefile-testing
Normal file
@@ -0,0 +1,14 @@
|
||||
C=edgelist.c geometry.c heap.c main.c memory.c output.c voronoi.c
|
||||
O=edgelist.o geometry.o heap.o main.o memory.o output.o voronoi.o
|
||||
|
||||
tt: voronoi t
|
||||
./voronoi <t >tt
|
||||
voronoi: $O
|
||||
cc -o voronoi $O -lm
|
||||
$O:vdefs.h
|
||||
|
||||
voronoi.tar : $C vdefs.h Makefile Doc t
|
||||
tar -cf voronoi.tar $C vdefs.h Makefile Doc t
|
||||
|
||||
mailable: $C vdefs.h Makefile t
|
||||
bundle $C vdefs.h Makefile t > mailable
|
||||
188
contrib/voronoi/edgelist.c
Normal file
188
contrib/voronoi/edgelist.c
Normal file
@@ -0,0 +1,188 @@
|
||||
|
||||
/*** EDGELIST.C ***/
|
||||
|
||||
#include "vdefs.h"
|
||||
|
||||
int ELhashsize ;
|
||||
Site * bottomsite ;
|
||||
Freelist hfl ;
|
||||
Halfedge * ELleftend, * ELrightend, **ELhash ;
|
||||
|
||||
int ntry, totalsearch ;
|
||||
|
||||
void
|
||||
ELinitialize(void)
|
||||
{
|
||||
int i ;
|
||||
|
||||
freeinit(&hfl, sizeof(Halfedge)) ;
|
||||
ELhashsize = 2 * sqrt_nsites ;
|
||||
ELhash = (Halfedge **)myalloc( sizeof(*ELhash) * ELhashsize) ;
|
||||
for (i = 0 ; i < ELhashsize ; i++)
|
||||
{
|
||||
ELhash[i] = (Halfedge *)NULL ;
|
||||
}
|
||||
ELleftend = HEcreate((Edge *)NULL, 0) ;
|
||||
ELrightend = HEcreate((Edge *)NULL, 0) ;
|
||||
ELleftend->ELleft = (Halfedge *)NULL ;
|
||||
ELleftend->ELright = ELrightend ;
|
||||
ELrightend->ELleft = ELleftend ;
|
||||
ELrightend->ELright = (Halfedge *)NULL ;
|
||||
ELhash[0] = ELleftend ;
|
||||
ELhash[ELhashsize-1] = ELrightend ;
|
||||
}
|
||||
|
||||
Halfedge *
|
||||
HEcreate(Edge * e, int pm)
|
||||
{
|
||||
Halfedge * answer ;
|
||||
|
||||
answer = (Halfedge *)getfree(&hfl) ;
|
||||
answer->ELedge = e ;
|
||||
answer->ELpm = pm ;
|
||||
answer->PQnext = (Halfedge *)NULL ;
|
||||
answer->vertex = (Site *)NULL ;
|
||||
answer->ELrefcnt = 0 ;
|
||||
return (answer) ;
|
||||
}
|
||||
|
||||
void
|
||||
ELinsert(Halfedge * lb, Halfedge * new)
|
||||
{
|
||||
new->ELleft = lb ;
|
||||
new->ELright = lb->ELright ;
|
||||
(lb->ELright)->ELleft = new ;
|
||||
lb->ELright = new ;
|
||||
}
|
||||
|
||||
/* Get entry from hash table, pruning any deleted nodes */
|
||||
|
||||
Halfedge *
|
||||
ELgethash(int b)
|
||||
{
|
||||
Halfedge * he ;
|
||||
|
||||
if ((b < 0) || (b >= ELhashsize))
|
||||
{
|
||||
return ((Halfedge *)NULL) ;
|
||||
}
|
||||
he = ELhash[b] ;
|
||||
if ((he == (Halfedge *)NULL) || (he->ELedge != (Edge *)DELETED))
|
||||
{
|
||||
return (he) ;
|
||||
}
|
||||
/* Hash table points to deleted half edge. Patch as necessary. */
|
||||
ELhash[b] = (Halfedge *)NULL ;
|
||||
if ((--(he->ELrefcnt)) == 0)
|
||||
{
|
||||
makefree((Freenode *)he, (Freelist *)&hfl) ;
|
||||
}
|
||||
return ((Halfedge *)NULL) ;
|
||||
}
|
||||
|
||||
Halfedge *
|
||||
ELleftbnd(Point * p)
|
||||
{
|
||||
int i, bucket ;
|
||||
Halfedge * he ;
|
||||
|
||||
/* Use hash table to get close to desired halfedge */
|
||||
bucket = (p->x - xmin) / deltax * ELhashsize ;
|
||||
if (bucket < 0)
|
||||
{
|
||||
bucket = 0 ;
|
||||
}
|
||||
if (bucket >= ELhashsize)
|
||||
{
|
||||
bucket = ELhashsize - 1 ;
|
||||
}
|
||||
he = ELgethash(bucket) ;
|
||||
if (he == (Halfedge *)NULL)
|
||||
{
|
||||
for (i = 1 ; 1 ; i++)
|
||||
{
|
||||
if ((he = ELgethash(bucket-i)) != (Halfedge *)NULL)
|
||||
{
|
||||
break ;
|
||||
}
|
||||
if ((he = ELgethash(bucket+i)) != (Halfedge *)NULL)
|
||||
{
|
||||
break ;
|
||||
}
|
||||
}
|
||||
totalsearch += i ;
|
||||
}
|
||||
ntry++ ;
|
||||
/* Now search linear list of halfedges for the corect one */
|
||||
if (he == ELleftend || (he != ELrightend && right_of(he,p)))
|
||||
{
|
||||
do {
|
||||
he = he->ELright ;
|
||||
} while (he != ELrightend && right_of(he,p)) ;
|
||||
he = he->ELleft ;
|
||||
}
|
||||
else
|
||||
{
|
||||
do {
|
||||
he = he->ELleft ;
|
||||
} while (he != ELleftend && !right_of(he,p)) ;
|
||||
}
|
||||
/*** Update hash table and reference counts ***/
|
||||
if ((bucket > 0) && (bucket < ELhashsize-1))
|
||||
{
|
||||
if (ELhash[bucket] != (Halfedge *)NULL)
|
||||
{
|
||||
(ELhash[bucket]->ELrefcnt)-- ;
|
||||
}
|
||||
ELhash[bucket] = he ;
|
||||
(ELhash[bucket]->ELrefcnt)++ ;
|
||||
}
|
||||
return (he) ;
|
||||
}
|
||||
|
||||
/*** This delete routine can't reclaim node, since pointers from hash
|
||||
: table may be present.
|
||||
***/
|
||||
|
||||
void
|
||||
ELdelete(Halfedge * he)
|
||||
{
|
||||
(he->ELleft)->ELright = he->ELright ;
|
||||
(he->ELright)->ELleft = he->ELleft ;
|
||||
he->ELedge = (Edge *)DELETED ;
|
||||
}
|
||||
|
||||
Halfedge *
|
||||
ELright(Halfedge * he)
|
||||
{
|
||||
return (he->ELright) ;
|
||||
}
|
||||
|
||||
Halfedge *
|
||||
ELleft(Halfedge * he)
|
||||
{
|
||||
return (he->ELleft) ;
|
||||
}
|
||||
|
||||
Site *
|
||||
leftreg(Halfedge * he)
|
||||
{
|
||||
if (he->ELedge == (Edge *)NULL)
|
||||
{
|
||||
return(bottomsite) ;
|
||||
}
|
||||
return (he->ELpm == le ? he->ELedge->reg[le] :
|
||||
he->ELedge->reg[re]) ;
|
||||
}
|
||||
|
||||
Site *
|
||||
rightreg(Halfedge * he)
|
||||
{
|
||||
if (he->ELedge == (Edge *)NULL)
|
||||
{
|
||||
return(bottomsite) ;
|
||||
}
|
||||
return (he->ELpm == le ? he->ELedge->reg[re] :
|
||||
he->ELedge->reg[le]) ;
|
||||
}
|
||||
|
||||
221
contrib/voronoi/geometry.c
Normal file
221
contrib/voronoi/geometry.c
Normal file
@@ -0,0 +1,221 @@
|
||||
|
||||
/*** GEOMETRY.C ***/
|
||||
|
||||
#include <math.h>
|
||||
#include "vdefs.h"
|
||||
|
||||
float deltax, deltay ;
|
||||
int nedges, sqrt_nsites, nvertices ;
|
||||
Freelist efl ;
|
||||
|
||||
void
|
||||
geominit(void)
|
||||
{
|
||||
freeinit(&efl, sizeof(Edge)) ;
|
||||
nvertices = nedges = 0 ;
|
||||
sqrt_nsites = sqrt(nsites+4) ;
|
||||
deltay = ymax - ymin ;
|
||||
deltax = xmax - xmin ;
|
||||
}
|
||||
|
||||
Edge *
|
||||
bisect(Site * s1, Site * s2)
|
||||
{
|
||||
float dx, dy, adx, ady ;
|
||||
Edge * newedge ;
|
||||
|
||||
newedge = (Edge *)getfree(&efl) ;
|
||||
newedge->reg[0] = s1 ;
|
||||
newedge->reg[1] = s2 ;
|
||||
ref(s1) ;
|
||||
ref(s2) ;
|
||||
newedge->ep[0] = newedge->ep[1] = (Site *)NULL ;
|
||||
dx = s2->coord.x - s1->coord.x ;
|
||||
dy = s2->coord.y - s1->coord.y ;
|
||||
adx = dx>0 ? dx : -dx ;
|
||||
ady = dy>0 ? dy : -dy ;
|
||||
newedge->c = s1->coord.x * dx + s1->coord.y * dy + (dx*dx +
|
||||
dy*dy) * 0.5 ;
|
||||
if (adx > ady)
|
||||
{
|
||||
newedge->a = 1.0 ;
|
||||
newedge->b = dy/dx ;
|
||||
newedge->c /= dx ;
|
||||
}
|
||||
else
|
||||
{
|
||||
newedge->b = 1.0 ;
|
||||
newedge->a = dx/dy ;
|
||||
newedge->c /= dy ;
|
||||
}
|
||||
newedge->edgenbr = nedges ;
|
||||
out_bisector(newedge) ;
|
||||
nedges++ ;
|
||||
return (newedge) ;
|
||||
}
|
||||
|
||||
Site *
|
||||
intersect(Halfedge * el1, Halfedge * el2)
|
||||
{
|
||||
Edge * e1, * e2, * e ;
|
||||
Halfedge * el ;
|
||||
float d, xint, yint ;
|
||||
int right_of_site ;
|
||||
Site * v ;
|
||||
|
||||
e1 = el1->ELedge ;
|
||||
e2 = el2->ELedge ;
|
||||
if ((e1 == (Edge*)NULL) || (e2 == (Edge*)NULL))
|
||||
{
|
||||
return ((Site *)NULL) ;
|
||||
}
|
||||
if (e1->reg[1] == e2->reg[1])
|
||||
{
|
||||
return ((Site *)NULL) ;
|
||||
}
|
||||
d = (e1->a * e2->b) - (e1->b * e2->a) ;
|
||||
if ((-1.0e-10 < d) && (d < 1.0e-10))
|
||||
{
|
||||
return ((Site *)NULL) ;
|
||||
}
|
||||
xint = (e1->c * e2->b - e2->c * e1->b) / d ;
|
||||
yint = (e2->c * e1->a - e1->c * e2->a) / d ;
|
||||
if ((e1->reg[1]->coord.y < e2->reg[1]->coord.y) ||
|
||||
(e1->reg[1]->coord.y == e2->reg[1]->coord.y &&
|
||||
e1->reg[1]->coord.x < e2->reg[1]->coord.x))
|
||||
{
|
||||
el = el1 ;
|
||||
e = e1 ;
|
||||
}
|
||||
else
|
||||
{
|
||||
el = el2 ;
|
||||
e = e2 ;
|
||||
}
|
||||
right_of_site = (xint >= e->reg[1]->coord.x) ;
|
||||
if ((right_of_site && (el->ELpm == le)) ||
|
||||
(!right_of_site && (el->ELpm == re)))
|
||||
{
|
||||
return ((Site *)NULL) ;
|
||||
}
|
||||
v = (Site *)getfree(&sfl) ;
|
||||
v->refcnt = 0 ;
|
||||
v->coord.x = xint ;
|
||||
v->coord.y = yint ;
|
||||
return (v) ;
|
||||
}
|
||||
|
||||
/*** returns 1 if p is to right of halfedge e ***/
|
||||
|
||||
int
|
||||
right_of(Halfedge * el, Point * p)
|
||||
{
|
||||
Edge * e ;
|
||||
Site * topsite ;
|
||||
int right_of_site, above, fast ;
|
||||
float dxp, dyp, dxs, t1, t2, t3, yl ;
|
||||
|
||||
e = el->ELedge ;
|
||||
topsite = e->reg[1] ;
|
||||
right_of_site = (p->x > topsite->coord.x) ;
|
||||
if (right_of_site && (el->ELpm == le))
|
||||
{
|
||||
return (1) ;
|
||||
}
|
||||
if(!right_of_site && (el->ELpm == re))
|
||||
{
|
||||
return (0) ;
|
||||
}
|
||||
if (e->a == 1.0)
|
||||
{
|
||||
dyp = p->y - topsite->coord.y ;
|
||||
dxp = p->x - topsite->coord.x ;
|
||||
fast = 0 ;
|
||||
if ((!right_of_site & (e->b < 0.0)) ||
|
||||
(right_of_site & (e->b >= 0.0)))
|
||||
{
|
||||
fast = above = (dyp >= e->b*dxp) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
above = ((p->x + p->y * e->b) > (e->c)) ;
|
||||
if (e->b < 0.0)
|
||||
{
|
||||
above = !above ;
|
||||
}
|
||||
if (!above)
|
||||
{
|
||||
fast = 1 ;
|
||||
}
|
||||
}
|
||||
if (!fast)
|
||||
{
|
||||
dxs = topsite->coord.x - (e->reg[0])->coord.x ;
|
||||
above = (e->b * (dxp*dxp - dyp*dyp))
|
||||
<
|
||||
(dxs * dyp * (1.0 + 2.0 * dxp /
|
||||
dxs + e->b * e->b)) ;
|
||||
if (e->b < 0.0)
|
||||
{
|
||||
above = !above ;
|
||||
}
|
||||
}
|
||||
}
|
||||
else /*** e->b == 1.0 ***/
|
||||
{
|
||||
yl = e->c - e->a * p->x ;
|
||||
t1 = p->y - yl ;
|
||||
t2 = p->x - topsite->coord.x ;
|
||||
t3 = yl - topsite->coord.y ;
|
||||
above = ((t1*t1) > ((t2 * t2) + (t3 * t3))) ;
|
||||
}
|
||||
return (el->ELpm == le ? above : !above) ;
|
||||
}
|
||||
|
||||
void
|
||||
endpoint(Edge * e, int lr, Site * s)
|
||||
{
|
||||
e->ep[lr] = s ;
|
||||
ref(s) ;
|
||||
if (e->ep[re-lr] == (Site *)NULL)
|
||||
{
|
||||
return ;
|
||||
}
|
||||
out_ep(e) ;
|
||||
deref(e->reg[le]) ;
|
||||
deref(e->reg[re]) ;
|
||||
makefree((Freenode *)e, (Freelist *) &efl) ;
|
||||
}
|
||||
|
||||
float
|
||||
dist(Site * s, Site * t)
|
||||
{
|
||||
float dx,dy ;
|
||||
|
||||
dx = s->coord.x - t->coord.x ;
|
||||
dy = s->coord.y - t->coord.y ;
|
||||
return (sqrt(dx*dx + dy*dy)) ;
|
||||
}
|
||||
|
||||
void
|
||||
makevertex(Site * v)
|
||||
{
|
||||
v->sitenbr = nvertices++ ;
|
||||
out_vertex(v) ;
|
||||
}
|
||||
|
||||
void
|
||||
deref(Site * v)
|
||||
{
|
||||
if (--(v->refcnt) == 0 )
|
||||
{
|
||||
makefree((Freenode *)v, (Freelist *)&sfl) ;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
ref(Site * v)
|
||||
{
|
||||
++(v->refcnt) ;
|
||||
}
|
||||
|
||||
118
contrib/voronoi/heap.c
Normal file
118
contrib/voronoi/heap.c
Normal file
@@ -0,0 +1,118 @@
|
||||
|
||||
/*** HEAP.C ***/
|
||||
|
||||
|
||||
#include "vdefs.h"
|
||||
|
||||
int PQmin, PQcount, PQhashsize ;
|
||||
Halfedge * PQhash ;
|
||||
|
||||
void
|
||||
PQinsert(Halfedge * he, Site * v, float offset)
|
||||
{
|
||||
Halfedge * last, * next ;
|
||||
|
||||
he->vertex = v ;
|
||||
ref(v) ;
|
||||
he->ystar = v->coord.y + offset ;
|
||||
last = &PQhash[ PQbucket(he)] ;
|
||||
while ((next = last->PQnext) != (Halfedge *)NULL &&
|
||||
(he->ystar > next->ystar ||
|
||||
(he->ystar == next->ystar &&
|
||||
v->coord.x > next->vertex->coord.x)))
|
||||
{
|
||||
last = next ;
|
||||
}
|
||||
he->PQnext = last->PQnext ;
|
||||
last->PQnext = he ;
|
||||
PQcount++ ;
|
||||
}
|
||||
|
||||
void
|
||||
PQdelete(Halfedge * he)
|
||||
{
|
||||
Halfedge * last;
|
||||
|
||||
if(he -> vertex != (Site *) NULL)
|
||||
{
|
||||
last = &PQhash[PQbucket(he)] ;
|
||||
while (last -> PQnext != he)
|
||||
{
|
||||
last = last->PQnext ;
|
||||
}
|
||||
last->PQnext = he->PQnext;
|
||||
PQcount-- ;
|
||||
deref(he->vertex) ;
|
||||
he->vertex = (Site *)NULL ;
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
PQbucket(Halfedge * he)
|
||||
{
|
||||
int bucket ;
|
||||
|
||||
|
||||
if (he->ystar < ymin) bucket = 0;
|
||||
else if (he->ystar >= ymax) bucket = PQhashsize-1;
|
||||
else bucket = (he->ystar - ymin)/deltay * PQhashsize;
|
||||
if (bucket < 0)
|
||||
{
|
||||
bucket = 0 ;
|
||||
}
|
||||
if (bucket >= PQhashsize)
|
||||
{
|
||||
bucket = PQhashsize-1 ;
|
||||
}
|
||||
if (bucket < PQmin)
|
||||
{
|
||||
PQmin = bucket ;
|
||||
}
|
||||
return (bucket);
|
||||
}
|
||||
|
||||
int
|
||||
PQempty(void)
|
||||
{
|
||||
return (PQcount == 0) ;
|
||||
}
|
||||
|
||||
|
||||
Point
|
||||
PQ_min(void)
|
||||
{
|
||||
Point answer ;
|
||||
|
||||
while (PQhash[PQmin].PQnext == (Halfedge *)NULL)
|
||||
{
|
||||
++PQmin ;
|
||||
}
|
||||
answer.x = PQhash[PQmin].PQnext->vertex->coord.x ;
|
||||
answer.y = PQhash[PQmin].PQnext->ystar ;
|
||||
return (answer) ;
|
||||
}
|
||||
|
||||
Halfedge *
|
||||
PQextractmin(void)
|
||||
{
|
||||
Halfedge * curr ;
|
||||
|
||||
curr = PQhash[PQmin].PQnext ;
|
||||
PQhash[PQmin].PQnext = curr->PQnext ;
|
||||
PQcount-- ;
|
||||
return (curr) ;
|
||||
}
|
||||
|
||||
void
|
||||
PQinitialize(void)
|
||||
{
|
||||
int i ;
|
||||
|
||||
PQcount = PQmin = 0 ;
|
||||
PQhashsize = 4 * sqrt_nsites ;
|
||||
PQhash = (Halfedge *)myalloc(PQhashsize * sizeof *PQhash) ;
|
||||
for (i = 0 ; i < PQhashsize; i++)
|
||||
{
|
||||
PQhash[i].PQnext = (Halfedge *)NULL ;
|
||||
}
|
||||
}
|
||||
161
contrib/voronoi/main.c
Normal file
161
contrib/voronoi/main.c
Normal file
@@ -0,0 +1,161 @@
|
||||
/*** MAIN.C ***/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h> /* realloc(), qsort() */
|
||||
|
||||
#include "vdefs.h"
|
||||
|
||||
Site * readone(void), * nextone(void) ;
|
||||
void readsites(void) ;
|
||||
|
||||
int sorted, triangulate, plot, debug, nsites, siteidx ;
|
||||
float xmin, xmax, ymin, ymax ;
|
||||
Site * sites ;
|
||||
Freelist sfl ;
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
int c ;
|
||||
Site *(*next)() ;
|
||||
|
||||
sorted = triangulate = plot = debug = 0 ;
|
||||
while ((c = getopt(argc, argv, "dpst")) != EOF)
|
||||
{
|
||||
switch(c)
|
||||
{
|
||||
case 'd':
|
||||
debug = 1 ;
|
||||
break ;
|
||||
case 's':
|
||||
sorted = 1 ;
|
||||
break ;
|
||||
case 't':
|
||||
triangulate = 1 ;
|
||||
break ;
|
||||
case 'p':
|
||||
plot = 1 ;
|
||||
break ;
|
||||
}
|
||||
}
|
||||
|
||||
freeinit(&sfl, sizeof(Site)) ;
|
||||
if (sorted)
|
||||
{
|
||||
scanf("%d %f %f %f %f", &nsites, &xmin, &xmax, &ymin, &ymax) ;
|
||||
next = readone ;
|
||||
}
|
||||
else
|
||||
{
|
||||
readsites() ;
|
||||
next = nextone ;
|
||||
}
|
||||
siteidx = 0 ;
|
||||
geominit() ;
|
||||
if (plot)
|
||||
{
|
||||
plotinit() ;
|
||||
}
|
||||
voronoi(next) ;
|
||||
return (0) ;
|
||||
}
|
||||
|
||||
/*** sort sites on y, then x, coord ***/
|
||||
|
||||
int
|
||||
scomp(const void * vs1, const void * vs2)
|
||||
{
|
||||
Point * s1 = (Point *)vs1 ;
|
||||
Point * s2 = (Point *)vs2 ;
|
||||
|
||||
if (s1->y < s2->y)
|
||||
{
|
||||
return (-1) ;
|
||||
}
|
||||
if (s1->y > s2->y)
|
||||
{
|
||||
return (1) ;
|
||||
}
|
||||
if (s1->x < s2->x)
|
||||
{
|
||||
return (-1) ;
|
||||
}
|
||||
if (s1->x > s2->x)
|
||||
{
|
||||
return (1) ;
|
||||
}
|
||||
return (0) ;
|
||||
}
|
||||
|
||||
/*** return a single in-storage site ***/
|
||||
|
||||
Site *
|
||||
nextone(void)
|
||||
{
|
||||
Site * s ;
|
||||
|
||||
if (siteidx < nsites)
|
||||
{
|
||||
s = &sites[siteidx++];
|
||||
return (s) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
return ((Site *)NULL) ;
|
||||
}
|
||||
}
|
||||
|
||||
/*** read all sites, sort, and compute xmin, xmax, ymin, ymax ***/
|
||||
|
||||
void
|
||||
readsites(void)
|
||||
{
|
||||
int i ;
|
||||
|
||||
nsites = 0 ;
|
||||
sites = (Site *) myalloc(4000 * sizeof(Site));
|
||||
while (scanf("%f %f", &sites[nsites].coord.x,
|
||||
&sites[nsites].coord.y) !=EOF)
|
||||
{
|
||||
sites[nsites].sitenbr = nsites ;
|
||||
sites[nsites++].refcnt = 0 ;
|
||||
if (nsites % 4000 == 0)
|
||||
sites = (Site *)
|
||||
realloc(sites,(nsites+4000)*sizeof(Site));
|
||||
}
|
||||
|
||||
qsort((void *)sites, nsites, sizeof(Site), scomp) ;
|
||||
xmin = sites[0].coord.x ;
|
||||
xmax = sites[0].coord.x ;
|
||||
for (i = 1 ; i < nsites ; ++i)
|
||||
{
|
||||
if(sites[i].coord.x < xmin)
|
||||
{
|
||||
xmin = sites[i].coord.x ;
|
||||
}
|
||||
if (sites[i].coord.x > xmax)
|
||||
{
|
||||
xmax = sites[i].coord.x ;
|
||||
}
|
||||
}
|
||||
ymin = sites[0].coord.y ;
|
||||
ymax = sites[nsites-1].coord.y ;
|
||||
}
|
||||
|
||||
/*** read one site ***/
|
||||
|
||||
Site *
|
||||
readone(void)
|
||||
{
|
||||
Site * s ;
|
||||
|
||||
s = (Site *)getfree(&sfl) ;
|
||||
s->refcnt = 0 ;
|
||||
s->sitenbr = siteidx++ ;
|
||||
if (scanf("%f %f", &(s->coord.x), &(s->coord.y)) == EOF)
|
||||
{
|
||||
return ((Site *)NULL ) ;
|
||||
}
|
||||
return (s) ;
|
||||
}
|
||||
|
||||
57
contrib/voronoi/memory.c
Normal file
57
contrib/voronoi/memory.c
Normal file
@@ -0,0 +1,57 @@
|
||||
|
||||
/*** MEMORY.C ***/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h> /* malloc(), exit() */
|
||||
|
||||
#include "vdefs.h"
|
||||
|
||||
extern int sqrt_nsites, siteidx ;
|
||||
|
||||
void
|
||||
freeinit(Freelist * fl, int size)
|
||||
{
|
||||
fl->head = (Freenode *)NULL ;
|
||||
fl->nodesize = size ;
|
||||
}
|
||||
|
||||
char *
|
||||
getfree(Freelist * fl)
|
||||
{
|
||||
int i ;
|
||||
Freenode * t ;
|
||||
if (fl->head == (Freenode *)NULL)
|
||||
{
|
||||
t = (Freenode *) myalloc(sqrt_nsites * fl->nodesize) ;
|
||||
for(i = 0 ; i < sqrt_nsites ; i++)
|
||||
{
|
||||
makefree((Freenode *)((char *)t+i*fl->nodesize), fl) ;
|
||||
}
|
||||
}
|
||||
t = fl->head ;
|
||||
fl->head = (fl->head)->nextfree ;
|
||||
return ((char *)t) ;
|
||||
}
|
||||
|
||||
void
|
||||
makefree(Freenode * curr, Freelist * fl)
|
||||
{
|
||||
curr->nextfree = fl->head ;
|
||||
fl->head = curr ;
|
||||
}
|
||||
|
||||
int total_alloc ;
|
||||
|
||||
char *
|
||||
myalloc(unsigned n)
|
||||
{
|
||||
char * t ;
|
||||
if ((t=malloc(n)) == (char *) 0)
|
||||
{
|
||||
fprintf(stderr,"Insufficient memory processing site %d (%d bytes in use)\n",
|
||||
siteidx, total_alloc) ;
|
||||
return(0) ; // was exit(0) in original source, we aint having that here !!!
|
||||
}
|
||||
total_alloc += n ;
|
||||
return (t) ;
|
||||
}
|
||||
244
contrib/voronoi/output.c
Normal file
244
contrib/voronoi/output.c
Normal file
@@ -0,0 +1,244 @@
|
||||
|
||||
/*** OUTPUT.C ***/
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include "vdefs.h"
|
||||
|
||||
extern int triangulate, plot, debug ;
|
||||
extern float ymax, ymin, xmax, xmin ;
|
||||
|
||||
float pxmin, pxmax, pymin, pymax, cradius;
|
||||
|
||||
void
|
||||
openpl(void)
|
||||
{
|
||||
}
|
||||
|
||||
#pragma argsused
|
||||
void
|
||||
line(float ax, float ay, float bx, float by)
|
||||
{
|
||||
}
|
||||
|
||||
#pragma argsused
|
||||
void
|
||||
circle(float ax, float ay, float radius)
|
||||
{
|
||||
}
|
||||
|
||||
#pragma argsused
|
||||
void
|
||||
range(float pxmin, float pxmax, float pymin, float pymax)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
out_bisector(Edge * e)
|
||||
{
|
||||
if (triangulate && plot && !debug)
|
||||
{
|
||||
line(e->reg[0]->coord.x, e->reg[0]->coord.y,
|
||||
e->reg[1]->coord.x, e->reg[1]->coord.y) ;
|
||||
}
|
||||
if (!triangulate && !plot && !debug)
|
||||
{
|
||||
printf("l %f %f %f\n", e->a, e->b, e->c) ;
|
||||
}
|
||||
if (debug)
|
||||
{
|
||||
printf("line(%d) %gx+%gy=%g, bisecting %d %d\n", e->edgenbr,
|
||||
e->a, e->b, e->c, e->reg[le]->sitenbr, e->reg[re]->sitenbr) ;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
out_ep(Edge * e)
|
||||
{
|
||||
if (!triangulate && plot)
|
||||
{
|
||||
clip_line(e) ;
|
||||
}
|
||||
if (!triangulate && !plot)
|
||||
{
|
||||
printf("e %d", e->edgenbr);
|
||||
printf(" %d ", e->ep[le] != (Site *)NULL ? e->ep[le]->sitenbr : -1) ;
|
||||
printf("%d\n", e->ep[re] != (Site *)NULL ? e->ep[re]->sitenbr : -1) ;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
out_vertex(Site * v)
|
||||
{
|
||||
if (!triangulate && !plot && !debug)
|
||||
{
|
||||
printf ("v %f %f\n", v->coord.x, v->coord.y) ;
|
||||
}
|
||||
if (debug)
|
||||
{
|
||||
printf("vertex(%d) at %f %f\n", v->sitenbr, v->coord.x, v->coord.y) ;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
out_site(Site * s)
|
||||
{
|
||||
if (!triangulate && plot && !debug)
|
||||
{
|
||||
circle (s->coord.x, s->coord.y, cradius) ;
|
||||
}
|
||||
if (!triangulate && !plot && !debug)
|
||||
{
|
||||
printf("s %f %f\n", s->coord.x, s->coord.y) ;
|
||||
}
|
||||
if (debug)
|
||||
{
|
||||
printf("site (%d) at %f %f\n", s->sitenbr, s->coord.x, s->coord.y) ;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
out_triple(Site * s1, Site * s2, Site * s3)
|
||||
{
|
||||
if (triangulate && !plot && !debug)
|
||||
{
|
||||
printf("%d %d %d\n", s1->sitenbr, s2->sitenbr, s3->sitenbr) ;
|
||||
}
|
||||
if (debug)
|
||||
{
|
||||
printf("circle through left=%d right=%d bottom=%d\n",
|
||||
s1->sitenbr, s2->sitenbr, s3->sitenbr) ;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
plotinit(void)
|
||||
{
|
||||
float dx, dy, d ;
|
||||
|
||||
dy = ymax - ymin ;
|
||||
dx = xmax - xmin ;
|
||||
d = ( dx > dy ? dx : dy) * 1.1 ;
|
||||
pxmin = xmin - (d-dx) / 2.0 ;
|
||||
pxmax = xmax + (d-dx) / 2.0 ;
|
||||
pymin = ymin - (d-dy) / 2.0 ;
|
||||
pymax = ymax + (d-dy) / 2.0 ;
|
||||
cradius = (pxmax - pxmin) / 350.0 ;
|
||||
openpl() ;
|
||||
range(pxmin, pymin, pxmax, pymax) ;
|
||||
}
|
||||
|
||||
void
|
||||
clip_line(Edge * e)
|
||||
{
|
||||
Site * s1, * s2 ;
|
||||
float x1, x2, y1, y2 ;
|
||||
|
||||
if (e->a == 1.0 && e->b >= 0.0)
|
||||
{
|
||||
s1 = e->ep[1] ;
|
||||
s2 = e->ep[0] ;
|
||||
}
|
||||
else
|
||||
{
|
||||
s1 = e->ep[0] ;
|
||||
s2 = e->ep[1] ;
|
||||
}
|
||||
if (e->a == 1.0)
|
||||
{
|
||||
y1 = pymin ;
|
||||
if (s1 != (Site *)NULL && s1->coord.y > pymin)
|
||||
{
|
||||
y1 = s1->coord.y ;
|
||||
}
|
||||
if (y1 > pymax)
|
||||
{
|
||||
return ;
|
||||
}
|
||||
x1 = e->c - e->b * y1 ;
|
||||
y2 = pymax ;
|
||||
if (s2 != (Site *)NULL && s2->coord.y < pymax)
|
||||
{
|
||||
y2 = s2->coord.y ;
|
||||
}
|
||||
if (y2 < pymin)
|
||||
{
|
||||
return ;
|
||||
}
|
||||
x2 = e->c - e->b * y2 ;
|
||||
if (((x1 > pxmax) && (x2 > pxmax)) || ((x1 < pxmin) && (x2 < pxmin)))
|
||||
{
|
||||
return ;
|
||||
}
|
||||
if (x1 > pxmax)
|
||||
{
|
||||
x1 = pxmax ;
|
||||
y1 = (e->c - x1) / e->b ;
|
||||
}
|
||||
if (x1 < pxmin)
|
||||
{
|
||||
x1 = pxmin ;
|
||||
y1 = (e->c - x1) / e->b ;
|
||||
}
|
||||
if (x2 > pxmax)
|
||||
{
|
||||
x2 = pxmax ;
|
||||
y2 = (e->c - x2) / e->b ;
|
||||
}
|
||||
if (x2 < pxmin)
|
||||
{
|
||||
x2 = pxmin ;
|
||||
y2 = (e->c - x2) / e->b ;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
x1 = pxmin ;
|
||||
if (s1 != (Site *)NULL && s1->coord.x > pxmin)
|
||||
{
|
||||
x1 = s1->coord.x ;
|
||||
}
|
||||
if (x1 > pxmax)
|
||||
{
|
||||
return ;
|
||||
}
|
||||
y1 = e->c - e->a * x1 ;
|
||||
x2 = pxmax ;
|
||||
if (s2 != (Site *)NULL && s2->coord.x < pxmax)
|
||||
{
|
||||
x2 = s2->coord.x ;
|
||||
}
|
||||
if (x2 < pxmin)
|
||||
{
|
||||
return ;
|
||||
}
|
||||
y2 = e->c - e->a * x2 ;
|
||||
if (((y1 > pymax) && (y2 > pymax)) || ((y1 < pymin) && (y2 <pymin)))
|
||||
{
|
||||
return ;
|
||||
}
|
||||
if (y1> pymax)
|
||||
{
|
||||
y1 = pymax ;
|
||||
x1 = (e->c - y1) / e->a ;
|
||||
}
|
||||
if (y1 < pymin)
|
||||
{
|
||||
y1 = pymin ;
|
||||
x1 = (e->c - y1) / e->a ;
|
||||
}
|
||||
if (y2 > pymax)
|
||||
{
|
||||
y2 = pymax ;
|
||||
x2 = (e->c - y2) / e->a ;
|
||||
}
|
||||
if (y2 < pymin)
|
||||
{
|
||||
y2 = pymin ;
|
||||
x2 = (e->c - y2) / e->a ;
|
||||
}
|
||||
}
|
||||
line(x1,y1,x2,y2);
|
||||
}
|
||||
|
||||
100
contrib/voronoi/t
Normal file
100
contrib/voronoi/t
Normal file
@@ -0,0 +1,100 @@
|
||||
0.532095 0.894141
|
||||
0.189043 0.613426
|
||||
0.550977 0.415724
|
||||
0.00397384 0.60576
|
||||
0.89423 0.666812
|
||||
0.0730728 0.740658
|
||||
0.64018 0.926186
|
||||
0.389914 0.553149
|
||||
0.046918 0.172275
|
||||
0.820327 0.578957
|
||||
0.166575 0.597895
|
||||
0.587999 0.824301
|
||||
0.184717 0.0608049
|
||||
0.264707 0.661072
|
||||
0.564959 0.824897
|
||||
0.986991 0.654621
|
||||
0.214221 0.611877
|
||||
0.997171 0.807318
|
||||
0.233578 0.380796
|
||||
0.209772 0.585171
|
||||
0.631619 0.418295
|
||||
0.441601 0.474479
|
||||
0.246242 0.196578
|
||||
0.243191 0.428592
|
||||
0.129101 0.460463
|
||||
0.808454 0.240363
|
||||
0.23591 0.362678
|
||||
0.841259 0.0182264
|
||||
0.825533 0.867529
|
||||
0.780973 0.282859
|
||||
0.492706 0.0717757
|
||||
0.0641069 0.0241644
|
||||
0.711451 0.621806
|
||||
0.532239 0.872561
|
||||
0.264527 0.947361
|
||||
0.984485 0.373498
|
||||
0.890788 0.0900603
|
||||
0.81489 0.765458
|
||||
0.656357 0.383494
|
||||
0.161836 0.878997
|
||||
0.789622 0.367808
|
||||
0.00529994 0.694075
|
||||
0.751558 0.0541492
|
||||
0.315169 0.989785
|
||||
0.0675723 0.642346
|
||||
0.144209 0.130059
|
||||
0.755242 0.723929
|
||||
0.0258396 0.306045
|
||||
0.00905612 0.544864
|
||||
0.0917369 0.0311395
|
||||
0.000120247 0.760615
|
||||
0.599014 0.406906
|
||||
0.0209242 0.0676926
|
||||
0.402961 0.743223
|
||||
0.536965 0.776167
|
||||
0.791622 0.4288
|
||||
0.0492686 0.546021
|
||||
0.321031 0.883358
|
||||
0.45994 0.0493888
|
||||
0.306635 0.920045
|
||||
0.290264 0.480864
|
||||
0.117081 0.709596
|
||||
0.663268 0.827229
|
||||
0.25703 0.908703
|
||||
0.138396 0.712536
|
||||
0.37325 0.578061
|
||||
0.792062 0.598336
|
||||
0.761925 0.679885
|
||||
0.498106 0.0823257
|
||||
0.0791993 0.879007
|
||||
0.389481 0.161374
|
||||
0.909555 0.33623
|
||||
0.78771 0.527877
|
||||
0.87391 0.282804
|
||||
0.914291 0.579771
|
||||
0.126212 0.635836
|
||||
0.962689 0.412397
|
||||
0.662097 0.205412
|
||||
0.514842 0.35217
|
||||
0.573771 0.571652
|
||||
0.541641 0.302552
|
||||
0.880047 0.447681
|
||||
0.854456 0.455932
|
||||
0.882323 0.00625933
|
||||
0.0835167 0.817145
|
||||
0.868329 0.54442
|
||||
0.211671 0.598359
|
||||
0.169315 0.4421
|
||||
0.116072 0.753312
|
||||
0.900911 0.0493624
|
||||
0.889781 0.970528
|
||||
0.209244 0.783234
|
||||
0.0556217 0.973298
|
||||
0.787673 0.0775736
|
||||
0.327654 0.267293
|
||||
0.571657 0.956988
|
||||
0.519674 0.443726
|
||||
0.0206049 0.472568
|
||||
0.00635056 0.409455
|
||||
0.414254 0.229849
|
||||
859
contrib/voronoi/tt
Normal file
859
contrib/voronoi/tt
Normal file
@@ -0,0 +1,859 @@
|
||||
s 0.882323 0.006259
|
||||
s 0.841259 0.018226
|
||||
l 1.000000 -0.291425 0.858223
|
||||
s 0.064107 0.024164
|
||||
l 1.000000 -0.021883 0.472882
|
||||
s 0.091737 0.031140
|
||||
l 1.000000 0.252447 0.084903
|
||||
s 0.900911 0.049362
|
||||
l 0.431244 1.000000 0.412316
|
||||
s 0.459940 0.049389
|
||||
l 1.000000 -0.102110 0.668290
|
||||
v 0.419582 -2.435700
|
||||
l 1.000000 0.063725 0.264367
|
||||
s 0.751558 0.054149
|
||||
l 1.000000 -0.400473 0.781916
|
||||
v 0.565847 -1.003264
|
||||
e 4 0 1
|
||||
l 1.000000 -0.081723 0.647837
|
||||
v 0.324966 -0.950947
|
||||
e 5 2 0
|
||||
l 1.000000 0.049563 0.277834
|
||||
s 0.184717 0.060805
|
||||
l 1.000000 0.319051 0.152894
|
||||
s 0.020924 0.067693
|
||||
l -0.992063 1.000000 0.003750
|
||||
v 0.869151 0.037499
|
||||
e 0 1 3
|
||||
l 1.000000 0.521961 0.888724
|
||||
s 0.492706 0.071776
|
||||
l 1.000000 0.683235 0.517715
|
||||
v 0.300812 -0.463619
|
||||
e 8 4 2
|
||||
l 1.000000 -0.041479 0.320043
|
||||
v 0.613461 -0.420642
|
||||
e 7 1 5
|
||||
l 1.000000 0.016324 0.606594
|
||||
s 0.787673 0.077574
|
||||
l 1.000000 0.648606 0.812334
|
||||
v 0.793528 0.028994
|
||||
e 6 5 6
|
||||
l -0.902924 1.000000 -0.687501
|
||||
s 0.498106 0.082326
|
||||
l 0.511849 1.000000 0.330624
|
||||
s 0.890788 0.090060
|
||||
l -0.248734 1.000000 -0.153117
|
||||
v 0.608770 -0.133270
|
||||
e 14 7 5
|
||||
l 1.000000 -0.068095 0.617845
|
||||
v 0.857338 0.060132
|
||||
e 11 8 3
|
||||
l 0.689494 1.000000 0.651261
|
||||
v 0.067141 0.070358
|
||||
e 2 9 2
|
||||
l 1.000000 -0.516194 0.030822
|
||||
v 0.840710 0.071597
|
||||
e 16 6 10
|
||||
e 20 10 8
|
||||
l 1.000000 0.121095 0.849380
|
||||
s 0.144209 0.130059
|
||||
l -0.584918 1.000000 -0.000765
|
||||
v 0.129055 0.074721
|
||||
e 9 11 4
|
||||
l 0.530452 1.000000 0.143178
|
||||
v 0.618791 0.013896
|
||||
e 19 7 12
|
||||
l 1.000000 -0.111171 0.617246
|
||||
v 0.448758 0.100928
|
||||
e 12 13 7
|
||||
e 17 13 12
|
||||
l 1.000000 0.862990 0.535857
|
||||
s 0.389481 0.161374
|
||||
l -0.629181 1.000000 -0.161838
|
||||
v 0.082218 0.099566
|
||||
e 21 9 14
|
||||
e 24 14 11
|
||||
l 1.000000 0.505873 0.132585
|
||||
s 0.046918 0.172275
|
||||
l 0.248549 1.000000 0.128415
|
||||
v 0.321727 0.040586
|
||||
e 13 4 15
|
||||
l 1.000000 0.491146 0.341660
|
||||
v 0.077349 0.109190
|
||||
e 28 16 14
|
||||
l 1.000000 -0.433915 0.029970
|
||||
v 0.437804 0.113620
|
||||
e 27 15 17
|
||||
e 26 17 13
|
||||
l 1.000000 -0.727717 0.355121
|
||||
s 0.246242 0.196578
|
||||
l 0.453146 1.000000 0.226335
|
||||
v 0.218773 0.127199
|
||||
e 23 11 18
|
||||
l 1.000000 0.651936 0.301699
|
||||
s 0.662097 0.205412
|
||||
l -0.591428 1.000000 -0.288257
|
||||
v 0.296482 0.091986
|
||||
e 33 18 19
|
||||
e 30 19 15
|
||||
l 1.000000 -0.245771 0.273874
|
||||
v 0.626385 0.082205
|
||||
e 25 12 20
|
||||
l 1.000000 0.750568 0.688085
|
||||
v 0.722244 0.138898
|
||||
e 35 20 21
|
||||
e 15 21 6
|
||||
l -0.982303 1.000000 -0.570564
|
||||
s 0.414254 0.229849
|
||||
l 0.361782 1.000000 0.341000
|
||||
s 0.808454 0.240363
|
||||
l 0.127656 1.000000 0.260846
|
||||
v 0.830634 0.154811
|
||||
e 22 22 10
|
||||
l -0.547788 1.000000 -0.300201
|
||||
v 0.477547 0.168232
|
||||
e 32 17 23
|
||||
l -0.568398 1.000000 -0.103205
|
||||
v 0.749045 0.165226
|
||||
e 38 21 24
|
||||
e 40 24 22
|
||||
l 1.000000 0.238806 0.788502
|
||||
s 0.327654 0.267293
|
||||
l -0.583720 1.000000 0.005031
|
||||
v 0.321189 0.192515
|
||||
e 36 19 25
|
||||
l 1.000000 0.868607 0.488409
|
||||
v 0.355334 0.212446
|
||||
e 44 25 26
|
||||
e 39 26 23
|
||||
l 1.000000 -0.432379 0.263477
|
||||
s 0.873910 0.282804
|
||||
l 1.000000 0.648390 1.010790
|
||||
s 0.780973 0.282859
|
||||
l -0.646672 1.000000 -0.252308
|
||||
v 0.889503 0.187059
|
||||
e 41 22 27
|
||||
l -0.087567 1.000000 0.109167
|
||||
v 0.735216 0.223136
|
||||
e 43 28 24
|
||||
l 1.000000 0.651494 0.880588
|
||||
s 0.541641 0.302552
|
||||
l 0.197683 1.000000 0.295209
|
||||
v 0.547788 0.186921
|
||||
e 37 29 20
|
||||
l 1.000000 -0.806436 0.397049
|
||||
v 0.520067 0.192401
|
||||
e 42 23 30
|
||||
e 51 30 29
|
||||
l 1.000000 0.570726 0.629875
|
||||
s 0.025840 0.306045
|
||||
l -0.157572 1.000000 0.233428
|
||||
v 0.827441 0.282775
|
||||
e 48 28 31
|
||||
e 47 31 27
|
||||
l 1.000000 -0.000592 0.827274
|
||||
s 0.909555 0.336230
|
||||
l 0.667185 1.000000 0.904467
|
||||
s 0.514842 0.352170
|
||||
l -0.540107 1.000000 0.042054
|
||||
s 0.235910 0.362678
|
||||
l -0.062204 1.000000 0.264632
|
||||
v 0.245294 0.279890
|
||||
e 45 32 25
|
||||
l -0.961829 1.000000 0.043960
|
||||
s 0.789622 0.367808
|
||||
l 0.101814 1.000000 0.405288
|
||||
v 0.138555 0.250245
|
||||
e 31 16 33
|
||||
e 34 33 18
|
||||
l 1.000000 0.121927 0.169067
|
||||
v 0.463117 0.292187
|
||||
e 53 34 30
|
||||
l 0.822328 1.000000 0.673020
|
||||
s 0.984485 0.373498
|
||||
l 1.000000 0.497371 1.123519
|
||||
v 1.008234 0.231789
|
||||
l 1.000000 0.820204 1.198348
|
||||
v 0.137955 0.255166
|
||||
e 61 36 33
|
||||
l 1.000000 -0.496669 0.011222
|
||||
v 1.034507 0.199756
|
||||
e 64 35 37
|
||||
e 49 27 37
|
||||
l 0.330573 1.000000 0.541737
|
||||
s 0.233578 0.380796
|
||||
l -0.128712 1.000000 0.341523
|
||||
v 0.827464 0.321040
|
||||
e 55 31 38
|
||||
l -0.991577 1.000000 -0.499454
|
||||
s 0.656357 0.383494
|
||||
l -0.032232 1.000000 0.273205
|
||||
v 0.633847 0.293635
|
||||
e 52 29 39
|
||||
l 1.000000 0.705586 0.841031
|
||||
v 0.688146 0.295385
|
||||
e 69 39 40
|
||||
e 50 40 28
|
||||
l 1.000000 -0.807561 0.449605
|
||||
v 0.147205 0.273789
|
||||
e 65 36 41
|
||||
e 58 41 32
|
||||
l 1.000000 0.269591 0.221015
|
||||
v 0.846367 0.339784
|
||||
e 68 38 42
|
||||
e 56 42 35
|
||||
l 1.000000 -0.263297 0.756903
|
||||
s 0.599014 0.406906
|
||||
l 0.549792 1.000000 0.668290
|
||||
v 0.603676 0.336394
|
||||
e 70 43 39
|
||||
l 1.000000 -0.408280 0.466333
|
||||
s 0.006351 0.409455
|
||||
l -0.188464 1.000000 0.354717
|
||||
v 0.574582 0.352390
|
||||
e 57 34 44
|
||||
e 74 44 43
|
||||
l 1.000000 0.650288 0.803737
|
||||
v 0.717875 0.332198
|
||||
e 71 40 45
|
||||
e 60 45 38
|
||||
l 1.000000 -0.117705 0.678773
|
||||
s 0.962689 0.412397
|
||||
l -0.560323 1.000000 -0.152575
|
||||
s 0.550977 0.415724
|
||||
l 0.568572 1.000000 0.686944
|
||||
v 0.566469 0.364866
|
||||
e 77 46 44
|
||||
l 1.000000 -0.183567 0.499492
|
||||
s 0.631619 0.418295
|
||||
l -0.710842 1.000000 -0.056879
|
||||
v 0.624295 0.386896
|
||||
e 75 43 47
|
||||
l 1.000000 0.349302 0.759439
|
||||
v 0.937997 0.373006
|
||||
e 63 48 35
|
||||
l 0.697598 1.000000 1.027351
|
||||
s 0.243191 0.428592
|
||||
l 0.201126 1.000000 0.452639
|
||||
s 0.791622 0.428800
|
||||
l 0.032791 1.000000 0.424229
|
||||
s 0.169315 0.442100
|
||||
l 1.000000 -0.953955 -0.191056
|
||||
v 0.409040 0.336655
|
||||
e 46 26 49
|
||||
e 62 49 34
|
||||
l 1.000000 0.453432 0.561690
|
||||
v 0.153601 0.361293
|
||||
l -0.838496 1.000000 0.232499
|
||||
s 0.519674 0.443726
|
||||
l 1.000000 -0.894547 0.150916
|
||||
v 0.507367 0.398470
|
||||
e 80 51 46
|
||||
l 0.052777 1.000000 0.425247
|
||||
s 0.880047 0.447681
|
||||
l -0.264762 1.000000 0.155046
|
||||
v 0.129143 0.340785
|
||||
e 72 52 41
|
||||
e 89 52 50
|
||||
l 1.000000 0.948281 0.452303
|
||||
v 0.857504 0.382081
|
||||
e 73 42 53
|
||||
l 1.000000 0.883306 1.194998
|
||||
v 0.906422 0.395032
|
||||
e 92 53 54
|
||||
e 84 54 48
|
||||
l 1.000000 -0.426950 0.737763
|
||||
s 0.854456 0.455932
|
||||
l 1.000000 -0.322417 0.721581
|
||||
v 0.848176 0.392641
|
||||
e 94 55 53
|
||||
l 0.735713 1.000000 1.016655
|
||||
v 0.201987 0.412015
|
||||
e 87 50 56
|
||||
l 1.000000 -0.182847 0.126651
|
||||
v 0.842804 0.396593
|
||||
e 97 57 55
|
||||
l 1.000000 0.431804 1.014055
|
||||
v 1.199456 0.145229
|
||||
e 66 37 58
|
||||
e 18 8 58
|
||||
l 0.257837 1.000000 0.454492
|
||||
s 0.129101 0.460463
|
||||
l 1.000000 -0.456632 -0.056862
|
||||
v 0.108630 0.362417
|
||||
e 93 59 52
|
||||
l 0.668714 1.000000 0.435059
|
||||
v 0.093729 0.372381
|
||||
e 102 60 59
|
||||
l 1.000000 0.415542 0.248470
|
||||
v 0.725906 0.400426
|
||||
e 78 45 61
|
||||
e 86 61 57
|
||||
l 1.000000 0.334943 0.860025
|
||||
s 0.020605 0.472568
|
||||
l 0.225854 1.000000 0.444055
|
||||
s 0.441601 0.474479
|
||||
l -0.598819 1.000000 0.126956
|
||||
v 0.457785 0.401087
|
||||
e 91 62 51
|
||||
l 1.000000 -0.393900 0.299797
|
||||
s 0.290264 0.480864
|
||||
l 0.900540 1.000000 0.694927
|
||||
v 0.396472 0.364372
|
||||
e 88 63 49
|
||||
e 106 63 62
|
||||
l 0.549975 1.000000 0.582421
|
||||
v 0.336883 0.384883
|
||||
e 85 56 64
|
||||
e 67 50 64
|
||||
l 0.110462 1.000000 0.422096
|
||||
v 0.070569 0.428117
|
||||
e 103 65 60
|
||||
l 1.000000 -0.111571 0.022803
|
||||
v 0.345321 0.383951
|
||||
e 110 64 66
|
||||
l 0.459902 1.000000 0.542765
|
||||
v 0.350844 0.381411
|
||||
e 112 66 67
|
||||
e 59 32 67
|
||||
l -0.175071 1.000000 0.319989
|
||||
v -0.258576 0.192683
|
||||
e 29 68 16
|
||||
e 54 68 36
|
||||
l 0.020622 1.000000 0.187351
|
||||
v 0.361953 0.383356
|
||||
e 113 67 69
|
||||
e 109 69 63
|
||||
l 1.000000 -0.042191 0.345779
|
||||
s 0.787710 0.527877
|
||||
l -0.039484 1.000000 0.447159
|
||||
v 0.710026 0.447837
|
||||
e 82 47 70
|
||||
e 104 70 61
|
||||
l 1.000000 0.065655 0.739428
|
||||
v 0.807207 0.479031
|
||||
e 99 71 57
|
||||
l -0.927737 1.000000 -0.269844
|
||||
s 0.868329 0.544420
|
||||
l 0.156778 1.000000 0.635223
|
||||
s 0.009056 0.544864
|
||||
l -0.159743 1.000000 0.506347
|
||||
s 0.049269 0.546021
|
||||
l 0.390232 1.000000 0.522928
|
||||
v 0.881814 0.496974
|
||||
e 96 55 72
|
||||
l -0.121130 1.000000 0.390160
|
||||
v 0.030149 0.511163
|
||||
l 1.000000 0.028772 0.044856
|
||||
v 0.077761 0.492583
|
||||
e 121 73 74
|
||||
e 111 65 74
|
||||
l -0.933079 1.000000 0.420026
|
||||
s 0.389914 0.553149
|
||||
l -0.657010 1.000000 0.240657
|
||||
v 0.834537 0.504386
|
||||
e 118 71 75
|
||||
e 119 75 72
|
||||
l 1.000000 0.205200 0.938037
|
||||
v 0.366080 0.481176
|
||||
e 115 69 76
|
||||
l 1.000000 0.725389 0.715120
|
||||
v 0.589040 0.487825
|
||||
e 81 46 77
|
||||
e 83 77 47
|
||||
l 1.000000 0.031881 0.604593
|
||||
v 0.708234 0.475123
|
||||
e 117 78 70
|
||||
e 116 78 71
|
||||
l 1.000000 0.702039 1.041789
|
||||
s 0.573771 0.571652
|
||||
l 0.422877 1.000000 0.738886
|
||||
v 0.588980 0.489705
|
||||
e 90 51 79
|
||||
e 128 79 77
|
||||
l 1.000000 -0.227174 0.477732
|
||||
v 0.589004 0.489809
|
||||
e 131 79 80
|
||||
l -0.377211 1.000000 0.267630
|
||||
v 0.217846 0.498748
|
||||
e 98 56 81
|
||||
e 108 81 66
|
||||
l 1.000000 0.320499 0.377694
|
||||
s 0.373250 0.578061
|
||||
l -0.668914 1.000000 0.310359
|
||||
s 0.820327 0.578957
|
||||
l 0.638546 1.000000 1.066820
|
||||
v 0.827561 0.538384
|
||||
e 126 82 75
|
||||
l 1.000000 -0.719491 0.440198
|
||||
s 0.914291 0.579771
|
||||
l 1.000000 0.769134 1.323637
|
||||
v 0.936319 0.503577
|
||||
e 122 72 83
|
||||
l 0.259248 1.000000 0.746315
|
||||
s 0.209772 0.585171
|
||||
l 0.282776 1.000000 0.567234
|
||||
v 0.215419 0.506318
|
||||
e 133 84 81
|
||||
l -0.771684 1.000000 0.340083
|
||||
v 0.951126 0.499738
|
||||
e 138 83 85
|
||||
e 95 54 85
|
||||
l -0.289161 1.000000 0.224710
|
||||
v 0.179037 0.516606
|
||||
e 101 59 86
|
||||
e 139 86 84
|
||||
l 0.646879 1.000000 0.632422
|
||||
v 0.329909 0.531040
|
||||
e 127 87 76
|
||||
l 0.853792 1.000000 0.812714
|
||||
s 0.166575 0.597895
|
||||
l 0.272673 1.000000 0.569490
|
||||
v 0.168173 0.523634
|
||||
e 142 88 86
|
||||
l 1.000000 -0.294558 0.013932
|
||||
s 0.792062 0.598336
|
||||
l 1.000000 -0.685617 0.402609
|
||||
s 0.211671 0.598359
|
||||
l 0.143994 1.000000 0.622108
|
||||
v 0.788733 0.563178
|
||||
e 135 89 82
|
||||
l 0.061766 1.000000 0.611895
|
||||
s 0.003974 0.605760
|
||||
l -0.083458 1.000000 0.574768
|
||||
v 0.506479 0.524707
|
||||
e 107 62 90
|
||||
e 130 90 80
|
||||
l 1.000000 0.735212 0.892250
|
||||
v 0.123960 0.535690
|
||||
e 124 74 91
|
||||
e 144 91 88
|
||||
l 1.000000 0.442210 0.360847
|
||||
s 0.214221 0.611877
|
||||
l 0.188637 1.000000 0.645288
|
||||
s 0.189043 0.613426
|
||||
l -0.733639 1.000000 0.453005
|
||||
v 0.187995 0.590926
|
||||
e 145 88 92
|
||||
l 1.000000 0.691250 0.596472
|
||||
v 0.192680 0.594363
|
||||
e 153 92 93
|
||||
l 1.000000 -0.665858 -0.203082
|
||||
v 0.028251 0.577126
|
||||
e 123 94 73
|
||||
l -0.758211 1.000000 0.555706
|
||||
v 0.201304 0.607314
|
||||
e 155 93 95
|
||||
l 1.000000 -0.061522 0.163940
|
||||
s 0.711451 0.621806
|
||||
l -0.811879 1.000000 -0.033727
|
||||
v 0.678654 0.517258
|
||||
e 129 96 78
|
||||
l 0.392274 1.000000 0.783476
|
||||
v 0.738998 0.566250
|
||||
e 158 96 97
|
||||
e 148 97 89
|
||||
l 1.000000 -0.291152 0.574133
|
||||
v 0.670378 0.520504
|
||||
e 132 80 98
|
||||
e 159 98 96
|
||||
l 1.000000 0.364280 0.859987
|
||||
s 0.126212 0.635836
|
||||
l 1.000000 -0.939994 -0.433456
|
||||
v 0.106725 0.574665
|
||||
e 151 99 91
|
||||
l 0.856687 1.000000 0.666095
|
||||
s 0.067572 0.642346
|
||||
l 0.190020 1.000000 0.605285
|
||||
v 0.867187 0.593460
|
||||
e 136 82 100
|
||||
e 137 100 83
|
||||
l 1.000000 0.008662 0.872328
|
||||
v 0.052285 0.595349
|
||||
e 156 94 101
|
||||
l 1.000000 0.575266 0.394770
|
||||
v 0.091215 0.587952
|
||||
e 164 101 102
|
||||
e 163 102 99
|
||||
l 1.000000 -0.111017 0.025942
|
||||
v 0.290765 0.564461
|
||||
e 140 84 103
|
||||
e 143 103 87
|
||||
l 1.000000 -0.043492 0.266215
|
||||
v 0.482330 0.557553
|
||||
e 125 76 104
|
||||
e 150 104 90
|
||||
l 1.000000 0.100638 0.538441
|
||||
s 0.986991 0.654621
|
||||
l 0.971275 1.000000 1.540530
|
||||
s 0.264707 0.661072
|
||||
l 1.000000 0.974428 0.859663
|
||||
v 0.291447 0.580141
|
||||
e 147 93 105
|
||||
e 168 103 105
|
||||
l 1.000000 -0.125623 0.218568
|
||||
v -0.161545 0.480541
|
||||
e 105 106 65
|
||||
e 120 106 73
|
||||
l 0.019981 1.000000 0.477313
|
||||
v 0.282872 0.591927
|
||||
e 152 95 107
|
||||
l 0.845694 1.000000 0.831150
|
||||
v 0.160033 0.631376
|
||||
e 162 99 108
|
||||
e 154 108 92
|
||||
l 1.000000 -0.356671 -0.065160
|
||||
v 0.291962 0.584240
|
||||
e 174 107 109
|
||||
e 172 105 109
|
||||
l 1.000000 -0.764775 -0.154851
|
||||
v 1.043941 0.526576
|
||||
e 141 85 110
|
||||
l 0.100329 1.000000 0.631313
|
||||
s 0.894230 0.666812
|
||||
l -0.230478 1.000000 0.414880
|
||||
v 0.867003 0.614704
|
||||
e 165 111 100
|
||||
l 0.841193 1.000000 1.344021
|
||||
s 0.761925 0.679885
|
||||
l -0.369557 1.000000 0.351967
|
||||
v 0.758188 0.632161
|
||||
e 160 97 112
|
||||
l 0.869057 1.000000 1.291070
|
||||
v 0.936674 0.630762
|
||||
e 178 111 113
|
||||
e 170 113 110
|
||||
l 1.000000 -0.131424 0.853777
|
||||
s 0.005300 0.694075
|
||||
l 0.015016 1.000000 0.649987
|
||||
v 0.021036 0.649671
|
||||
e 166 114 101
|
||||
l 1.000000 -0.830689 -0.518639
|
||||
v 0.839768 0.637614
|
||||
e 146 89 115
|
||||
e 179 115 111
|
||||
l 1.000000 0.670229 1.267116
|
||||
s 0.117081 0.709596
|
||||
l -0.123793 1.000000 0.657657
|
||||
s 0.138396 0.712536
|
||||
l 0.158853 1.000000 0.695203
|
||||
v 0.132837 0.674101
|
||||
l 1.000000 0.137931 0.225817
|
||||
v 0.100332 0.670078
|
||||
e 167 102 117
|
||||
e 186 117 116
|
||||
l 0.736189 1.000000 0.743941
|
||||
s 0.755242 0.723929
|
||||
l -0.151735 1.000000 0.586804
|
||||
v 0.172997 0.667722
|
||||
e 187 116 118
|
||||
e 175 108 118
|
||||
l -0.511018 1.000000 0.579317
|
||||
v 0.826502 0.657407
|
||||
e 180 112 119
|
||||
e 185 119 115
|
||||
l 1.000000 -0.098810 0.761544
|
||||
v 0.205257 0.671579
|
||||
e 157 95 120
|
||||
e 171 120 107
|
||||
l 1.000000 0.629705 0.628154
|
||||
s 0.073073 0.740658
|
||||
l 1.000000 -0.705823 -0.416734
|
||||
v 0.071305 0.691447
|
||||
e 189 121 117
|
||||
l 0.055949 1.000000 0.695436
|
||||
v 0.475217 0.628239
|
||||
e 134 87 122
|
||||
e 169 122 104
|
||||
l 1.000000 -0.031962 0.455137
|
||||
s 0.402961 0.743223
|
||||
l 0.179890 1.000000 0.730458
|
||||
v 0.056430 0.692279
|
||||
e 184 114 123
|
||||
e 195 123 121
|
||||
l 1.000000 0.687340 0.532261
|
||||
v 0.199241 0.681133
|
||||
e 191 118 124
|
||||
e 193 124 120
|
||||
l 1.000000 -0.407438 -0.078279
|
||||
s 0.116072 0.753312
|
||||
l -0.023081 1.000000 0.728763
|
||||
v 0.124900 0.731646
|
||||
e 188 125 116
|
||||
l -0.547479 1.000000 0.663266
|
||||
v 0.354953 0.666606
|
||||
e 176 109 126
|
||||
l 1.000000 0.594203 0.751052
|
||||
v 1.186539 0.512269
|
||||
e 177 110 127
|
||||
e 79 48 127
|
||||
l 0.008914 1.000000 0.522847
|
||||
v 0.099261 0.731054
|
||||
e 194 121 128
|
||||
e 200 128 125
|
||||
l 1.000000 0.294285 0.314399
|
||||
s 0.000120 0.760615
|
||||
l -0.077843 1.000000 0.727134
|
||||
v 0.689921 0.691489
|
||||
e 181 129 112
|
||||
l 0.428807 1.000000 0.987331
|
||||
s 0.814890 0.765458
|
||||
l 0.618946 1.000000 1.210653
|
||||
v 0.809479 0.709630
|
||||
e 190 129 130
|
||||
l 1.000000 0.696234 1.303547
|
||||
v 0.830384 0.696690
|
||||
e 207 130 131
|
||||
e 192 119 131
|
||||
l -0.804290 1.000000 0.028821
|
||||
v 0.475748 0.644876
|
||||
e 197 126 132
|
||||
e 196 122 132
|
||||
l -0.995565 1.000000 0.171238
|
||||
v 0.030824 0.729533
|
||||
e 198 133 123
|
||||
l 1.000000 -0.273561 -0.168749
|
||||
s 0.536965 0.776167
|
||||
l -0.179967 1.000000 0.573961
|
||||
s 0.209244 0.783234
|
||||
l 1.000000 0.997883 0.920122
|
||||
v 0.211183 0.710443
|
||||
e 199 124 134
|
||||
l -0.454012 1.000000 0.614563
|
||||
v 0.493778 0.662825
|
||||
e 210 132 135
|
||||
l 1.000000 0.245843 0.656729
|
||||
v 0.610858 0.683896
|
||||
e 212 135 136
|
||||
e 161 136 98
|
||||
l 1.000000 -0.884661 0.005842
|
||||
v 0.167016 0.754704
|
||||
e 201 125 137
|
||||
e 213 137 134
|
||||
l 1.000000 0.321148 0.409387
|
||||
s 0.997171 0.807318
|
||||
l 0.066668 1.000000 0.797109
|
||||
s 0.083517 0.817145
|
||||
l 0.136545 1.000000 0.789592
|
||||
v 0.085468 0.777922
|
||||
e 204 138 128
|
||||
l -0.510007 1.000000 0.734333
|
||||
v 0.950210 0.733761
|
||||
e 182 113 139
|
||||
l 0.732645 1.000000 1.429928
|
||||
s 0.587999 0.824301
|
||||
l 1.000000 0.943176 1.317244
|
||||
s 0.564959 0.824897
|
||||
l 0.574471 1.000000 1.117044
|
||||
v 0.575492 0.786441
|
||||
l 1.000000 -0.025867 0.555149
|
||||
s 0.663268 0.827229
|
||||
l -0.890357 1.000000 0.144088
|
||||
v 0.639225 0.713227
|
||||
e 206 141 129
|
||||
l -0.234555 1.000000 0.563294
|
||||
v 0.636173 0.712511
|
||||
e 216 136 142
|
||||
e 226 142 141
|
||||
l 1.000000 0.404282 0.924229
|
||||
v 0.629386 0.729299
|
||||
e 222 140 143
|
||||
e 227 143 142
|
||||
l 1.000000 0.038901 0.657756
|
||||
v 0.045552 0.783372
|
||||
e 211 133 144
|
||||
e 219 144 138
|
||||
l 1.000000 0.677847 0.576558
|
||||
v 0.303894 0.752535
|
||||
e 214 134 145
|
||||
e 202 145 126
|
||||
l 1.000000 -0.206544 0.148463
|
||||
v 0.911624 0.762031
|
||||
e 209 131 146
|
||||
e 221 146 139
|
||||
l 1.000000 0.229645 1.086621
|
||||
s 0.825533 0.867529
|
||||
l 0.104270 1.000000 0.902017
|
||||
s 0.532239 0.872561
|
||||
l -0.686472 1.000000 0.472131
|
||||
v 0.149132 0.810391
|
||||
e 220 138 147
|
||||
e 217 147 137
|
||||
l 1.000000 -0.269719 -0.069446
|
||||
v 0.511453 0.823229
|
||||
e 223 148 140
|
||||
l -0.049028 1.000000 0.798154
|
||||
s 0.161836 0.878997
|
||||
l -0.495055 1.000000 0.739263
|
||||
s 0.079199 0.879007
|
||||
l -0.069791 1.000000 0.842398
|
||||
v 0.149972 0.813508
|
||||
e 234 147 149
|
||||
l 1.000000 0.789742 0.792434
|
||||
s 0.321031 0.883358
|
||||
l -0.584650 1.000000 0.601649
|
||||
v 0.310186 0.783000
|
||||
e 230 145 150
|
||||
l 1.000000 0.895668 1.011494
|
||||
v 0.742780 0.805428
|
||||
e 225 141 151
|
||||
e 208 151 130
|
||||
l 1.000000 -0.407402 0.414647
|
||||
s 0.532095 0.894141
|
||||
l -0.006673 1.000000 0.879800
|
||||
v 0.120514 0.850809
|
||||
e 238 152 149
|
||||
l 1.000000 -0.000120 0.120412
|
||||
v 0.901053 0.808064
|
||||
e 231 153 146
|
||||
l 1.000000 -0.350802 0.617582
|
||||
s 0.257030 0.908703
|
||||
l 0.380859 1.000000 0.934761
|
||||
v 0.264479 0.834032
|
||||
e 240 154 150
|
||||
l 1.000000 -0.396010 -0.065806
|
||||
v 0.750260 0.823787
|
||||
e 241 151 155
|
||||
e 232 155 153
|
||||
l 1.000000 0.248359 0.954855
|
||||
v 0.455024 0.820463
|
||||
e 215 156 135
|
||||
e 235 156 148
|
||||
l 0.999537 1.000000 1.275275
|
||||
v 0.577619 0.868650
|
||||
e 233 148 157
|
||||
e 224 140 157
|
||||
l 1.000000 -0.865495 -0.174194
|
||||
v 0.223193 0.849756
|
||||
e 236 149 158
|
||||
e 245 158 154
|
||||
l 1.000000 0.312057 0.488366
|
||||
s 0.306635 0.920045
|
||||
l -0.392401 1.000000 0.778553
|
||||
v 0.005291 0.842767
|
||||
e 229 159 144
|
||||
e 237 159 152
|
||||
l 0.667943 1.000000 0.846301
|
||||
v 0.287126 0.891222
|
||||
e 246 154 160
|
||||
l 1.000000 0.228646 0.490901
|
||||
s 0.640180 0.926186
|
||||
l -0.233314 1.000000 0.724651
|
||||
v 0.623904 0.870217
|
||||
e 228 161 143
|
||||
l 0.512156 1.000000 1.189753
|
||||
v 0.590680 0.883741
|
||||
e 249 157 162
|
||||
l -0.800458 1.000000 0.410927
|
||||
s 0.264527 0.947361
|
||||
l 0.193931 1.000000 0.978605
|
||||
v 0.593340 0.885871
|
||||
e 256 162 163
|
||||
e 255 163 161
|
||||
l 1.000000 0.296480 0.855983
|
||||
v 0.279542 0.924393
|
||||
e 253 164 160
|
||||
l 1.000000 -0.648712 -0.320124
|
||||
s 0.571657 0.956988
|
||||
l 0.629497 1.000000 1.272969
|
||||
v 0.588385 0.902582
|
||||
e 258 165 163
|
||||
l 1.000000 -0.449513 0.182663
|
||||
v 0.425219 0.850254
|
||||
e 239 150 166
|
||||
e 248 166 156
|
||||
l 1.000000 -0.051120 0.381753
|
||||
s 0.889781 0.970528
|
||||
l 0.623773 1.000000 1.454012
|
||||
s 0.055622 0.973298
|
||||
l -0.250051 1.000000 0.909296
|
||||
v 0.925199 0.876897
|
||||
e 244 153 167
|
||||
l -0.657986 1.000000 0.268129
|
||||
v 0.426875 0.882648
|
||||
e 262 166 168
|
||||
e 242 168 162
|
||||
l 1.000000 0.051089 0.471968
|
||||
s 0.315169 0.989785
|
||||
l 0.122369 1.000000 0.992960
|
||||
v 0.732439 0.895540
|
||||
e 254 161 169
|
||||
e 247 169 155
|
||||
l 1.000000 -0.316461 0.449036
|
||||
v 0.300192 0.956226
|
||||
e 259 164 170
|
||||
l 1.000000 0.837724 1.101245
|
||||
v 0.194772 0.940833
|
||||
e 250 171 158
|
||||
e 257 171 164
|
||||
l 1.000000 0.665725 0.821108
|
||||
v 0.120525 0.939434
|
||||
e 243 152 172
|
||||
l 1.000000 -0.887837 -0.713539
|
||||
v -0.800463 0.203858
|
||||
e 114 173 68
|
||||
e 76 173 60
|
||||
l -0.042643 1.000000 0.237992
|
||||
v -0.068622 0.892137
|
||||
e 252 174 159
|
||||
e 264 174 172
|
||||
l 0.260959 1.000000 0.874230
|
||||
v 0.416510 0.941992
|
||||
e 267 170 175
|
||||
e 251 160 175
|
||||
l -0.055080 1.000000 0.919051
|
||||
v 0.423822 0.942395
|
||||
e 274 175 176
|
||||
e 266 176 168
|
||||
l 1.000000 -0.440906 0.008315
|
||||
v 0.163488 0.987825
|
||||
e 271 172 177
|
||||
e 270 177 171
|
||||
l 1.000000 -0.124157 0.040843
|
||||
v 0.759290 0.980387
|
||||
e 268 169 178
|
||||
e 263 178 167
|
||||
l 1.000000 0.177651 0.933457
|
||||
v 0.445834 0.992318
|
||||
e 275 176 179
|
||||
e 260 179 165
|
||||
l 1.000000 -0.127870 0.318946
|
||||
v 0.177717 1.102425
|
||||
e 276 177 180
|
||||
e 269 180 170
|
||||
l 1.000000 0.063522 0.247745
|
||||
v -0.942148 0.496138
|
||||
e 173 181 106
|
||||
e 149 181 94
|
||||
l -0.012107 1.000000 0.507545
|
||||
v 0.720786 1.197126
|
||||
e 261 165 182
|
||||
e 277 182 178
|
||||
l 1.000000 0.042562 0.771739
|
||||
v -0.830797 0.662462
|
||||
e 183 183 114
|
||||
e 205 183 133
|
||||
l -0.024885 1.000000 0.683137
|
||||
v 4.748839 0.480514
|
||||
e 218 139 184
|
||||
e 203 127 184
|
||||
l 0.029243 1.000000 0.619382
|
||||
v 0.658662 2.656735
|
||||
e 278 179 185
|
||||
e 281 185 182
|
||||
l 1.000000 -0.033513 0.569627
|
||||
v -13.741838 0.341169
|
||||
e 280 186 181
|
||||
e 282 186 183
|
||||
l -0.017742 1.000000 0.584978
|
||||
e 1 -1 0
|
||||
e 10 -1 9
|
||||
e 272 -1 173
|
||||
e 285 -1 186
|
||||
e 273 -1 174
|
||||
e 279 -1 180
|
||||
e 284 185 -1
|
||||
e 265 167 -1
|
||||
e 283 184 -1
|
||||
e 100 58 -1
|
||||
e 3 3 -1
|
||||
135
contrib/voronoi/vdefs.h
Normal file
135
contrib/voronoi/vdefs.h
Normal file
@@ -0,0 +1,135 @@
|
||||
#ifndef __VDEFS_H
|
||||
#define __VDEFS_H
|
||||
|
||||
#ifndef NULL
|
||||
#define NULL 0
|
||||
#endif
|
||||
|
||||
#define DELETED -2
|
||||
|
||||
typedef struct tagFreenode
|
||||
{
|
||||
struct tagFreenode * nextfree;
|
||||
} Freenode ;
|
||||
|
||||
|
||||
typedef struct tagFreelist
|
||||
{
|
||||
Freenode * head;
|
||||
int nodesize;
|
||||
} Freelist ;
|
||||
|
||||
typedef struct tagPoint
|
||||
{
|
||||
float x ;
|
||||
float y ;
|
||||
} Point ;
|
||||
|
||||
/* structure used both for sites and for vertices */
|
||||
|
||||
typedef struct tagSite
|
||||
{
|
||||
Point coord ;
|
||||
int sitenbr ;
|
||||
int refcnt ;
|
||||
} Site ;
|
||||
|
||||
|
||||
typedef struct tagEdge
|
||||
{
|
||||
float a, b, c ;
|
||||
Site * ep[2] ;
|
||||
Site * reg[2] ;
|
||||
int edgenbr ;
|
||||
} Edge ;
|
||||
|
||||
#define le 0
|
||||
#define re 1
|
||||
|
||||
typedef struct tagHalfedge
|
||||
{
|
||||
struct tagHalfedge * ELleft ;
|
||||
struct tagHalfedge * ELright ;
|
||||
Edge * ELedge ;
|
||||
int ELrefcnt ;
|
||||
char ELpm ;
|
||||
Site * vertex ;
|
||||
float ystar ;
|
||||
struct tagHalfedge * PQnext ;
|
||||
} Halfedge ;
|
||||
|
||||
/* edgelist.c */
|
||||
void ELinitialize(void) ;
|
||||
Halfedge * HEcreate(Edge *, int) ;
|
||||
void ELinsert(Halfedge *, Halfedge *) ;
|
||||
Halfedge * ELgethash(int) ;
|
||||
Halfedge * ELleftbnd(Point *) ;
|
||||
void ELdelete(Halfedge *) ;
|
||||
Halfedge * ELright(Halfedge *) ;
|
||||
Halfedge * ELleft(Halfedge *) ;
|
||||
Site * leftreg(Halfedge *) ;
|
||||
Site * rightreg(Halfedge *) ;
|
||||
extern int ELhashsize ;
|
||||
extern Site * bottomsite ;
|
||||
extern Freelist hfl ;
|
||||
extern Halfedge * ELleftend, * ELrightend, **ELhash ;
|
||||
|
||||
/* geometry.c */
|
||||
void geominit(void) ;
|
||||
Edge * bisect(Site *, Site *) ;
|
||||
Site * intersect(Halfedge *, Halfedge *) ;
|
||||
int right_of(Halfedge *, Point *) ;
|
||||
void endpoint(Edge *, int, Site *) ;
|
||||
float dist(Site *, Site *) ;
|
||||
void makevertex(Site *) ;
|
||||
void deref(Site *) ;
|
||||
void ref(Site *) ;
|
||||
extern float deltax, deltay ;
|
||||
extern int nsites, nedges, sqrt_nsites, nvertices ;
|
||||
extern Freelist sfl, efl ;
|
||||
|
||||
/* heap.c */
|
||||
void PQinsert(Halfedge *, Site *, float) ;
|
||||
void PQdelete(Halfedge *) ;
|
||||
int PQbucket(Halfedge *) ;
|
||||
int PQempty(void) ;
|
||||
Point PQ_min(void) ;
|
||||
Halfedge * PQextractmin(void) ;
|
||||
void PQinitialize(void) ;
|
||||
extern int PQmin, PQcount, PQhashsize ;
|
||||
extern Halfedge * PQhash ;
|
||||
|
||||
/* main.c */
|
||||
extern int sorted, triangulate, plot, debug, nsites, siteidx ;
|
||||
extern float xmin, xmax, ymin, ymax ;
|
||||
extern Site * sites ;
|
||||
extern Freelist sfl ;
|
||||
|
||||
/* getopt.c */
|
||||
extern int getopt(int, char *const *, const char *);
|
||||
|
||||
/* memory.c */
|
||||
void freeinit(Freelist *, int) ;
|
||||
char *getfree(Freelist *) ;
|
||||
void makefree(Freenode *, Freelist *) ;
|
||||
char *myalloc(unsigned) ;
|
||||
|
||||
/* output.c */
|
||||
void openpl(void) ;
|
||||
void line(float, float, float, float) ;
|
||||
void circle(float, float, float) ;
|
||||
void range(float, float, float, float) ;
|
||||
void out_bisector(Edge *) ;
|
||||
void out_ep(Edge *) ;
|
||||
void out_vertex(Site *) ;
|
||||
void out_site(Site *) ;
|
||||
void out_triple(Site *, Site *, Site *) ;
|
||||
void plotinit(void) ;
|
||||
void clip_line(Edge *) ;
|
||||
|
||||
/* voronoi.c */
|
||||
void voronoi(Site *(*)()) ;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
BIN
contrib/voronoi/voronoi
Executable file
BIN
contrib/voronoi/voronoi
Executable file
Binary file not shown.
120
contrib/voronoi/voronoi.c
Normal file
120
contrib/voronoi/voronoi.c
Normal file
@@ -0,0 +1,120 @@
|
||||
|
||||
/*** VORONOI.C ***/
|
||||
|
||||
#include "vdefs.h"
|
||||
|
||||
extern Site * bottomsite ;
|
||||
extern Halfedge * ELleftend, * ELrightend ;
|
||||
|
||||
/*** implicit parameters: nsites, sqrt_nsites, xmin, xmax, ymin, ymax,
|
||||
: deltax, deltay (can all be estimates).
|
||||
: Performance suffers if they are wrong; better to make nsites,
|
||||
: deltax, and deltay too big than too small. (?)
|
||||
***/
|
||||
|
||||
void
|
||||
voronoi(Site *(*nextsite)(void))
|
||||
{
|
||||
Site * newsite, * bot, * top, * temp, * p, * v ;
|
||||
Point newintstar ;
|
||||
int pm ;
|
||||
Halfedge * lbnd, * rbnd, * llbnd, * rrbnd, * bisector ;
|
||||
Edge * e ;
|
||||
|
||||
PQinitialize() ;
|
||||
bottomsite = (*nextsite)() ;
|
||||
out_site(bottomsite) ;
|
||||
ELinitialize() ;
|
||||
newsite = (*nextsite)() ;
|
||||
while (1)
|
||||
{
|
||||
if(!PQempty())
|
||||
{
|
||||
newintstar = PQ_min() ;
|
||||
}
|
||||
if (newsite != (Site *)NULL && (PQempty()
|
||||
|| newsite -> coord.y < newintstar.y
|
||||
|| (newsite->coord.y == newintstar.y
|
||||
&& newsite->coord.x < newintstar.x))) {/* new site is
|
||||
smallest */
|
||||
{
|
||||
out_site(newsite) ;
|
||||
}
|
||||
lbnd = ELleftbnd(&(newsite->coord)) ;
|
||||
rbnd = ELright(lbnd) ;
|
||||
bot = rightreg(lbnd) ;
|
||||
e = bisect(bot, newsite) ;
|
||||
bisector = HEcreate(e, le) ;
|
||||
ELinsert(lbnd, bisector) ;
|
||||
p = intersect(lbnd, bisector) ;
|
||||
if (p != (Site *)NULL)
|
||||
{
|
||||
PQdelete(lbnd) ;
|
||||
PQinsert(lbnd, p, dist(p,newsite)) ;
|
||||
}
|
||||
lbnd = bisector ;
|
||||
bisector = HEcreate(e, re) ;
|
||||
ELinsert(lbnd, bisector) ;
|
||||
p = intersect(bisector, rbnd) ;
|
||||
if (p != (Site *)NULL)
|
||||
{
|
||||
PQinsert(bisector, p, dist(p,newsite)) ;
|
||||
}
|
||||
newsite = (*nextsite)() ;
|
||||
}
|
||||
else if (!PQempty()) /* intersection is smallest */
|
||||
{
|
||||
lbnd = PQextractmin() ;
|
||||
llbnd = ELleft(lbnd) ;
|
||||
rbnd = ELright(lbnd) ;
|
||||
rrbnd = ELright(rbnd) ;
|
||||
bot = leftreg(lbnd) ;
|
||||
top = rightreg(rbnd) ;
|
||||
out_triple(bot, top, rightreg(lbnd)) ;
|
||||
v = lbnd->vertex ;
|
||||
makevertex(v) ;
|
||||
endpoint(lbnd->ELedge, lbnd->ELpm, v);
|
||||
endpoint(rbnd->ELedge, rbnd->ELpm, v) ;
|
||||
ELdelete(lbnd) ;
|
||||
PQdelete(rbnd) ;
|
||||
ELdelete(rbnd) ;
|
||||
pm = le ;
|
||||
if (bot->coord.y > top->coord.y)
|
||||
{
|
||||
temp = bot ;
|
||||
bot = top ;
|
||||
top = temp ;
|
||||
pm = re ;
|
||||
}
|
||||
e = bisect(bot, top) ;
|
||||
bisector = HEcreate(e, pm) ;
|
||||
ELinsert(llbnd, bisector) ;
|
||||
endpoint(e, re-pm, v) ;
|
||||
deref(v) ;
|
||||
p = intersect(llbnd, bisector) ;
|
||||
if (p != (Site *) NULL)
|
||||
{
|
||||
PQdelete(llbnd) ;
|
||||
PQinsert(llbnd, p, dist(p,bot)) ;
|
||||
}
|
||||
p = intersect(bisector, rrbnd) ;
|
||||
if (p != (Site *) NULL)
|
||||
{
|
||||
PQinsert(bisector, p, dist(p,bot)) ;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
break ;
|
||||
}
|
||||
}
|
||||
|
||||
for( lbnd = ELright(ELleftend) ;
|
||||
lbnd != ELrightend ;
|
||||
lbnd = ELright(lbnd))
|
||||
{
|
||||
e = lbnd->ELedge ;
|
||||
out_ep(e) ;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user