X-Git-Url: https://git.jsancho.org/?p=dungeon-master.git;a=blobdiff_plain;f=dungeon-master%2Fgeom%2Fvoronoi.scm;fp=dungeon-master%2Fgeom%2Fvoronoi.scm;h=a748634dad75eb54580c26917b5b8bb900f05d05;hp=7a9c457a4674308023f702a71666c9c1b6ae4e26;hb=efcdd7897930ce2ce2f24ef789c8331b6154527b;hpb=695ecf94f5bb10ced4e66b0b4d036de9965c02ca diff --git a/dungeon-master/geom/voronoi.scm b/dungeon-master/geom/voronoi.scm index 7a9c457..a748634 100644 --- a/dungeon-master/geom/voronoi.scm +++ b/dungeon-master/geom/voronoi.scm @@ -9,18 +9,50 @@ voronoi-mesh? voronoi-mesh-triangles voronoi-mesh-points - voronoi-mesh-frame)) + voronoi-mesh-frame + voronoi-mesh-regions)) "https://github.com/watabou/TownGeneratorOS/blob/master/Source/com/watabou/geom/Voronoi.hx" +(define-record-type + (make-voronoi-region seed vertices) + voronoi-region? + (seed voronoi-region-seed) + (vertices voronoi-region-vertices)) + (define-record-type - (make-raw-voronoi-mesh triangles points frame) + (make-raw-voronoi-mesh triangles points frame regions) voronoi-mesh? - (triangles voronoi-mesh-triangles set-voronoi-mesh-triangles!) - (points voronoi-mesh-points set-voronoi-mesh-points!) - (frame voronoi-mesh-frame set-voronoi-mesh-frame!)) + (triangles voronoi-mesh-triangles) + (points voronoi-mesh-points) + (frame voronoi-mesh-frame) + (regions voronoi-mesh-regions)) -(define (make-voronoi-mesh vertices) +(define* (make-voronoi-mesh vertices #:optional (relax-steps 3)) + ; Delaunay triangulation (receive (triangles points frame) (bowyer-watson vertices) - (make-raw-voronoi-mesh triangles points frame))) + ; Relaxing central wards + ;; (let relax ((step relax-steps)) + ;; (cond ((> step 0) + ;; (relax (- step 1))) + ;; (else + ;; #t))) + (make-raw-voronoi-mesh + triangles + points + frame + (make-regions points triangles)))) + +(define* (make-regions points triangles #:optional (regions '())) + (cond ((null? points) + regions) + (else + (let* ((p (car points)) + (vertices (filter + (lambda (tr) (member p (triangle-points tr))) + triangles))) + (display p)(newline) + (make-regions (cdr points) + triangles + (cons (make-voronoi-region p vertices) regions))))))