File: visual_voronoi.rules

package info (click to toggle)
polymake 4.14-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 35,888 kB
  • sloc: cpp: 168,933; perl: 43,407; javascript: 31,575; ansic: 3,007; java: 2,654; python: 632; sh: 268; xml: 117; makefile: 61
file content (65 lines) | stat: -rw-r--r-- 2,402 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#  Copyright (c) 1997-2024
#  Ewgenij Gawrilow, Michael Joswig, and the polymake team
#  Technische Universität Berlin, Germany
#  https://polymake.org
#
#  This program is free software; you can redistribute it and/or modify it
#  under the terms of the GNU General Public License as published by the
#  Free Software Foundation; either version 2, or (at your option) any
#  later version: http://www.gnu.org/licenses/gpl.txt.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#-------------------------------------------------------------------------------

package Visual::Color;

# default color for the [[SITES]] of a voronoi diagram
custom $voronoisites = "255 165 0";

# @category Visualization
options %Visual::sitedecorations = (
   # String An array, hash or sub to provide labels for the sites (default is 0..n-1 for n [[SITES]])
   SiteLabels => undef,

   # [complete color] Flexible<Color> color of the [[SITES]]
   SiteColor => $Visual::Color::voronoisites,

   # Flexible<Float> Thickness of the [[SITES]]
   SiteThickness => 1,
);

object polytope::VoronoiPolyhedron {

# @category Visualization
# Visualize the Voronoi diagram together with its sites.
# @options %Visual::Polygons::decorations
# @options %Visual::sitedecorations
# @return Visual::Container

user_method VISUAL_VORONOI(%Visual::Polygons::decorations, %Visual::sitedecorations) : SITES, VORONOI_DIAGRAM, POINTED, VERTICES{
   my ($this, $decor, $sitedecor)=@_;

   foreach (keys %$sitedecor) {
      $sitedecor->{s/Site/Vertex/r} = delete $sitedecor->{$_};
   }
   $sitedecor->{VertexLabels} //= $this->lookup("SITE_LABELS"); 
   my $points = new Matrix<Scalar>($this->SITES);
   my $p = new Visual::PointSet(Name=>"sites", Points=>dehomogenize(convert_to<Float>($points)),Explodable=>0,$sitedecor);
   if ($this->POINTED) {
      $points /= $this->VERTICES->minor($this->BOUNDED_VERTICES, range(0, $this->VERTICES->cols-2));
   }
   my $bbox = bounding_box_facets($points,surplus_k=>1);
   $decor->{VertexLabels} //= "hidden";
   compose($p,$this->VORONOI_DIAGRAM->VISUAL(FacetTransparency=>0.5,BoundingFacets=>$bbox,$decor));
}

}

# Local Variables:
# mode: perl
# cperl-indent-level:3
# indent-tabs-mode:nil
# End: