zonogon-section {zonohedra}R Documentation

compute the intersection of a line and the boundary of a zonogon

Description

Generically, a line intersects the boundary of a zonogon in 2 points. Computing those 2 points is the chief goal of this function.
For a supporting line, the intersection is a face of the zonogon, but in this function only one point of intersection is computed and returned.

Usage

## S3 method for class 'zonogon'
section( x, normal, beta, tol=1.e-10, plot=FALSE, ... )

Arguments

x

a zonogon object as returned by the constructor zonogon()

normal

a non-zero numeric 2-vector - the normal of all the lines

beta

a numeric M-vector of line-constants. The equation of the k'th line k is: <x,normal> = beta[k].

tol

a small positive number, used as the tolerance for the line being considered a supporting line

plot

if TRUE, the line segments formed by the the intersection of the lines and the zonogon are added to an existing plot of the zonogon x, see plot.zonogon(). The segments are drawn in dashed linestyle and the color red. boundary1 and boundary2 are plotted as points. If there is no open plot, a warning is issued.

...

not used

Value

section.zonogon() returns a data.frame with M rows and these columns:

normal

the given normal vector - this is the same in every row

beta

the given line constant

boundary1

the 1st intersection point - a 2-vector

boundary2

the 2nd intersection point - a 2-vector

Regarding orientation, if normal is considered "north" then boundary1 is on the "west" and boundary2 is on the "east".

If a line is a supporting line of the zonogon, then boundary1 is some point in the boundary face (vertex or edge), and boundary2 is NA. If a line does not intersect the zonogon, both boundary1 and boundary2 are NA.

If the names of beta are unique, they are copied to the row names of the output.

In case of error, the function returns NULL.

See Also

zonogon(), plot.zonogon(), section.zonohedron()

Examples

#   make a zonogon with 5 generators
pz20 = polarzonogon( 20, 5 )

section( pz20, normal=c(1,1), beta=-1:5 )
#   normal.1 normal.2 beta   boundary1.1   boundary1.2 boundary2.1 boundary2.2
# 1        1        1   -1            NA            NA          NA          NA
# 2        1        1    0 -2.220446e-16  0.000000e+00          NA          NA
# 3        1        1    1  2.452373e-01  7.547627e-01   1.0000000   0.0000000
# 4        1        1    2  6.203838e-01  1.379616e+00   1.7547627   0.2452373
# 5        1        1    3  1.095537e+00  1.904463e+00   2.3796162   0.6203838
# 6        1        1    4  1.674729e+00  2.325271e+00   2.9044629   1.0955371
# 7        1        1    5  2.420068e+00  2.579932e+00   3.3252706   1.6747294

[Package zonohedra version 0.2-2 Index]