[R] How to draw holes generated by gpclib using plot function

Ross Ihaka ihaka at stat.auckland.ac.nz
Tue May 11 09:40:15 CEST 2004


Hisaji ONO wrote:
> Hi.
> 
>  I've tried to create a polygon with one hole by gpclib using following
> example script.
> 
>  holepoly <- read.polyfile(system.file("poly-ex/hole-poly.txt", package
> ="gpclib"), nohole = FALSE)
>  area.poly(holepoly)
>  plot(holepoly,poly.args=list(col="red",border="blue"))
> 
>  And I noticed plot function couldn't draw polygons with holes correctly.
> 
>  Does anyone know how to solve this situation?

This is basic constraint in the R graphics system.  Polygons must
consist of a single (possibly self-intersecting) ring.  It would be
possible to implement a primitive which is bounded by several
non-intersecting rings by joining the interior holes to the outer
boundary to create a simply connected shape. Then you could draw
the interior with the existing polygon primitive.  You can find a
more precise description of the process in the FIST (fast
industrial-strength triangulation) paper:

 M. Held (2001):
``FIST: Fast Industrial-Strength Triangulation of Polygons''.
Algorithmica 30(4): 563-596, 2001.

It would be VERY useful to have an implementation of this (hint, hint!)

Alternatively, I think that gpc has an option to return a triangulated
version of the polygon.  If you get hold of this you could just draw the
triangles. though this might be slow for complex polygons.


-- 
Ross Ihaka                         Email:  ihaka at stat.auckland.ac.nz
Department of Statistics           Phone:  (64-9) 373-7599 x 85054
University of Auckland             Fax:    (64-9) 373-7018
Private Bag 92019, Auckland
New Zealand




More information about the R-help mailing list