File: Surface.pod

package info (click to toggle)
libmath-polygon-perl 2.00-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 256 kB
  • sloc: perl: 1,618; makefile: 2
file content (139 lines) | stat: -rw-r--r-- 3,050 bytes parent folder | download
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
=encoding utf8

=head1 NAME

Math::Polygon::Surface - Polygon with exclusions

=head1 SYNOPSIS

  my $outer   = Math::Polygon->new( [1,2], [2,4], [5,7], [1,2] );
  my $surface = Math::Polygon::Surface->new($outer);

=head1 DESCRIPTION

A surface is one polygon which represents the outer bounds of an
array, plus optionally a list of polygons which represent exclusions
from that outer polygon.

=head1 METHODS

=head2 Constructors

=over 4

=item $any-E<gt>B<new>( [%options], [@polygons], %options )

You may merge C<%options> with C<@polygons>.  You may also use
the "outer" and "inner" options.

Each polygon is a references to an ARRAY of points, each an ARRAY of X
and Y, but better pass L<Math::Polygon|Math::Polygon> objects.

 -Option--Default
  inner   []
  outer   undef

=over 2

=item inner => \@polygons

The inner C<@polygons>, zero or more L<Math::Polygon|Math::Polygon> objects.

=item outer => $polygon

The outer C<$polygon>, a L<Math::Polygon|Math::Polygon>.

=back

=back

=head2 Attributes

=over 4

=item $obj-E<gt>B<inner>()

Returns a list (often empty) of inner polygons.

=item $obj-E<gt>B<outer>()

Returns the outer polygon.

=back

=head2 Simple calculations

=over 4

=item B<area>()

Returns the area enclosed by the outer polygon, minus the areas of the
inner polygons.
See method L<Math::Polygon::area()|Math::Polygon/"Geometry">.

=item $obj-E<gt>B<bbox>()

Returns a list with four elements: (xmin, ymin, xmax, ymax), which describe
the bounding box of the surface, which is the bbox of the outer polygon.
See method L<Math::Polygon::bbox()|Math::Polygon/"Geometry">.

=item $obj-E<gt>B<perimeter>()

The length of the border: sums outer and inner perimeters.
See method L<Math::Polygon::perimeter()|Math::Polygon/"Geometry">.

=back

=head2 Clipping

=over 4

=item $obj-E<gt>B<fillClip1>($box)

Clipping a polygon into rectangles can be done in various ways.
With this algorithm, the parts of the polygon which are outside
the C<$box> are mapped on the borders.

All polygons are treated separately.

=item $obj-E<gt>B<lineClip>($box)

Returned is a list of ARRAYS-OF-POINTS containing line pieces
from the input surface.  Lines from outer and inner polygons are
undistinguishable.
See method L<Math::Polygon::lineClip()|Math::Polygon/"Clipping">.

=item $obj-E<gt>B<string>()

Translate the surface structure into some string.  Use Geo::WKT if you
need a standardized format.

Returned is a single string possibly containing multiple lines.  The first
line is the outer, the other lines represent the inner polygons.

=back

=head1 DIAGNOSTICS

=over 4

=item Error: surface requires outer polygon

Cast by new()

=back

=head1 SEE ALSO

This module is part of Math-Polygon version 2.00,
built on September 04, 2025. Website: F<http://perl.overmeer.net/CPAN/>

=head1 LICENSE

For contributors see file ChangeLog.

This software is copyright (c) 2004-2025 by Mark Overmeer.

This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.