From 8715ab0a8daf3cc2753262cff348ebee08279176 Mon Sep 17 00:00:00 2001 From: Philippe Verley <philippe.verley@ird.fr> Date: Mon, 15 Mar 2021 11:11:42 +0000 Subject: [PATCH] Updated branches/stable-1.5 from ads-1.5-4 and updated NAMESPACE and DESCRIPTION for with new spatstat packages family --- DESCRIPTION | 15 +-- INDEX | 4 +- NAMESPACE | 35 +++---- R/fads.R | 6 +- R/swin.R | 8 +- R/triangulate.R | 2 +- R/util.R | 107 ++++++++++++++------- R/zzz.R | 14 +++ data/Paracou15.rda | Bin 47601 -> 47660 bytes inst/CITATION | 4 +- man/Allogny.Rd | 52 +++++------ man/BPoirier.Rd | 68 +++++++------- man/Couepia.Rd | 56 +++++------ man/area.swin.Rd | 90 +++++++++--------- man/demopat.Rd | 44 ++++----- man/dval.Rd | 8 +- man/inside.swin.Rd | 82 ++++++++-------- man/internal.Rd | 4 +- man/k12fun.Rd | 11 +-- man/k12val.Rd | 146 ++++++++++++++--------------- man/kdfun.Rd | 22 ++--- man/kfun.Rd | 8 +- man/kmfun.Rd | 6 +- man/kp.fun.Rd | 6 +- man/kpqfun.Rd | 6 +- man/krfun.Rd | 30 +++--- man/ksfun.Rd | 10 +- man/kval.Rd | 148 ++++++++++++++--------------- man/mimetic.Rd | 8 +- man/plot.fads.Rd | 6 +- man/plot.spp.Rd | 23 ++--- man/plot.vads.Rd | 10 +- man/spp.Rd | 18 ++-- man/swin.Rd | 14 +-- man/triangulate.Rd | 22 ++--- src/Zlibs.c | 45 +++++---- src/Zlibs.h | 227 +++++++++++++++++++++++++++++---------------- src/adssub.c | 54 +++++++++++ src/adssub.h | 53 ++++++----- src/init.c | 143 ++++++++++++++-------------- src/spatstatsub.f | 47 ---------- src/triangulate.c | 78 ---------------- src/triangulate.h | 10 +- src/util.c | 80 ++++++++++++++++ 44 files changed, 988 insertions(+), 842 deletions(-) create mode 100644 R/zzz.R delete mode 100755 src/spatstatsub.f create mode 100755 src/util.c diff --git a/DESCRIPTION b/DESCRIPTION index 9f94dbd..242a241 100755 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,18 +1,21 @@ Package: ads Type: Package Title: Spatial Point Patterns Analysis -Version: 1.5-3 -Date: 2018-03-29 +Version: 1.5-4 +Date: 2020-09-11 Authors@R: c(person("Raphael", "Pelissier", role="aut", email="raphael.pelissier@ird.fr"), person("Francois", "Goreau", role="aut"), person("Philippe", "Verley", role=c("ctb", "cre"), email="philippe.verley@ird.fr")) Author: Raphael Pelissier [aut], Francois Goreau [aut], Philippe Verley [ctb, cre] -Maintainer: Philippe Verley <philippe.verley@ird.fr> -Imports: ade4, spatstat -Description: Perform first- and second-order multi-scale analyses derived from Ripley K-function, for univariate, +Maintainer: Raphael Pelissier <Raphael.Pelissier@ird.fr> +Imports: ade4, spatstat.geom +Description: Perform first- and second-order multi-scale analyses derived from Ripley K-function (Ripley B. D. (1977) <doi:10.1111/j.2517-6161.1977.tb01615.x>), for univariate, multivariate and marked mapped data in rectangular, circular or irregular shaped sampling windows, with tests of statistical significance based on Monte Carlo simulations. +Depends: R (>= 3.5.0) License: GPL-2 NeedsCompilation: yes Repository: CRAN -RoxygenNote: 6.0.1 +Date/Publication: 2020-09-11 12:20:07 UTC +Packaged: 2020-09-11 11:19:29 UTC; rpelissier +RoxygenNote: 7.1.1 diff --git a/INDEX b/INDEX index 309fd0e..a6c7ef2 100755 --- a/INDEX +++ b/INDEX @@ -1,14 +1,14 @@ Allogny Spatial pattern of oaks suffering from frost shake in Allogny, France. BPoirier Tree spatial pattern in Beau Poirier plot, Haye forest, France. Couepia Spatial pattern of Couepia caryophylloides in Paracou, a canopy tree species of French Guiana. -demopat Artificial data point pattern from \code{spatstat} package. +demopat Artificial data point pattern from \code{spatstat.data} package. Paracou15 Spatial pattern of trees in plot 15 of Paracou experimental station, French Guiana. area.swin Area of a sampling window. dval Multiscale local density of a spatial point pattern. inside.swin Test wether points are inside a sampling window. k12fun Multiscale second-order neigbourhood analysis of a bivariate spatial point pattern. k12val Multiscale local second-order neighbour density of a bivariate spatial point pattern. -kdfun Multiscale second-order neigbourhood analysis of phylogentic/functional spatial structure of a multivariate spatial point pattern. +kdfun Multiscale second-order neigbourhood analysis of phylogentic/functional spatial structure of a multivariate spatial point pattern. kfun Multiscale second-order neigbourhood analysis of an univariate spatial point pattern. kmfun Multiscale second-order neigbourhood analysis of a marked spatial point pattern. kp.fun (Formerly ki.fun) Multiscale second-order neigbourhood analysis of a multivariate spatial point pattern. diff --git a/NAMESPACE b/NAMESPACE index 8949b00..9765780 100755 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,11 +1,20 @@ -importFrom(ade4,"divc","is.euclid") -importFrom(spatstat,"border","bounding.box.xy","area.owin") -importFrom("graphics", "abline", "barplot", "layout", "lines", "par", - "plot", "plot.default", "points", "polygon", "symbols", - "text") -importFrom("stats", "as.dist", "var") -importFrom("utils", "read.table", "str") +# load DLL +useDynLib(ads, .registration = TRUE, .fixes = "C_") +# Import external pkg names +importFrom(ade4, + divc, is.euclid) +importFrom(spatstat.geom, + border, bounding.box.xy, area.owin) +importFrom(graphics, + abline, barplot, layout, lines, par, plot, plot.default, points, + polygon, symbols, text) +importFrom(stats, + as.dist, var) +importFrom(utils, + read.table, str) + +# Export all names (should be improved in the future) export( k12fun, k12val, @@ -17,7 +26,6 @@ export( krfun, ksfun, kval, - swin, area.swin, inside.swin, @@ -26,15 +34,10 @@ export( mimetic, owin2swin, spp, - triangulate -) - -exportClasses( - fads, + triangulate, mimetic, spp, - swin, - vads + swin ) S3method(plot, kfun, plot.fads.kfun) @@ -76,5 +79,3 @@ S3method(summary, swin) S3method(summary, dval, summary.vads.dval) S3method(summary, k12val, summary.vads.k12val) S3method(summary, kval, summary.vads.kval) - -useDynLib(ads, .registration=TRUE) diff --git a/R/fads.R b/R/fads.R index 90e6f3e..c0afdfb 100755 --- a/R/fads.R +++ b/R/fads.R @@ -790,15 +790,15 @@ kmfun<-function(p,upto,by,nsim=0,alpha=0.01) { PACKAGE="ads") } else { #with CI - res<-.C("corr_tr_disq_ic", + res<-.C("ripley_tr_disq_ic", as.integer(p$n),as.double(p$x),as.double(p$y),as.double(p$marks), - as.double(x0),as.double(y0),as.double(r0), + as.double(x0),as.double(y0),as.double(r0),as.double(intensity), as.integer(nbTri),as.double(tri$ax),as.double(tri$ay),as.double(tri$bx),as.double(tri$by),as.double(tri$cx),as.double(tri$cy), as.integer(tmax),as.double(by), as.integer(nsim),as.double(alpha), gm=double(tmax),km=double(tmax), gmic1=double(tmax),gmic2=double(tmax),kmic1=double(tmax),kmic2=double(tmax), - gmval=double(tmax),kmval=double(tmax), + gmval=double(tmax),kmval=double(tmax),lmval=double(tmax),nmval=double(tmax), PACKAGE="ads") } } diff --git a/R/swin.R b/R/swin.R index fc17c57..e5b8cc7 100755 --- a/R/swin.R +++ b/R/swin.R @@ -171,6 +171,7 @@ plot.swin<-function (x,main,edge,scale=TRUE,add=FALSE,csize=1,...) { inside.swin<-function(x,y,w,bdry=TRUE) { stopifnot(inherits(w,"swin")) stopifnot(length(x)==length(y)) + inside<-vector(mode="logical",length=length(x)) if("rectangle"%in%w$type) inside<-in.rectangle(x,y,w$xmin,w$ymin,w$xmax,w$ymax,bdry) else if("circle"%in%w$type) @@ -179,9 +180,8 @@ inside.swin<-function(x,y,w,bdry=TRUE) { stop("invalid window type") if("complex"%in%w$type) { tri<-w$triangles - for(i in 1:nrow(tri)) - inside[in.triangle(x,y,tri$ax[i],tri$ay[i],tri$bx[i],tri$by[i],tri$cx[i],tri$cy[i])]<-FALSE - } + inside[in.triangle(x,y,tri$ax,tri$ay,tri$bx,tri$by,tri$cx,tri$cy,bdry)]<-FALSE + } return(inside) } @@ -200,7 +200,7 @@ owin2swin<-function(w) { else { #polygon with holes stopifnot(w$bdry[[1]]$hole==FALSE) bb<-bounding.box.xy(w$bdry[[1]][1:2]) - if((bb$xrange==w$xrange)&&(bb$yrange==w$yrange)&&(area.owin(bb)==w$bdry[[1]]$area)) { #first poly is rectangular window frame + if(all(bb$xrange==w$xrange)&&all(bb$yrange==w$yrange)&&(area.owin(bb)==w$bdry[[1]]$area)) { #first poly is rectangular window frame outer.poly<-data.frame(x=c(rep(w$xrange[1],2),rep(w$xrange[2],2)),y=c(w$yrange,w$yrange[2:1])) for(i in 2:length(w$bdry)) { stopifnot(w$bdry[[i]]$hole==TRUE) diff --git a/R/triangulate.R b/R/triangulate.R index e263ba8..9453bae 100755 --- a/R/triangulate.R +++ b/R/triangulate.R @@ -44,7 +44,7 @@ triangulate<-function(outer.poly,holes) { vertY<-outer.poly$y nbtri<-(nbpts-2) } - tri<-.C("c_triangulate", + tri<-.C("triangulate", as.integer(nbpoly),as.integer(nbpts),as.integer(nbptot),as.double(vertX),as.double(vertY),as.integer(nbtri), X1=double(nbtri),Y1=double(nbtri),X2=double(nbtri),Y2=double(nbtri),X3=double(nbtri),Y3=double(nbtri), PACKAGE="ads") diff --git a/R/util.R b/R/util.R index 8bdc178..985ee28 100755 --- a/R/util.R +++ b/R/util.R @@ -11,7 +11,7 @@ overlapping.polygons<-function(listpoly) { return(res) } -#from area.xypolygon{spatstat} +#from area.xypolygon{spatstat.geom} #return area>0 when (xp,yp) vertices are ranked anticlockwise #or area<0 when (xp,yp) vertices are ranked clockwise area.poly<-function(xp,yp) { @@ -44,17 +44,61 @@ in.rectangle<-function(x,y,xmin,ymin,xmax,ymax,bdry=TRUE) { stopifnot(length(x)==length(y)) stopifnot((xmax-xmin)>0) stopifnot((ymax-ymin)>0) - rect<-list(x=c(xmin,xmax,xmax,xmin),y=c(ymin,ymin,ymax,ymax)) - return(in.poly(x,y,rect,bdry)) + l<-length(x) + inside<-vector(mode="logical",length=l) + for(i in 1:l) { + if(bdry) { + if(x[i]>=xmin&&x[i]<=xmax&&y[i]>=ymin&&y[i]<=ymax) + inside[i]<-TRUE + } + else { + if(x[i]>xmin&&x[i]<xmax&&y[i]>ymin&&y[i]<ymax) + inside[i]<-TRUE + } + } + return(inside) } +#modified from inside.triangle(spatstat.utils) in.triangle<-function(x,y,ax,ay,bx,by,cx,cy,bdry=TRUE) { stopifnot(length(x)==length(y)) - tri<-list(x=c(ax,bx,cx),y=c(ay,by,cy)) - return(in.poly(x,y,tri,bdry)) + p<-length(x) + inside<-vector(mode="logical",length=p) + t<-length(ax) + stopifnot(all(c(length(ay),length(bx),length(by),length(cx),length(cy))==t)) + intri<-matrix(0,p,t) + for(j in 1:t) { + v0x <- cx[j] - ax[j] + v0y <- cy[j] - ay[j] + v1x <- bx[j] - ax[j] + v1y <- by[j] - ay[j] + dot00 <- v0x^2 + v0y^2 + dot01 <- v0x * v1x + v0y * v1y + dot11 <- v1x^2 + v1y^2 + for(i in 1:p) { + if(!inside[i]) { + v2x <- x[i] - ax[j] + v2y <- y[i] - ay[j] + dot02 <- v0x * v2x + v0y * v2y + dot12 <- v1x * v2x + v1y * v2y + Denom <- dot00 * dot11 - dot01 * dot01 + u <- dot11 * dot02 - dot01 * dot12 + v <- dot00 * dot12 - dot01 * dot02 + if(bdry) { + if((u >= 0) & (v >= 0) & (u + v <= Denom)) + inside[i]<-TRUE + } + else { + if((u > 0) & (v > 0) & (u + v < Denom)) + inside[i]<-TRUE + } + } + } + } + return(inside) } -#modified from plot.ppp{spatstat} +#modified from plot.ppp{spatstat.core} adjust.marks.size<-function(marks,window,maxsize=NULL) { if(is.null(maxsize)) { if("rectangle"%in%window$type) @@ -233,36 +277,27 @@ overlap.trapez <- function(xa, ya, xb, yb, verb=FALSE) { return(signfactor * areaT) } -#TRUE: les points sur la bordure sont = inside +#Points on boundary are considered outside. No alternative option implemented yet. in.poly<-function(x,y,poly,bdry=TRUE) { + if(bdry) { + bdry<-FALSE + warning("argument 'bdry' automatically set to FALSE. No alternative implemented yet") + } stopifnot(is.poly(poly)) xp <- poly$x yp <- poly$y npts <- length(x) - nedges <- length(xp) # sic - - score <- rep(0, npts) - on.boundary <- rep(FALSE, npts) - temp <- .Fortran( - "inpoly", - x=as.double(x), - y=as.double(y), - xp=as.double(xp), - yp=as.double(yp), - npts=as.integer(npts), - nedges=as.integer(nedges), - score=as.double(score), - onbndry=as.logical(on.boundary), - PACKAGE="ads" - ) - score <- temp$score - on.boundary <- temp$onbndry - score[on.boundary] <- 1 - res<-rep(FALSE,npts) - res[score==(-1)]<-TRUE - if(bdry) - res[score==1]<-TRUE - return(res) + nedg <- length(poly$x) # sic + xmi<-ifelse(min(x)<=min(poly$x),min(x),min(poly$x)) + ymi<-ifelse(max(x)>=max(poly$x),max(x),max(poly$x)) + polxrange<-ifelse(min(y)<=min(poly$y),min(y),min(poly$y)) + polyrange<-ifelse(max(y)>=max(poly$y),max(y),max(poly$y)) + res <- .C("pnpoly", + as.double(x),as.double(y),as.double(poly$x), + as.double(poly$y),as.integer(npts),as.integer(nedg),as.double(xmi), + as.double(ymi),as.double(polxrange),as.double(polyrange),score=double(npts), + PACKAGE="ads") + return(as.logical(res$score)) } #################### @@ -307,6 +342,16 @@ read.tri<-function(X) { return(res) } +transpose<-function(x,y) { + + nbTri<-length(x)/3 + + res<-.C("transpose",x=as.double(x),y=as.double(y),nbTri=as.integer(nbTri), + x1=double(nbTri),y1=double(nbTri),x2=double(nbTri),y2=double(nbTri), + x3=double(nbTri),y3=double(nbTri),PACKAGE="ads") + + list(x1=res$x1,y1=res$y1,x2=res$x2,y2=res$y2,x3=res$x3,y3=res$y3) +} ############## #subsetting dist objects #sub is a logical vector of True/False diff --git a/R/zzz.R b/R/zzz.R new file mode 100644 index 0000000..e329866 --- /dev/null +++ b/R/zzz.R @@ -0,0 +1,14 @@ +########################################################################## +## start-up and clean-up functions +######################################################################### + +.onAttach <- function(...) { + # echo output to screen + packageStartupMessage("##\n## ads R package \n", + "## For Spatial Point Patterns Analysis \n", + "##\n") +} + +.onUnload <- function(libpath) { + library.dynam.unload("ads", libpath) +} \ No newline at end of file diff --git a/data/Paracou15.rda b/data/Paracou15.rda index b0783a29fe6933739891790764d2eeedf223b8b1..fa1aec405056325c47efaedb703db7dcd283b337 100755 GIT binary patch literal 47660 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 Ld<b`*_s;(Tc)-KY literal 47601 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 RjaBOuXUwE~H!WT8e*o_E{W1Um diff --git a/inst/CITATION b/inst/CITATION index f644116..89c38f7 100644 --- a/inst/CITATION +++ b/inst/CITATION @@ -9,12 +9,12 @@ citEntry(entry = "Article", volume = "63", number = "6", pages = "1--18", - url = "http://www.jstatsoft.org/v63/i06/", + url = "http://dx.doi.org/10.18637/jss.v063.i06", textVersion = paste("Raphael Pelissier, Francois Goreaud (2015).", "ads Package for R: A Fast Unbiased Implementation of the K-function Family for Studying Spatial Point Patterns in Irregular-Shaped Sampling Windows.", "Journal of Statistical Software, 63(6), 1-18.", - "URL http://www.jstatsoft.org/v63/i06/.") + "URL http://dx.doi.org/10.18637/jss.v063.i06.") ) diff --git a/man/Allogny.Rd b/man/Allogny.Rd index c6a82c9..2f6893c 100755 --- a/man/Allogny.Rd +++ b/man/Allogny.Rd @@ -1,27 +1,27 @@ \name{Allogny} -\encoding{latin1} -\alias{Allogny} -\docType{data} -\title{Spatial pattern of oaks suffering from frost shake in Allogny, France.} -\description{ -Spatial pattern of sound and splited oaks (\emph{Quercus petraea}) suffering from frost shake in a 2.35-ha plot in Allogny, France. -} -\usage{data(Allogny)} -\format{ -A list with 4 components:\cr -\code{$rect } is a vector of coordinates \eqn{(xmin,ymin,xmax,ymax)} of the origin and the opposite corner of a 125 by 188 m square plot.\cr -\code{$trees } is a list of tree coordinates \eqn{(x,y)}.\cr -\code{$status } is a factor with 2 levels \eqn{("splited","sound")}.\cr -} -\source{ - Grandjean, G., Jabiol, B., Bruchiamacchie, M. and Roustan, F. 1990. \emph{Recherche de corrélations entre les paramètres édaphiques, et plus spécialement texture, hydromorphie et drainage interne, et la réponse individuelle des chenes sessiles et pédonculés à la gélivure.} Rapport de recherche ENITEF, Nogent sur Vernisson, France. -} -\references{ -Goreaud, F. & Pélissier, R. 2003. Avoiding misinterpretation of biotic interactions with the intertype \emph{K12}-function: population independence vs. random labelling hypotheses. \emph{Journal of Vegetation Science}, 14: 681-692. -} -\examples{ -data(Allogny) -allo.spp <- spp(Allogny$trees, mark=Allogny$status, window=Allogny$rect) -plot(allo.spp) -} -\keyword{datasets} +\encoding{latin1} +\alias{Allogny} +\docType{data} +\title{Spatial pattern of oaks suffering from frost shake in Allogny, France.} +\description{ +Spatial pattern of sound and splited oaks (\emph{Quercus petraea}) suffering from frost shake in a 2.35-ha plot in Allogny, France. +} +\usage{data(Allogny)} +\format{ +A list with 4 components:\cr +\code{$rect } is a vector of coordinates \eqn{(xmin,ymin,xmax,ymax)} of the origin and the opposite corner of a 125 by 188 m square plot.\cr +\code{$trees } is a list of tree coordinates \eqn{(x,y)}.\cr +\code{$status } is a factor with 2 levels \eqn{("splited","sound")}.\cr +} +\source{ + Grandjean, G., Jabiol, B., Bruchiamacchie, M. and Roustan, F. 1990. \emph{Recherche de corrélations entre les paramètres édaphiques, et plus spécialement texture, hydromorphie et drainage interne, et la réponse individuelle des chenes sessiles et pédonculés à la gélivure.} Rapport de recherche ENITEF, Nogent sur Vernisson, France. +} +\references{ +Goreaud, F. & Pélissier, R. 2003. Avoiding misinterpretation of biotic interactions with the intertype \emph{K12}-function: population independence vs. random labelling hypotheses. \emph{Journal of Vegetation Science}, 14: 681-692. +} +\examples{ +data(Allogny) +allo.spp <- spp(Allogny$trees, mark=Allogny$status, window=Allogny$rect) +plot(allo.spp) +} +\keyword{datasets} diff --git a/man/BPoirier.Rd b/man/BPoirier.Rd index d5a6622..1979a29 100755 --- a/man/BPoirier.Rd +++ b/man/BPoirier.Rd @@ -1,34 +1,34 @@ -\encoding{latin1} -\name{BPoirier} -\alias{BPoirier} -\docType{data} -\title{Tree spatial pattern in Beau Poirier plot, Haye forest, France} -\description{ -Spatial pattern of 162 beeches, 72 oaks and 3 hornbeams in a 1-ha 140 yr-old temperate forest plot in Haye, France. -} -\usage{data(BPoirier)} -\format{ -A list with 8 components:\cr -\code{$rect } is a vector of coordinates \eqn{(xmin,ymin,xmax,ymax)} of the origin and the opposite corner of a 110 by 90 m rectangular plot.\cr -\code{$tri1 } is a list of vertice coordinates \eqn{(ax,ay,bx,by,cx,cy)} of contiguous triangles covering the denser part of the plot.\cr -\code{$tri2 } is a list of vertice coordinates \eqn{(ax,ay,bx,by,cx,cy)} of contiguous triangles covering the sparser part of the plot.\cr -\code{$poly1 } is a list of vertice coordinates \eqn{(x,y)} of the polygon enclosing \code{BPoirier$tri1}.\cr -\code{$poly2 } is a list of two polygons vertice coordinates \eqn{(x,y)} enclosing \code{BPoirier$tri2}.\cr -\code{$trees } is a list of tree coordinates \eqn{(x,y)}.\cr -\code{$species } is a factor with 3 levels \eqn{("beech","oak","hornbeam")} corresponding to species names of the trees.\cr -\code{$dbh } is a vector of tree size (diameter at breast height in cm). -} -\source{ -Pardé, J. 1981. De 1882 à 1976/80 : les places d'expèrience de sylviculture du hetre en foret domainiale de Haye. \emph{Revue Forestière Française}, 33: 41-64. -} - -\references{ -Goreaud, F. 2000. \emph{Apports de l'analyse de la structure spatiale en foret tempérée à l'étude et la modélisation des peuplements complexes}. Thèse de doctorat, ENGREF, Nancy, France.\cr\cr -Pélissier, R. & Goreaud, F. 2001. A practical approach to the study of spatial structure in simple cases of heterogeneous vegetation. \emph{Journal of Vegetation Science}, 12: 99-108. -} -\examples{ -data(BPoirier) -BP.spp <- spp(BPoirier$trees, mark=BPoirier$species, window=BPoirier$rect) -plot(BP.spp) -} -\keyword{datasets} +\encoding{latin1} +\name{BPoirier} +\alias{BPoirier} +\docType{data} +\title{Tree spatial pattern in Beau Poirier plot, Haye forest, France} +\description{ +Spatial pattern of 162 beeches, 72 oaks and 3 hornbeams in a 1-ha 140 yr-old temperate forest plot in Haye, France. +} +\usage{data(BPoirier)} +\format{ +A list with 8 components:\cr +\code{$rect } is a vector of coordinates \eqn{(xmin,ymin,xmax,ymax)} of the origin and the opposite corner of a 110 by 90 m rectangular plot.\cr +\code{$tri1 } is a list of vertice coordinates \eqn{(ax,ay,bx,by,cx,cy)} of contiguous triangles covering the denser part of the plot.\cr +\code{$tri2 } is a list of vertice coordinates \eqn{(ax,ay,bx,by,cx,cy)} of contiguous triangles covering the sparser part of the plot.\cr +\code{$poly1 } is a list of vertice coordinates \eqn{(x,y)} of the polygon enclosing \code{BPoirier$tri1}.\cr +\code{$poly2 } is a list of two polygons vertice coordinates \eqn{(x,y)} enclosing \code{BPoirier$tri2}.\cr +\code{$trees } is a list of tree coordinates \eqn{(x,y)}.\cr +\code{$species } is a factor with 3 levels \eqn{("beech","oak","hornbeam")} corresponding to species names of the trees.\cr +\code{$dbh } is a vector of tree size (diameter at breast height in cm). +} +\source{ +Pardé, J. 1981. De 1882 à 1976/80 : les places d'expèrience de sylviculture du hetre en foret domainiale de Haye. \emph{Revue Forestière Française}, 33: 41-64. +} + +\references{ +Goreaud, F. 2000. \emph{Apports de l'analyse de la structure spatiale en foret tempérée à l'étude et la modélisation des peuplements complexes}. Thèse de doctorat, ENGREF, Nancy, France.\cr\cr +Pélissier, R. & Goreaud, F. 2001. A practical approach to the study of spatial structure in simple cases of heterogeneous vegetation. \emph{Journal of Vegetation Science}, 12: 99-108. +} +\examples{ +data(BPoirier) +BP.spp <- spp(BPoirier$trees, mark=BPoirier$species, window=BPoirier$rect) +plot(BP.spp) +} +\keyword{datasets} diff --git a/man/Couepia.Rd b/man/Couepia.Rd index 1657622..3453566 100755 --- a/man/Couepia.Rd +++ b/man/Couepia.Rd @@ -1,28 +1,28 @@ -\encoding{latin1} -\name{Couepia} -\alias{Couepia} -\docType{data} -\title{Spatial pattern of Couepia caryophylloides in Paracou, a canopy tree species of French Guiana.} -\description{ -Spatial pattern of 34 mature individuals and 173 young individuals of the tree species \emph{Couepia caryophylloides} (Chrysobalanaceae) in a 25-ha forest plot in Paracou, French Guiana. -} -\usage{data(Couepia)} -\format{ -A list with 4 components:\cr -\code{$rect } is a vector of coordinates \eqn{(xmin,ymin,xmax,ymax)} of the origin and the opposite corner of a 500 by 500 m rectangular plot.\cr -\code{$tri } is a list of vertice coordinates \eqn{(ax,ay,bx,by,cx,cy)} of contiguous triangles covering swampy parts of the plot.\cr -\code{$trees } is a list of tree coordinates \eqn{(x,y)}.\cr -\code{$stage } is a factor with 2 levels \eqn{("mature","young")}.\cr -} -\source{ - Collinet, F. 1997. \emph{Essai de regroupement des principales espèces structurantes d'une foret dense humide d'après l'analyse de leur répartition spatiale (foret de Paracou - Guyane).} Thèse de doctorat, Université Claude Bernard, Lyon, France. -} -\references{ -Goreaud, F. & Pélissier, R. 2003. Avoiding misinterpretation of biotic interactions with the intertype \emph{K12}-function: population independence vs. random labelling hypotheses. \emph{Journal of Vegetation Science}, 14: 681-692. -} -\examples{ -data(Couepia) -coca.spp <- spp(Couepia$trees, mark=Couepia$stage, window=Couepia$rect, triangles=Couepia$tri) -plot(coca.spp) -} -\keyword{datasets} +\encoding{latin1} +\name{Couepia} +\alias{Couepia} +\docType{data} +\title{Spatial pattern of Couepia caryophylloides in Paracou, a canopy tree species of French Guiana.} +\description{ +Spatial pattern of 34 mature individuals and 173 young individuals of the tree species \emph{Couepia caryophylloides} (Chrysobalanaceae) in a 25-ha forest plot in Paracou, French Guiana. +} +\usage{data(Couepia)} +\format{ +A list with 4 components:\cr +\code{$rect } is a vector of coordinates \eqn{(xmin,ymin,xmax,ymax)} of the origin and the opposite corner of a 500 by 500 m rectangular plot.\cr +\code{$tri } is a list of vertice coordinates \eqn{(ax,ay,bx,by,cx,cy)} of contiguous triangles covering swampy parts of the plot.\cr +\code{$trees } is a list of tree coordinates \eqn{(x,y)}.\cr +\code{$stage } is a factor with 2 levels \eqn{("mature","young")}.\cr +} +\source{ + Collinet, F. 1997. \emph{Essai de regroupement des principales espèces structurantes d'une foret dense humide d'après l'analyse de leur répartition spatiale (foret de Paracou - Guyane).} Thèse de doctorat, Université Claude Bernard, Lyon, France. +} +\references{ +Goreaud, F. & Pélissier, R. 2003. Avoiding misinterpretation of biotic interactions with the intertype \emph{K12}-function: population independence vs. random labelling hypotheses. \emph{Journal of Vegetation Science}, 14: 681-692. +} +\examples{ +data(Couepia) +coca.spp <- spp(Couepia$trees, mark=Couepia$stage, window=Couepia$rect, triangles=Couepia$tri) +plot(coca.spp) +} +\keyword{datasets} diff --git a/man/area.swin.Rd b/man/area.swin.Rd index d6042f2..296f2e2 100755 --- a/man/area.swin.Rd +++ b/man/area.swin.Rd @@ -1,45 +1,45 @@ -\encoding{latin1} -\name{area.swin} -\alias{area.swin} -\title{Area of a sampling window} -\description{ - Function \code{area.swin} computes the area of a sampling window. -} -\usage{ -area.swin(w) -} -\arguments{ - \item{w}{an object of class \code{"swin"} defining the sampling window.} -} -\details{ -For \code{"simple"} sampling windows, returns simply the area of the rectangle or circle delineating the study region.\cr -For \code{"complex"} sampling windows, returns the area of the initial rectangle or circle, minus the total area of the -triangles to remove (see \code{\link{swin}}). -} -\value{ -The area of the sampling window. -} -\author{ - \email{Raphael.Pelissier@ird.fr} -} -\seealso{ - \code{\link{swin}}. -} -\examples{ - #rectangle of size [0,110] x [0,90] - wr<-swin(c(0,0,110,90)) - area.swin(wr) - - #circle with radius 50 centred on (55,45) - wc<-swin(c(55,45,50)) - area.swin(wc) - - # polygon (diamond shape) - t1 <- c(0,0,55,0,0,45) - t2 <- c(55,0,110,0,110,45) - t3 <- c(0,45,0,90,55,90) - t4 <- c(55,90,110,90,110,45) - wp <- swin(wr, rbind(t1,t2,t3,t4)) - area.swin(wp) -} -\keyword{spatial} +\encoding{latin1} +\name{area.swin} +\alias{area.swin} +\title{Area of a sampling window} +\description{ + Function \code{area.swin} computes the area of a sampling window. +} +\usage{ +area.swin(w) +} +\arguments{ + \item{w}{an object of class \code{"swin"} defining the sampling window.} +} +\details{ +For \code{"simple"} sampling windows, returns simply the area of the rectangle or circle delineating the study region.\cr +For \code{"complex"} sampling windows, returns the area of the initial rectangle or circle, minus the total area of the +triangles to remove (see \code{\link{swin}}). +} +\value{ +The area of the sampling window. +} +\author{ + \email{Raphael.Pelissier@ird.fr} +} +\seealso{ + \code{\link{swin}}. +} +\examples{ + \dontrun{rectangle of size [0,110] x [0,90]} + wr<-swin(c(0,0,110,90)) + area.swin(wr) + + \dontrun{circle with radius 50 centred on (55,45)} + wc<-swin(c(55,45,50)) + area.swin(wc) + + \dontrun{polygon (diamond shape)} + t1 <- c(0,0,55,0,0,45) + t2 <- c(55,0,110,0,110,45) + t3 <- c(0,45,0,90,55,90) + t4 <- c(55,90,110,90,110,45) + wp <- swin(wr, rbind(t1,t2,t3,t4)) + area.swin(wp) +} +\keyword{spatial} diff --git a/man/demopat.Rd b/man/demopat.Rd index f6cb081..d8ddf2a 100755 --- a/man/demopat.Rd +++ b/man/demopat.Rd @@ -1,22 +1,22 @@ -\name{demopat} -\encoding{latin1} -\alias{demopat} -\docType{data} -\title{Artificial Data Point Pattern from \code{spatstat} package.} -\description{ -This is an artificial dataset, for use in testing and demonstrating compatibility between \code{spatstat} and \code{ads} objects. It is a multitype point pattern in an irregular polygonal window. - There are two types of points. The window contains a polygonal hole. -} -\usage{data(demopat)} -\format{ -An object of class "ppp" representing a \code{spatstat} point pattern. -} -\source{ - data(demopat) in \code{spatstat} -} -\examples{ - data(demopat) - demo.spp<-ppp2spp(demopat) - plot(demo.spp) -} -\keyword{datasets} +\name{demopat} +\encoding{latin1} +\alias{demopat} +\docType{data} +\title{Artificial Data Point Pattern from \code{spatstat} package.} +\description{ +This is an artificial dataset, for use in testing and demonstrating compatibility between \code{spatstat} and \code{ads} objects. It is a multitype point pattern in an irregular polygonal window. + There are two types of points. The window contains a polygonal hole. +} +\usage{data(demopat)} +\format{ +An object of class "ppp" representing a \code{spatstat} point pattern. +} +\source{ + data(demopat) in \code{spatstat} +} +\examples{ + data(demopat) + demo.spp<-ppp2spp(demopat) + plot(demo.spp) +} +\keyword{datasets} diff --git a/man/dval.Rd b/man/dval.Rd index 89e6050..a5fb61e 100755 --- a/man/dval.Rd +++ b/man/dval.Rd @@ -51,22 +51,22 @@ dval(p, upto, by, nx, ny) \examples{ data(BPoirier) BP <- BPoirier - # spatial point pattern in a rectangle sampling window of size [0,110] x [0,90] + \dontrun{spatial point pattern in a rectangle sampling window of size [0,110] x [0,90]} swr <- spp(BP$trees, win=BP$rect) dswr <- dval(swr,25,1,11,9) summary(dswr) plot(dswr) - # spatial point pattern in a circle with radius 50 centred on (55,45) + \dontrun{spatial point pattern in a circle with radius 50 centred on (55,45)} swc <- spp(BP$trees, win=c(55,45,45)) dswc <- dval(swc,25,1,9,9) summary(dswc) plot(dswc) - # spatial point pattern in a complex sampling window + \dontrun{spatial point pattern in a complex sampling window} swrt <- spp(BP$trees, win=BP$rect, tri=BP$tri1) dswrt <- dval(swrt,25,1,11,9) summary(dswrt) plot(dswrt) } -\keyword{spatial} \ No newline at end of file +\keyword{spatial} diff --git a/man/inside.swin.Rd b/man/inside.swin.Rd index d4fed90..1807694 100755 --- a/man/inside.swin.Rd +++ b/man/inside.swin.Rd @@ -1,42 +1,42 @@ -\encoding{latin1} -\name{inside.swin} -\alias{inside.swin} -\title{Test wether points are inside a sampling window} -\description{ - Function \code{inside.swin} tests whether points lie inside or outside a given sampling window. -} -\usage{ -inside.swin(x, y, w, bdry=TRUE) -} -\arguments{ - \item{x}{a vector of \code{x} coordinates of points.} - \item{y}{a vector of \code{y} coordinates of points.} - \item{w}{an object of class \code{"swin"} (see \code{\link{swin}}) defining the sampling window.} - \item{bdry}{by default \code{bdry = TRUE}. If \code{FALSE}, points located - on the boundary of the sampling window are considered to be outside.} -} -\value{ - A logical vector whose \code{ith} entry is \code{TRUE} if the corresponding point \eqn{(x[i],y[i])} is inside w, \code{FALSE} otherwise. -} -\note{ - For \code{"complex"} sampling windows, points inside the triangles to remove or on their boundary, are considered outside. -} -\author{ - \email{Raphael.Pelissier@ird.fr} -} -\seealso{ - \code{\link{swin}}. -} -\examples{ - data(BPoirier) - BP <- BPoirier - wr <- swin(BP$rect) - sum(inside.swin(BP$trees$x, BP$trees$y, wr)) - - wc <- swin(c(55,45,45)) - sum(inside.swin(BP$trees$x, BP$trees$y, wc)) - - wrt <- swin(BP$rect, triangles=BP$tri1) - sum(inside.swin(BP$trees$x, BP$trees$y,wrt)) -} +\encoding{latin1} +\name{inside.swin} +\alias{inside.swin} +\title{Test wether points are inside a sampling window} +\description{ + Function \code{inside.swin} tests whether points lie inside or outside a given sampling window. +} +\usage{ +inside.swin(x, y, w, bdry=TRUE) +} +\arguments{ + \item{x}{a vector of \code{x} coordinates of points.} + \item{y}{a vector of \code{y} coordinates of points.} + \item{w}{an object of class \code{"swin"} (see \code{\link{swin}}) defining the sampling window.} + \item{bdry}{by default \code{bdry = TRUE}. If \code{FALSE}, points located + on the boundary of the sampling window are considered to be outside.} +} +\value{ + A logical vector whose \code{ith} entry is \code{TRUE} if the corresponding point \eqn{(x[i],y[i])} is inside w, \code{FALSE} otherwise. +} +\note{ + For \code{"complex"} sampling windows, points inside the triangles to remove or on their boundary, are considered outside. +} +\author{ + \email{Raphael.Pelissier@ird.fr} +} +\seealso{ + \code{\link{swin}}. +} +\examples{ + data(BPoirier) + BP <- BPoirier + wr <- swin(BP$rect) + sum(inside.swin(BP$trees$x, BP$trees$y, wr)) + + wc <- swin(c(55,45,45)) + sum(inside.swin(BP$trees$x, BP$trees$y, wc)) + + wrt <- swin(BP$rect, triangles=BP$tri1) + sum(inside.swin(BP$trees$x, BP$trees$y,wrt)) +} \keyword{spatial} \ No newline at end of file diff --git a/man/internal.Rd b/man/internal.Rd index b2d64c4..c674c5e 100755 --- a/man/internal.Rd +++ b/man/internal.Rd @@ -32,6 +32,7 @@ \alias{summary.vads.kval} \alias{testIC} \alias{testInteger} +\alias{transpose} \alias{subsetdist} \title{Internal ads functions} \description{ @@ -58,8 +59,9 @@ sortmat(dis,ind) subsetdist(dis,sub) testIC(nbSimu, lev) testInteger(i) +transpose(x, y) } \details{ These are usually not to be called by the user. } -\keyword{internal} \ No newline at end of file +\keyword{internal} diff --git a/man/k12fun.Rd b/man/k12fun.Rd index 9b90394..80a0e62 100755 --- a/man/k12fun.Rd +++ b/man/k12fun.Rd @@ -96,7 +96,7 @@ k12fun(p, upto, by, nsim=0, H0=c("pitor","pimim","rl"), prec=0.01, nsimax=3000, \examples{ data(BPoirier) BP <- BPoirier - # spatial point pattern in a rectangle sampling window of size [0,110] x [0,90] + \dontrun{spatial point pattern in a rectangle sampling window of size [0,110] x [0,90]} swrm <- spp(BP$trees, win=BP$rect, marks=BP$species) #testing population independence hypothesis k12swrm.pi <- k12fun(swrm, 25, 1, 500, marks=c("beech","oak")) @@ -105,17 +105,16 @@ k12fun(p, upto, by, nsim=0, H0=c("pitor","pimim","rl"), prec=0.01, nsimax=3000, k12swrm.rl <- k12fun(swrm, 25, 1, 500, H0="rl", marks=c("beech","oak")) plot(k12swrm.rl) - # spatial point pattern in a circle with radius 50 centred on (55,45) + \dontrun{spatial point pattern in a circle with radius 50 centred on (55,45)} swc <- spp(BP$trees, win=c(55,45,45), marks=BP$species) k12swc.pi <- k12fun(swc, 25, 1, 500, marks=c("beech","oak")) plot(k12swc.pi) - # spatial point pattern in a complex sampling window + \dontrun{spatial point pattern in a complex sampling window} swrt.rl <- spp(BP$trees, win=BP$rect, tri=BP$tri2, marks=BP$species) k12swrt.rl <- k12fun(swrt.rl, 25, 1, 500, H0="rl",marks=c("beech","oak")) plot(k12swrt.rl) - #testing population independence hypothesis - #requires minimizing the outer polygon + \dontrun{testing population independence hypothesis requires minimizing the outer polygon} xr<-range(BP$tri3$ax,BP$tri3$bx,BP$tri3$cx) yr<-range(BP$tri3$ay,BP$tri3$by,BP$tri3$cy) rect.min<-swin(c(xr[1], yr[1], xr[2], yr[2])) @@ -123,4 +122,4 @@ k12fun(p, upto, by, nsim=0, H0=c("pitor","pimim","rl"), prec=0.01, nsimax=3000, k12swrt.pi <- k12fun(swrt.pi, 25, 1, nsim = 500, marks = c("beech", "oak")) plot(k12swrt.pi) } -\keyword{spatial} \ No newline at end of file +\keyword{spatial} diff --git a/man/k12val.Rd b/man/k12val.Rd index 6c70d67..c099f18 100755 --- a/man/k12val.Rd +++ b/man/k12val.Rd @@ -1,73 +1,73 @@ -\encoding{latin1} -\name{k12val} -\alias{k12val} -\alias{print.k12val} -\alias{summary.k12val} -\alias{print.summary.k12val} -\title{Multiscale local second-order neighbour density of a bivariate spatial point pattern} -\description{ - Computes local second-order neighbour density estimates for a bivariate spatial point pattern, i.e. the number of neighbours of type 2 per unit area - within sample circles of regularly increasing radii \eqn{r}, centred at each type 1 point of the pattern (see Details). -} -\usage{ - k12val(p, upto, by, marks) -} -\arguments{ - \item{p}{a \code{"spp"} object defining a multivariate spatial point pattern in a given sampling window (see \code{\link{spp}}).} - \item{upto }{maximum radius of the sample circles (see Details).} - \item{by }{interval length between successive sample circles radii (see Details).} - \item{marks}{by default \code{c(1,2)}, otherwise a vector of two numbers or character strings identifying the types (the \code{p$marks} levels) - of points of type 1 and 2, respectively.} -} -\details{ - Function \code{K12val} returns individual values of \emph{K12(r)} and associated functions (see \code{\link{k12fun}}) - estimated at each type 1 point of the pattern. For a given distance \emph{r}, these values can be mapped within the sampling window, as in - Getis & Franklin 1987 or Pélissier & Goreaud 2001. -} -\value{ - A list of class \code{c("vads","k12val")} with essentially the following components: - \item{r }{a vector of regularly spaced distances (\code{seq(by,upto,by)}).} - \item{xy }{a data frame with 2 components giving \eqn{(x,y)} coordinates of type 1 points of the pattern.} - \item{g12val }{a matrix of size \eqn{(length(xy),length(r))} giving individual values of the bivariate pair density function \eqn{g12(r)}.} - \item{n12val }{a matrix of size \eqn{(length(xy),length(r))} giving individual values of the bivariate neighbour density function \eqn{n12(r)}.} - \item{k12val }{a matrix of size \eqn{(length(xy),length(r))} giving individual values of the intertype function \eqn{K12(r)}.} - \item{l12val }{a matrix of size \eqn{(length(xy),length(r))} giving individual values the modified intertype function \eqn{L12(r)}.} -} -\references{ - Getis, A. and Franklin, J. 1987. Second-order neighborhood analysis of mapped point patterns. \emph{Ecology}, 68:473-477.\cr\cr - Pélissier, R. and Goreaud, F. 2001. A practical approach to the study of spatial structure in simple cases of heterogeneous vegetation. \emph{Journal of Vegetation Science}, 12:99-108. -} -\author{ - \email{Raphael.Pelissier@ird.fr} -} -\note{ - There are printing, summary and plotting methods for \code{"vads"} objects. -} -\seealso{ - \code{\link{plot.vads}}, - \code{\link{k12fun}}, - \code{\link{dval}}, - \code{\link{kval}}. -} -\examples{ - data(BPoirier) - BP <- BPoirier - # spatial point pattern in a rectangle sampling window of size [0,110] x [0,90] - swrm <- spp(BP$trees, win=BP$rect, marks=BP$species) - k12vswrm <- k12val(swrm, 25, 1, marks=c("beech","oak")) - summary(k12vswrm) - plot(k12vswrm) - - # spatial point pattern in a circle with radius 50 centred on (55,45) - swc <- spp(BP$trees, win=c(55,45,45), marks=BP$species) - k12vswc <- k12val(swc, 25, 1, marks=c("beech","oak")) - summary(k12vswc) - plot(k12vswc) - - # spatial point pattern in a complex sampling window - swrt <- spp(BP$trees, win=BP$rect, tri=BP$tri2, marks=BP$species) - k12vswrt <- k12val(swrt, 25, 1, marks=c("beech","oak")) - summary(k12vswrt) - plot(k12vswrt) -} -\keyword{spatial} +\encoding{latin1} +\name{k12val} +\alias{k12val} +\alias{print.k12val} +\alias{summary.k12val} +\alias{print.summary.k12val} +\title{Multiscale local second-order neighbour density of a bivariate spatial point pattern} +\description{ + Computes local second-order neighbour density estimates for a bivariate spatial point pattern, i.e. the number of neighbours of type 2 per unit area + within sample circles of regularly increasing radii \eqn{r}, centred at each type 1 point of the pattern (see Details). +} +\usage{ + k12val(p, upto, by, marks) +} +\arguments{ + \item{p}{a \code{"spp"} object defining a multivariate spatial point pattern in a given sampling window (see \code{\link{spp}}).} + \item{upto }{maximum radius of the sample circles (see Details).} + \item{by }{interval length between successive sample circles radii (see Details).} + \item{marks}{by default \code{c(1,2)}, otherwise a vector of two numbers or character strings identifying the types (the \code{p$marks} levels) + of points of type 1 and 2, respectively.} +} +\details{ + Function \code{K12val} returns individual values of \emph{K12(r)} and associated functions (see \code{\link{k12fun}}) + estimated at each type 1 point of the pattern. For a given distance \emph{r}, these values can be mapped within the sampling window, as in + Getis & Franklin 1987 or Pélissier & Goreaud 2001. +} +\value{ + A list of class \code{c("vads","k12val")} with essentially the following components: + \item{r }{a vector of regularly spaced distances (\code{seq(by,upto,by)}).} + \item{xy }{a data frame with 2 components giving \eqn{(x,y)} coordinates of type 1 points of the pattern.} + \item{g12val }{a matrix of size \eqn{(length(xy),length(r))} giving individual values of the bivariate pair density function \eqn{g12(r)}.} + \item{n12val }{a matrix of size \eqn{(length(xy),length(r))} giving individual values of the bivariate neighbour density function \eqn{n12(r)}.} + \item{k12val }{a matrix of size \eqn{(length(xy),length(r))} giving individual values of the intertype function \eqn{K12(r)}.} + \item{l12val }{a matrix of size \eqn{(length(xy),length(r))} giving individual values the modified intertype function \eqn{L12(r)}.} +} +\references{ + Getis, A. and Franklin, J. 1987. Second-order neighborhood analysis of mapped point patterns. \emph{Ecology}, 68:473-477.\cr\cr + Pélissier, R. and Goreaud, F. 2001. A practical approach to the study of spatial structure in simple cases of heterogeneous vegetation. \emph{Journal of Vegetation Science}, 12:99-108. +} +\author{ + \email{Raphael.Pelissier@ird.fr} +} +\note{ + There are printing, summary and plotting methods for \code{"vads"} objects. +} +\seealso{ + \code{\link{plot.vads}}, + \code{\link{k12fun}}, + \code{\link{dval}}, + \code{\link{kval}}. +} +\examples{ + data(BPoirier) + BP <- BPoirier + \dontrun{spatial point pattern in a rectangle sampling window of size [0,110] x [0,90]} + swrm <- spp(BP$trees, win=BP$rect, marks=BP$species) + k12vswrm <- k12val(swrm, 25, 1, marks=c("beech","oak")) + summary(k12vswrm) + plot(k12vswrm) + + \dontrun{spatial point pattern in a circle with radius 50 centred on (55,45)} + swc <- spp(BP$trees, win=c(55,45,45), marks=BP$species) + k12vswc <- k12val(swc, 25, 1, marks=c("beech","oak")) + summary(k12vswc) + plot(k12vswc) + + \dontrun{spatial point pattern in a complex sampling window} + swrt <- spp(BP$trees, win=BP$rect, tri=BP$tri2, marks=BP$species) + k12vswrt <- k12val(swrt, 25, 1, marks=c("beech","oak")) + summary(k12vswrt) + plot(k12vswrt) +} +\keyword{spatial} diff --git a/man/kdfun.Rd b/man/kdfun.Rd index 735a436..c750e41 100755 --- a/man/kdfun.Rd +++ b/man/kdfun.Rd @@ -67,26 +67,26 @@ kdfun(p, upto, by, dis, nsim=0, alpha = 0.01) \examples{ data(Paracou15) P15<-Paracou15 - # spatial point pattern in a rectangle sampling window of size 125 x 125 + \dontrun{spatial point pattern in a rectangle sampling window of size 125 x 125} swmr <- spp(P15$trees, win = c(175, 175, 250, 250), marks = P15$species) - # testing the species equivalence hypothesis + \dontrun{testing the species equivalence hypothesis} kdswmr <- kdfun(swmr, dis = P15$spdist, 50, 2, 100) - #running more simulations is slow - #kdswmr <- drfun(swmr, dis = P15$spdist, 50, 2, 500) + \dontrun{running more simulations is slow} + \donttest{kdswmr <- kdfun(swmr, dis = P15$spdist, 50, 2, 500)} plot(kdswmr) - # spatial point pattern in a circle with radius 50 centred on (125,125) + \dontrun{spatial point pattern in a circle with radius 50 centred on (125,125)} swmc <- spp(P15$trees, win = c(125,125,50), marks = P15$species) kdswmc <- kdfun(swmc, dis = P15$spdist, 50, 2, 100) - #running more simulations is slow - #kdswmc <- kdfun(swmc, dis = P15$spdist, 50, 2, 500) + \dontrun{running more simulations is slow} + \donttest{kdswmc <- kdfun(swmc, dis = P15$spdist, 50, 2, 500)} plot(kdswmc) - # spatial point pattern in a complex sampling window + \dontrun{spatial point pattern in a complex sampling window} swrt <- spp(P15$trees, win = c(125,125,250,250), tri = P15$tri, marks = P15$species) kdswrt <- kdfun(swrt, dis = P15$spdist, 50, 2, 100) - #running simulations is slow - #kdswrt <- kdfun(swrt, dis = P15$spdist, 50, 2, 500) + \dontrun{running simulations is slow} + \donttest{kdswrt <- kdfun(swrt, dis = P15$spdist, 50, 2, 500)} plot(kdswrt) } -\keyword{spatial} \ No newline at end of file +\keyword{spatial} diff --git a/man/kfun.Rd b/man/kfun.Rd index 43a1305..ae21fd0 100755 --- a/man/kfun.Rd +++ b/man/kfun.Rd @@ -82,19 +82,19 @@ kfun(p, upto, by, nsim=0, prec=0.01, alpha=0.01) \examples{ data(BPoirier) BP <- BPoirier - # spatial point pattern in a rectangle sampling window of size [0,110] x [0,90] + \dontrun{spatial point pattern in a rectangle sampling window of size [0,110] x [0,90]} swr <- spp(BP$trees, win=BP$rect) kswr <- kfun(swr,25,1,500) plot(kswr) - # spatial point pattern in a circle with radius 50 centred on (55,45) + \dontrun{spatial point pattern in a circle with radius 50 centred on (55,45)} swc <- spp(BP$trees, win=c(55,45,45)) kswc <- kfun(swc, 25, 1, 500) plot(kswc) - # spatial point pattern in a complex sampling window + \dontrun{spatial point pattern in a complex sampling window} swrt <- spp(BP$trees, win=BP$rect, tri=BP$tri1) kswrt <- kfun(swrt, 25, 1, 500) plot(kswrt) } -\keyword{spatial} \ No newline at end of file +\keyword{spatial} diff --git a/man/kmfun.Rd b/man/kmfun.Rd index bc39f5a..0e6fb60 100755 --- a/man/kmfun.Rd +++ b/man/kmfun.Rd @@ -70,17 +70,17 @@ Ripley B.D. 1977. Modelling spatial patterns. \emph{Journal of the Royal Statist \examples{ data(BPoirier) BP <- BPoirier - # spatial point pattern in a rectangle sampling window of size [0,110] x [0,90] + \dontrun{spatial point pattern in a rectangle sampling window of size [0,110] x [0,90]} swrm <- spp(BP$trees, win=BP$rect, marks=BP$dbh) kmswrm <- kmfun(swrm, 25, 2, 500) plot(kmswrm) - # spatial point pattern in a circle with radius 50 centred on (55,45) + \dontrun{spatial point pattern in a circle with radius 50 centred on (55,45)} swc <- spp(BP$trees, win=c(55,45,45), marks=BP$dbh) kmswc <- kmfun(swc, 25, 2, 500) plot(kmswc) - # spatial point pattern in a complex sampling window + \dontrun{spatial point pattern in a complex sampling window} swrt <- spp(BP$trees, win=BP$rect, tri=BP$tri2, marks=BP$dbh) kmswrt <- kmfun(swrt, 25, 2, 500) plot(kmswrt) diff --git a/man/kp.fun.Rd b/man/kp.fun.Rd index c42e544..45d9d96 100755 --- a/man/kp.fun.Rd +++ b/man/kp.fun.Rd @@ -46,17 +46,17 @@ kp.fun(p, upto, by) \examples{ data(BPoirier) BP <- BPoirier - # multivariate spatial point pattern in a rectangle sampling window + \dontrun{multivariate spatial point pattern in a rectangle sampling window} swrm <- spp(BP$trees, win=BP$rect, marks=BP$species) kp.swrm <- kp.fun(swrm, 25, 1) plot(kp.swrm) - # multivariate spatial point pattern in a circle with radius 50 centred on (55,45) + \dontrun{multivariate spatial point pattern in a circle with radius 50 centred on (55,45)} swcm <- spp(BP$trees, win=c(55,45,45), marks=BP$species) kp.swcm <- kp.fun(swcm, 25, 1) plot(kp.swcm) - # multivariate spatial point pattern in a complex sampling window + \dontrun{multivariate spatial point pattern in a complex sampling window} swrtm <- spp(BP$trees, win=BP$rect, tri=BP$tri2, marks=BP$species) kp.swrtm <- kp.fun(swrtm, 25, 1) plot(kp.swrtm) diff --git a/man/kpqfun.Rd b/man/kpqfun.Rd index 3fa67d1..31243d7 100755 --- a/man/kpqfun.Rd +++ b/man/kpqfun.Rd @@ -47,17 +47,17 @@ A list of class \code{"fads"} with essentially the following components: \examples{ data(BPoirier) BP <- BPoirier - # multivariate spatial point pattern in a rectangle sampling window + \dontrun{multivariate spatial point pattern in a rectangle sampling window} swrm <- spp(BP$trees, win=BP$rect, marks=BP$species) kpqswrm <- kpqfun(swrm, 25, 1) plot(kpqswrm) - # multivariate spatial point pattern in a circle with radius 50 centred on (55,45) + \dontrun{multivariate spatial point pattern in a circle with radius 50 centred on (55,45)} swcm <- spp(BP$trees, win=c(55,45,45), marks=BP$species) kpqswcm <- kpqfun(swcm, 25, 1) plot(kpqswcm) - # multivariate spatial point pattern in a complex sampling window + \dontrun{multivariate spatial point pattern in a complex sampling window} swrtm <- spp(BP$trees, win=BP$rect, tri=BP$tri2, marks=BP$species) kpqswrtm <- kpqfun(swrtm, 25, 1) plot(kpqswrtm) diff --git a/man/krfun.Rd b/man/krfun.Rd index 4232582..dba05d1 100755 --- a/man/krfun.Rd +++ b/man/krfun.Rd @@ -54,7 +54,7 @@ The species equivalence hypothesis (H0 = "se") is tested by randomizing the betw \references{ Rao, C.R. 1982. Diversity and dissimilarity coefficient: a unified approach. \emph{Theoretical Population Biology}, 21:24-43. - Shimatani, K. 2001. On the measurement of species diversity incorporating species differences. \emph{Oïkos}, 93, 135-147. + Shimatani, K. 2001. On the measurement of species diversity incorporating species differences. \emph{Oikos}, 93, 135-147. Goreaud F. & Pélissier R. 1999. On explicit formulas of edge effect correction for Ripley's K-function. \emph{Journal of Vegetation Science}, 10:433-438. @@ -77,31 +77,31 @@ The species equivalence hypothesis (H0 = "se") is tested by randomizing the betw \examples{ data(Paracou15) P15<-Paracou15 - # spatial point pattern in a rectangle sampling window of size 125 x 125 + \dontrun{spatial point pattern in a rectangle sampling window of size 125 x 125} swmr <- spp(P15$trees, win = c(175, 175, 250, 250), marks = P15$species) - # testing the random labeling hypothesis + \dontrun{testing the random labeling hypothesis} krwmr.rl <- krfun(swmr, dis = P15$spdist, H0 = "rl", 25, 2, 50) - #running more simulations is slow - #krwmr.rl <- krfun(swmr, dis = P15$spdist, H0 = "rl", 25, 2, 500) + \dontrun{running more simulations is slow} + \donttest{krwmr.rl <- krfun(swmr, dis = P15$spdist, H0 = "rl", 25, 2, 500)} plot(krwmr.rl) - # testing the species equivalence hypothesis + \dontrun{testing the species equivalence hypothesis} krwmr.se <- krfun(swmr, dis = P15$spdist, H0 = "se", 25, 2, 50) - #running more simulations is slow - #krwmr.se <- krfun(swmr, dis = P15$spdist, H0 = "se", 25, 2, 500) + \dontrun{running more simulations is slow} + \donttest{krwmr.se <- krfun(swmr, dis = P15$spdist, H0 = "se", 25, 2, 500)} plot(krwmr.se) - # spatial point pattern in a circle with radius 50 centred on (125,125) + \dontrun{spatial point pattern in a circle with radius 50 centred on (125,125)} swmc <- spp(P15$trees, win = c(125,125,50), marks = P15$species) krwmc <- krfun(swmc, dis = P15$spdist, H0 = "rl", 25, 2, 100) - #running more simulations is slow - #krwmc <- krfun(swmc, dis = P15$spdist, H0 = "rl, 25, 2, 500) + \dontrun{running more simulations is slow} + \donttest{krwmc <- krfun(swmc, dis = P15$spdist, H0 = "rl", 25, 2, 500)} plot(krwmc) - # spatial point pattern in a complex sampling window + \dontrun{spatial point pattern in a complex sampling window} swrt <- spp(P15$trees, win = c(125,125,250,250), tri = P15$tri, marks = P15$species) krwrt <- krfun(swrt, dis = P15$spdist, H0 = "rl", 25, 2) - #running simulations is slow - #krwrt <- krfun(swrt, dis = P15$spdist, H0 = "rl", 25, 2, 500) + \dontrun{running simulations is slow} + \donttest{krwrt <- krfun(swrt, dis = P15$spdist, H0 = "rl", 25, 2, 500)} plot(krwrt) } -\keyword{spatial} \ No newline at end of file +\keyword{spatial} diff --git a/man/ksfun.Rd b/man/ksfun.Rd index 55259a2..cd96eb4 100755 --- a/man/ksfun.Rd +++ b/man/ksfun.Rd @@ -52,7 +52,7 @@ ksfun(p, upto, by, nsim=0, alpha=0.01) \references{ Shimatani K. 2001. Multivariate point processes and spatial variation in species diversity. \emph{Forest Ecology and Managaement}, 142:215-229. - Eckel, S., Fleisher, F., Grabarnik, P. and Schmidt V. 2008. An investigation of the spatial correlations for relative purchasing power in Baden-Württemberg. \emph{AstA - Advances in Statistical Analysis}, 92:135-152. + Eckel, S., Fleisher, F., Grabarnik, P. and Schmidt V. 2008. An investigation of the spatial correlations for relative purchasing power in Baden-Wurttemberg. \emph{AstA - Advances in Statistical Analysis}, 92:135-152. Simpson, E.H. 1949. Measurement of diversity. \emph{Nature}, 688:163. @@ -75,19 +75,19 @@ ksfun(p, upto, by, nsim=0, alpha=0.01) \examples{ data(Paracou15) P15<-Paracou15 - # spatial point pattern in a rectangle sampling window of size 125 x 125 + \dontrun{spatial point pattern in a rectangle sampling window of size 125 x 125} swmr <- spp(P15$trees, win = c(125, 125, 250, 250), marks = P15$species) kswmr <- ksfun(swmr, 50, 5, 500) plot(kswmr) - # spatial point pattern in a circle with radius 50 centred on (125,125) + \dontrun{spatial point pattern in a circle with radius 50 centred on (125,125)} swmc <- spp(P15$trees, win = c(125, 125, 50), marks = P15$species) kswmc <- ksfun(swmc, 50, 5, 500) plot(kswmc) - # spatial point pattern in a complex sampling window + \dontrun{spatial point pattern in a complex sampling window} swrt <- spp(P15$trees, win = c(125, 125, 250, 250), tri=P15$tri, marks=P15$species) kswrt <- ksfun(swrt, 50, 5, 500) plot(kswrt) } -\keyword{spatial} \ No newline at end of file +\keyword{spatial} diff --git a/man/kval.Rd b/man/kval.Rd index ac9f740..11f5a8d 100755 --- a/man/kval.Rd +++ b/man/kval.Rd @@ -1,74 +1,74 @@ -\encoding{latin1} -\name{kval} -\alias{kval} -\alias{print.kval} -\alias{summary.kval} -\alias{print.summary.kval} -\title{Multiscale local second-order neighbour density of a spatial point pattern} -\description{ - Computes local second-order neighbour density estimates for an univariate spatial point pattern, i.e. the number of neighbours per unit area - within sample circles of regularly increasing radii \eqn{r}, centred at each point of the pattern (see Details). -} -\usage{ - kval(p, upto, by) -} -\arguments{ - \item{p}{a \code{"spp"} object defining a spatial point pattern in a given sampling window (see \code{\link{spp}}).} - \item{upto }{maximum radius of the sample circles (see Details).} - \item{by }{interval length between successive sample circles radii (see Details).} -} -\details{ - Function \code{kval} returns indivdiual values of \emph{K(r)} and associated functions (see \code{\link{kfun}}) - estimated for each point of the pattern. For a given distance \emph{r}, these values can be mapped within the sampling window - (Getis & Franklin 1987, Pélissier & Goreaud 2001). -} -\value{ -A list of class \code{c("vads","kval")} with essentially the following components: - \item{r }{a vector of regularly spaced out distances (\code{seq(by,upto,by)}).} - \item{xy }{a data frame with 2 components giving \eqn{(x,y)} coordinates of points of the pattern.} - \item{gval }{a matrix of size \eqn{(length(xy),length(r))} giving individual values of the pair density function \eqn{g(r)}.} - \item{nval }{a matrix of size \eqn{(length(xy),length(r))} giving individual values of the neighbour density function \eqn{n(r)}.} - \item{kval }{a matrix of size \eqn{(length(xy),length(r))} giving individual values of Ripley's function \eqn{K(r)}.} - \item{lval }{a matrix of size \eqn{(length(xy),length(r))} giving individual values the modified Ripley's function \eqn{L(r)}.} - } -\references{ - Getis, A. and Franklin, J. 1987. Second-order neighborhood analysis of mapped point patterns. \emph{Ecology}, 68:473-477.\cr\cr - Pélissier, R. and Goreaud, F. 2001. A practical approach to the study of spatial structure in simple cases of heterogeneous vegetation. \emph{Journal of Vegetation Science}, 12:99-108. -} -\author{ - \email{Raphael.Pelissier@ird.fr} -} -\note{ - There are printing, summary and plotting methods for \code{"vads"} objects. -} -\section{Warning }{ - Function \code{kval} ignores the marks of multivariate and marked point patterns (they are all considered to be univariate patterns). -} -\seealso{ - \code{\link{plot.vads}}, - \code{\link{kfun}}, - \code{\link{dval}}, - \code{\link{k12val}}. -} -\examples{ - data(BPoirier) - BP <- BPoirier - # spatial point pattern in a rectangle sampling window of size [0,110] x [0,90] - swr <- spp(BP$trees, win=BP$rect) - kvswr <- kval(swr, 25, 1) - summary(kvswr) - plot(kvswr) - - # spatial point pattern in a circle with radius 50 centred on (55,45) - swc <- spp(BP$trees, win=c(55,45,45)) - kvswc <- kval(swc, 25, 1) - summary(kvswc) - plot(kvswc) - - # spatial point pattern in a complex sampling window - swrt <- spp(BP$trees, win=BP$rect, tri=BP$tri1) - kvswrt <- kval(swrt, 25, 1) - summary(kvswrt) - plot(kvswrt) -} -\keyword{spatial} \ No newline at end of file +\encoding{latin1} +\name{kval} +\alias{kval} +\alias{print.kval} +\alias{summary.kval} +\alias{print.summary.kval} +\title{Multiscale local second-order neighbour density of a spatial point pattern} +\description{ + Computes local second-order neighbour density estimates for an univariate spatial point pattern, i.e. the number of neighbours per unit area + within sample circles of regularly increasing radii \eqn{r}, centred at each point of the pattern (see Details). +} +\usage{ + kval(p, upto, by) +} +\arguments{ + \item{p}{a \code{"spp"} object defining a spatial point pattern in a given sampling window (see \code{\link{spp}}).} + \item{upto }{maximum radius of the sample circles (see Details).} + \item{by }{interval length between successive sample circles radii (see Details).} +} +\details{ + Function \code{kval} returns indivdiual values of \emph{K(r)} and associated functions (see \code{\link{kfun}}) + estimated for each point of the pattern. For a given distance \emph{r}, these values can be mapped within the sampling window + (Getis & Franklin 1987, Pélissier & Goreaud 2001). +} +\value{ +A list of class \code{c("vads","kval")} with essentially the following components: + \item{r }{a vector of regularly spaced out distances (\code{seq(by,upto,by)}).} + \item{xy }{a data frame with 2 components giving \eqn{(x,y)} coordinates of points of the pattern.} + \item{gval }{a matrix of size \eqn{(length(xy),length(r))} giving individual values of the pair density function \eqn{g(r)}.} + \item{nval }{a matrix of size \eqn{(length(xy),length(r))} giving individual values of the neighbour density function \eqn{n(r)}.} + \item{kval }{a matrix of size \eqn{(length(xy),length(r))} giving individual values of Ripley's function \eqn{K(r)}.} + \item{lval }{a matrix of size \eqn{(length(xy),length(r))} giving individual values the modified Ripley's function \eqn{L(r)}.} + } +\references{ + Getis, A. and Franklin, J. 1987. Second-order neighborhood analysis of mapped point patterns. \emph{Ecology}, 68:473-477.\cr\cr + Pélissier, R. and Goreaud, F. 2001. A practical approach to the study of spatial structure in simple cases of heterogeneous vegetation. \emph{Journal of Vegetation Science}, 12:99-108. +} +\author{ + \email{Raphael.Pelissier@ird.fr} +} +\note{ + There are printing, summary and plotting methods for \code{"vads"} objects. +} +\section{Warning }{ + Function \code{kval} ignores the marks of multivariate and marked point patterns (they are all considered to be univariate patterns). +} +\seealso{ + \code{\link{plot.vads}}, + \code{\link{kfun}}, + \code{\link{dval}}, + \code{\link{k12val}}. +} +\examples{ + data(BPoirier) + BP <- BPoirier + \dontrun{spatial point pattern in a rectangle sampling window of size [0,110] x [0,90]} + swr <- spp(BP$trees, win=BP$rect) + kvswr <- kval(swr, 25, 1) + summary(kvswr) + plot(kvswr) + + \dontrun{spatial point pattern in a circle with radius 50 centred on (55,45)} + swc <- spp(BP$trees, win=c(55,45,45)) + kvswc <- kval(swc, 25, 1) + summary(kvswc) + plot(kvswc) + + \dontrun{spatial point pattern in a complex sampling window} + swrt <- spp(BP$trees, win=BP$rect, tri=BP$tri1) + kvswrt <- kval(swrt, 25, 1) + summary(kvswrt) + plot(kvswrt) +} +\keyword{spatial} diff --git a/man/mimetic.Rd b/man/mimetic.Rd index a7ea809..d2ad7db 100755 --- a/man/mimetic.Rd +++ b/man/mimetic.Rd @@ -48,17 +48,17 @@ mimetic(x,upto=NULL,by=NULL,prec=NULL,nsimax=3000,conv=50) \examples{ data(BPoirier) BP<-BPoirier - # performing point pattern analysis in a rectangle sampling window + \dontrun{performing point pattern analysis in a rectangle sampling window} swr <- spp(BP$trees, win=BP$rect) plot(swr) - # performing the mimetic point process from "spp" object + \dontrun{performing the mimetic point process from "spp" object} mimswr <- mimetic(swr, 20, 2) plot(mimswr) - # performing the mimetic point process from "fads" object + \dontrun{performing the mimetic point process from "fads" object} mimkswr <- mimetic(kfun(swr, 20, 2)) plot(mimkswr) } -\keyword{spatial} \ No newline at end of file +\keyword{spatial} diff --git a/man/plot.fads.Rd b/man/plot.fads.Rd index 409277b..cb629ec 100755 --- a/man/plot.fads.Rd +++ b/man/plot.fads.Rd @@ -47,17 +47,17 @@ \examples{ data(BPoirier) BP <- BPoirier - # Ripley's function + \dontrun{Ripley's function} swr <- spp(BP$trees, win=BP$rect) k.swr <- kfun(swr, 25, 1, 500) plot(k.swr) - # Intertype function + \dontrun{Intertype function} swrm <- spp(BP$trees, win=BP$rect, marks=BP$species) k12.swrm <- k12fun(swrm, 25, 1, 500, marks=c("beech","oak")) plot(k12.swrm, opt="L", cols=1) - # Mark correlation function + \dontrun{Mark correlation function} swrm <- spp(BP$trees, win=BP$rect, marks=BP$dbh) km.swrm <- kmfun(swrm, 25, 1, 500) plot(km.swrm, main="Example 1", sub=NULL, legend=FALSE) diff --git a/man/plot.spp.Rd b/man/plot.spp.Rd index 9f0503a..9454e65 100755 --- a/man/plot.spp.Rd +++ b/man/plot.spp.Rd @@ -67,32 +67,29 @@ Then the points themselves are plotted, in a fashion that depends on the type of data(BPoirier) BP<-BPoirier - # a univariate point pattern in a rectangle sampling window + \dontrun{a univariate point pattern in a rectangle sampling window} plot(spp(BP$trees, win=BP$rect)) - # a univariate point pattern in a circular sampling window - #with all points and graduations displayed + \dontrun{a univariate point pattern in a circular sampling window} plot(spp(BP$trees, win=c(55,45,45)), out=TRUE, scale=TRUE) - # a univariate point pattern in a complex sampling window - #with points outside the sampling window displayed (in red colour) + \dontrun{a univariate point pattern in a complex sampling window} + \dontrun{(points outside the sampling window displayed in red colour)} plot(spp(BP$trees, win=BP$rect, tri=BP$tri1), out=TRUE) - # a multivariate point pattern in a rectangle sampling window + \dontrun{a multivariate point pattern in a rectangle sampling window} plot(spp(BP$trees, win=BP$rect, marks=BP$species)) - # a multivariate point pattern in a circular sampling window - #with all points inside the sampling window displayed in blue colour - #and all points outside displayed with the symbol "+" in red colour + \dontrun{a multivariate point pattern in a circular sampling window} + \dontrun{(points inside/outside the sampling window displayed in blue colour/as red crosses)} plot(spp(BP$trees, win=c(55,45,45), marks=BP$species), out=TRUE, cols=c("blue","blue","blue"), chars.out=c("+","+","+"), cols.out=c("red","red","red")) - # a marked point pattern in a rectangle sampling window - #with circles in green colour + \dontrun{a marked point pattern in a rectangle sampling window with circles in green colour} plot(spp(BP$trees, win=BP$rect, marks=BP$dbh), cols="green") - # a marked point pattern in a circular sampling window - #with squares in red colour inside and circles in blue colour outside + \dontrun{a marked point pattern in a circular sampling window} + \dontrun{(squares in red colour inside and circles in blue colour outside)} plot(spp(BP$trees, win=c(55,45,45), marks=BP$dbh), out=TRUE, chars="squares", cols="red", cols.out="blue") } diff --git a/man/plot.vads.Rd b/man/plot.vads.Rd index 6deced8..a2f212e 100755 --- a/man/plot.vads.Rd +++ b/man/plot.vads.Rd @@ -54,19 +54,19 @@ type of \code{'vads'} object: \examples{ data(BPoirier) BP <- BPoirier - # local density in a rectangle sampling window + \dontrun{local density in a rectangle sampling window} dswr <- dval(spp(BP$trees, win=BP$rect), 25, 1, 11, 9) plot(dswr) - # display only distance r from 5 to 10 with null symbols as red crosses + \dontrun{display only distance r from 5 to 10 with null symbols as red crosses} plot(dswr, select=c(5:10), char0=3, col0="red") - # local L(r) values in a circular sampling window + \dontrun{local L(r) values in a circular sampling window} lvswc <- kval(spp(BP$trees, win=c(55,45,45)), 25, 0.5) plot(lvswc) - # display square symbols in blue for selected values of r and remove title + \dontrun{display square symbols in blue for selected values of r and remove title} plot(lvswc, chars="squares", cols="blue", select=c(5,7.5,10,12.5,15), main=NULL) - # local K12(r) values (1="beech", 2="oak") in a complex sampling window + \dontrun{local K12(r) values (1="beech", 2="oak") in a complex sampling window} k12swrt <- k12val(spp(BP$trees, win=BP$rect, tri=BP$tri1, marks=BP$species), 25, 1) plot(k12swrt, opt="kval") } diff --git a/man/spp.Rd b/man/spp.Rd index 93c86d9..39f97cc 100755 --- a/man/spp.Rd +++ b/man/spp.Rd @@ -74,40 +74,40 @@ Function \code{ppp2spp} converts an \code{\link[spatstat]{ppp.object}} from pack \examples{ data(BPoirier) BP <- BPoirier - # univariate pattern in a rectangle of size [0,110] x [0,90] + \dontrun{univariate pattern in a rectangle of size [0,110] x [0,90]} swr <- spp(BP$trees, win=BP$rect) - # an alternative using atomic vectors of point coordinates - #swr <- spp(BP$trees, win=BP$rect) + \dontrun{an alternative using atomic vectors of point coordinates} + swr <- spp(BP$trees, win=BP$rect) summary(swr) plot(swr) - # univariate pattern in a circle with radius 50 centred on (55,45) + \dontrun{univariate pattern in a circle with radius 50 centred on (55,45)} swc <- spp(BP$trees, win=c(55,45,50)) summary(swc) plot(swc) plot(swc, out=TRUE) # plot points outside the circle - # multivariate pattern in a rectangle of size [0,110] x [0,90] + \dontrun{multivariate pattern in a rectangle of size [0,110] x [0,90]} swrm <- spp(BP$trees, win=BP$rect, marks=BP$species) summary(swrm) plot(swrm) plot(swrm, chars=c("b","h","o")) # replace symbols by letters - # marked pattern in a rectangle of size [0,110] x [0,90] + \dontrun{marked pattern in a rectangle of size [0,110] x [0,90]} swrn <- spp(BP$trees, win=BP$rect, marks=BP$dbh) summary(swrn) plot(swrn) - # multivariate pattern in a complex sampling window + \dontrun{multivariate pattern in a complex sampling window} swrt <- spp(BP$trees, win=BP$rect, tri=BP$tri1, marks=BP$species) summary(swrt) plot(swrt) plot(swrt, out=TRUE) # plot points outside the sampling window - #converting a ppp object from spatstat + \dontrun{converting a ppp object from spatstat} data(demopat) demo.spp<-ppp2spp(demopat) plot(demo.spp) } -\keyword{spatial} \ No newline at end of file +\keyword{spatial} diff --git a/man/swin.Rd b/man/swin.Rd index 8fcf150..bce930f 100755 --- a/man/swin.Rd +++ b/man/swin.Rd @@ -70,17 +70,17 @@ Function \code{owin2swin} converts an \code{\link[spatstat]{owin.object}} from p \email{Raphael.Pelissier@ird.fr} } \examples{ - #rectangle of size [0,110] x [0,90] + \dontrun{rectangle of size [0,110] x [0,90]} wr <- swin(c(0,0,110,90)) summary(wr) plot(wr) - #circle with radius 50 centred on (55,45) + \dontrun{circle with radius 50 centred on (55,45)} wc <- swin(c(55,45,50)) summary(wc) plot(wc) - # polygon (diamond shape) + \dontrun{polygon (diamond shape)} t1 <- c(0,0,55,0,0,45) t2 <- c(55,0,110,0,110,45) t3 <- c(0,45,0,90,55,90) @@ -89,21 +89,21 @@ Function \code{owin2swin} converts an \code{\link[spatstat]{owin.object}} from p summary(wp) plot(wp) - #rectangle with a hole + \dontrun{rectangle with a hole} h1 <- c(25,45,55,75,85,45) h2 <- c(25,45,55,15,85,45) wrh <- swin(wr, rbind(h1,h2)) summary(wrh) plot(wrh) - #circle with a hole + \dontrun{circle with a hole} wch <- swin(wc, rbind(h1,h2)) summary(wch) plot(wch) - #converting an owin object from spatstat + \dontrun{converting an owin object from spatstat} data(demopat) demo.swin<-owin2swin(demopat$window) plot(demo.swin) } -\keyword{spatial} \ No newline at end of file +\keyword{spatial} diff --git a/man/triangulate.Rd b/man/triangulate.Rd index e2a4579..d15e2fd 100755 --- a/man/triangulate.Rd +++ b/man/triangulate.Rd @@ -43,19 +43,19 @@ is \eqn{(n-2)+2t}, with \eqn{n<200} in this version of the program. BP <- BPoirier plot(BP$poly1$x, BP$poly1$y) - # a single polygon triangulation + \dontrun{a single polygon triangulation} tri1 <- triangulate(BP$poly1) plot(swin(BP$rect, tri1)) - # a single polygon with a hole - #tri2 <- triangulate(c(-10,-10,120,100), BP$poly1) - #plot(swin(c(-10,-10,120,100), tri2)) + \dontrun{a single polygon with a hole} + \donttest{tri2 <- triangulate(c(-10,-10,120,100), BP$poly1) + plot(swin(c(-10,-10,120,100), tri2))} - # the same with narrower outer polygon - #tri3 <- lapply(BP$poly2,triangulate) - #tri3<-do.call(rbind,tri3) - #xr<-range(tri3$ax,tri3$bx,tri3$cx) - #yr<-range(tri3$ay,tri3$by,tri3$cy) - #plot(swin(c(xr[1],yr[1],xr[2],yr[2]), tri3)) - } + \dontrun{the same with narrower outer polygon} + \donttest{tri3 <- lapply(BP$poly2,triangulate) + tri3<-do.call(rbind,tri3) + xr<-range(tri3$ax,tri3$bx,tri3$cx) + yr<-range(tri3$ay,tri3$by,tri3$cy) + plot(swin(c(xr[1],yr[1],xr[2],yr[2]), tri3))} +} \keyword{spatial} diff --git a/src/Zlibs.c b/src/Zlibs.c index 362f14b..a161905 100755 --- a/src/Zlibs.c +++ b/src/Zlibs.c @@ -2458,11 +2458,11 @@ int intertype_rect_ic(int *point_nb1, double *x1, double *y1, int *point_nb2, do int *t2, double *dt, int *nbSimu, int *h0, double *prec, int *nsimax, int *conv, int *rep, double *lev, double *g, double *k, double *gic1, double *gic2, double *kic1, double *kic2, double *gval, double *kval, double *lval, double *nval) { - int i, j, i0, i1, i2, ptot, r; + int i, j, i0, i1, i2, r; double **gic, **kic; double *gg, *kk, *ll, *nn; double *gt, *kt, *lt, *nt; - int erreur=0, mess; + int erreur=0; int *type; //double *x,*y,*cost,surface,*xx,*yy; double *x, *y, *cost, densite_1, densite_2, densite_tot; @@ -2522,7 +2522,6 @@ int intertype_rect_ic(int *point_nb1, double *x1, double *y1, int *point_nb2, do vecalloc(&kt, *t2); vecalloc(<, *t2); vecalloc(&nt, *t2); - /*ptot=*point_nb1+*point_nb2;*/ erreur=ripley_rect(&point_nbtot, x, y, xmi, xma, ymi, yma, t2, dt, gt, kt); if (erreur!=0) return -1; for (j=0; j<*t2; j++) @@ -2700,11 +2699,11 @@ int intertype_disq_ic(int *point_nb1, double *x1, double *y1, int *point_nb2, do int *nsimax, int *conv, int *rep, double *lev, double *g, double *k, double *gic1, double *gic2, double *kic1, double *kic2, double *gval, double *kval, double *lval, double *nval) { - int i, j, i0, i1, i2, ptot, r; + int i, j, i0, i1, i2, r; double **gic, **kic; double *gt, *kt, *lt, *nt; double *gg, *kk, *ll, *nn; - int erreur=0, mess; + int erreur=0; int *type; double *x, *y, *cost, densite_1, densite_2, densite_tot; int point_nb=0, point_nbtot; @@ -2941,11 +2940,11 @@ int intertype_tr_rect_ic(int *point_nb1, double *x1, double *y1, int *point_nb2, int *t2, double *dt, int *nbSimu, int *h0, double *prec, int *nsimax, int *conv, int *rep, double *lev, double *g, double *k, double *gic1, double *gic2, double *kic1, double *kic2, double *gval, double *kval, double *lval, double *nval) { - int i, j, i0, i1, i2, ptot, r; + int i, j, i0, i1, i2, r; double **gic, **kic; double *gg, *kk, *ll, *nn; double *gt, *kt, *lt, *nt; - int erreur=0, mess; + int erreur=0; int *type; double *x, *y, *cost, densite_1, densite_2, densite_tot; int point_nb=0, point_nbtot; @@ -3183,11 +3182,11 @@ int intertype_tr_disq_ic(int *point_nb1, double *x1, double *y1, int *point_nb2, int *t2, double *dt, int *nbSimu, int *h0, double *prec, int *nsimax, int *conv, int *rep, double *lev, double *g, double *k, double *gic1, double *gic2, double *kic1, double *kic2, double *gval, double *kval, double *lval, double *nval) { - int i, j, i0, i1, i2, ptot, r; + int i, j, i0, i1, i2, r; double **gic, **kic; double *gg, *kk, *ll, *nn; double *gt, *kt, *lt, *nt; - int erreur=0, mess; + int erreur=0; int *type; double *x, *y, *cost, densite_1, densite_2, densite_tot; int point_nb=0, point_nbtot; @@ -6145,7 +6144,7 @@ int rao_rect(int *point_nb, double *x, double *y, double *xmi, double *xma, doub complete_tab(*point_nb, xx, yy, type, compt, l, x, y); int erreur; - double intensity1, point_nb2, point_nb1, intensity2; + double intensity1, intensity2; double intensity=*point_nb/(*surface); double *gii, *kii; vecalloc(&gii, *t2); @@ -6285,7 +6284,7 @@ int rao_rect_ic(int *point_nb, double *x, double *y, double *xmi, double *xma, d //Ripley for all points int erreur; - double intensity1, point_nb2, point_nb1, intensity2; + double intensity1, intensity2; double intensity=*point_nb/(*surface); double *gii, *kii; vecalloc(&gii, *t2); @@ -6546,7 +6545,7 @@ int rao_disq(int *point_nb, double *x, double *y, double *x0, double *y0, double complete_tab(*point_nb, xx, yy, type, compt, l, x, y); int erreur; - double intensity1, point_nb1, point_nb2, intensity2; + double intensity1, intensity2; double intensity=*point_nb/(*surface); double *gii, *kii; vecalloc(&gii, *t2); @@ -6683,8 +6682,8 @@ int rao_disq_ic(int *point_nb, double *x, double *y, double *x0, double *y0, dou complete_tab(*point_nb, xx, yy, type, compt, l, x, y); //Ripley for all points - int erreur, ind; - double intensity1, point_nb1, point_nb2, intensity2; + int erreur; + double intensity1, intensity2; double intensity=*point_nb/(*surface); double *gii, *kii; vecalloc(&gii, *t2); @@ -6940,7 +6939,7 @@ int rao_tr_rect(int *point_nb, double *x, double *y, double *xmi, double *xma, d complete_tab(*point_nb, xx, yy, type, compt, l, x, y); int erreur; - double intensity1, point_nb2, point_nb1, intensity2; + double intensity1, intensity2; double intensity=*point_nb/(*surface); double *gii, *kii; vecalloc(&gii, *t2); @@ -7076,7 +7075,7 @@ int rao_tr_disq(int *point_nb, double *x, double *y, double *x0, double *y0, complete_tab(*point_nb, xx, yy, type, compt, l, x, y); int erreur; - double intensity1, point_nb2, point_nb1, intensity2; + double intensity1, intensity2; double intensity=*point_nb/(*surface); double *gii, *kii; vecalloc(&gii, *t2); @@ -7213,7 +7212,7 @@ int rao_tr_rect_ic(int *point_nb, double *x, double *y, double *xmi, double *xma //Ripley for all points int erreur; - double intensity1, point_nb2, point_nb1, intensity2; + double intensity1, intensity2; double intensity=*point_nb/(*surface); double *gii, *kii; vecalloc(&gii, *t2); @@ -7474,7 +7473,7 @@ int rao_tr_disq_ic(int *point_nb, double *x, double *y, double *x0, double *y0, //Ripley for all points int erreur; - double intensity1, point_nb2, point_nb1, intensity2; + double intensity1, intensity2; double intensity=*point_nb/(*surface); double *gii, *kii; vecalloc(&gii, *t2); @@ -7705,7 +7704,7 @@ int rao_tr_disq_ic(int *point_nb, double *x, double *y, double *x0, double *y0, int randomdist(int *vec, int nb_type, double *mat, double *matp) { int i, j, a, jj; - int mat_size, rowvec, colvec, ind; + int rowvec, colvec, ind; int erreur=0; GetRNGstate(); @@ -8368,8 +8367,8 @@ int shen(int *point_nb, double *x, double *y, complete_tab(*point_nb, xx, yy, type, compt, l, x, y); int erreur; - double intensity1, point_nb2, point_nb1, intensity2; - double intensity=*point_nb/(*surface); + double intensity1, intensity2; + //double intensity=*point_nb/(*surface); double *gsii, *ksii, *grii, *krii; vecalloc(&gsii, *t2); vecalloc(&ksii, *t2); @@ -8490,8 +8489,8 @@ int shen_ic(int *point_nb, double *x, double *y, complete_tab(*point_nb, xx, yy, type, compt, l, x, y); int erreur; - double intensity1, point_nb2, point_nb1, intensity2; - double intensity=*point_nb/(*surface); + double intensity1, intensity2; + //double intensity=*point_nb/(*surface); double *gsii, *ksii, *grii, *krii; vecalloc(&gsii, *t2); vecalloc(&ksii, *t2); diff --git a/src/Zlibs.h b/src/Zlibs.h index 920b269..e55e401 100755 --- a/src/Zlibs.h +++ b/src/Zlibs.h @@ -1,87 +1,152 @@ -int corr_disq_ic(int*,double*,double*,double*,double*,double*,double*,int*,double*,int*,double*,double*,double*,double*,double*,double*,double*,double*,double*); -int corr_disq(int*,double*,double*,double*,double*,double*,double*,int*,double*,double*,double*); -int corr_rect_ic(int*,double*,double*,double*,double*,double*,double*,double*,int*,double*,int*,double*,double*,double*,double*,double*,double*,double*,double*,double*); -int corr_rect(int*,double*,double*,double*,double*,double*,double*,double*,int*,double*,double*,double*); -int corr_tr_disq_ic(int*,double*x,double*,double*,double*,double*,double*,int*,double*,double*,double*,double*,double*,double*,int*,double*,int*,double*,double*,double*,double*,double*,double*,double*,double*,double*); -int corr_tr_disq(int*,double*,double*,double*,double*,double*,double*,int*,double*,double*,double*,double*,double*,double*,int*,double*,double*,double*); -int corr_tr_rect_ic(int*,double*,double*,double*,double*,double*,double*,double*,int*,double*,double*,double*,double*,double*,double*,int*,double*,int*,double*,double*,double*,double*,double*,double*,double*,double*,double*); -int corr_tr_rect(int*,double*,double*,double*,double*,double*,double*,double*,int*,double*,double*,double*,double*,double*,double*,int*,double*,double*,double*); -int density_disq(int*,double*,double*,double*,double*,double*,int*,double*,double*,double*,int*,double*); -int density_rect(int*,double*,double*,double*,double*,double*,double*,int*,double*,double*,double*,int*,double*); -int density_tr_disq(int*,double*,double*,double*,double*,double*,int*,double*,double*,double*,double*,double*,double*,int*,double*,double*,double*,int*,double*); -int density_tr_rect(int*,double*,double*,double*,double*,double*,double*,int*,double*,double*,double*,double*,double*,double*,int*,double*,double*,double*,int*,double*); +double un_point(double,double,double,double,double,double,double,double,double); double deux_point(double,double,double,double,double,double,double,double,double); -double deuxbord_point(double,double,double,double,double,double,double,double,double); +double ununun_point(double,double,double,double,double,double,double,double,double); +double trois_point(double,double,double,double,double,double,double,double,double); double deuxun_point(double,double,double,double,double,double,double,double,double); -double echange_point_disq(int,double*,double*,double,double,double,double,double,double,double*,int*,double*,double*,double*); -double echange_point_rect(int,double*,double*,double,double,double,double,double,double,double,double*,int*,double*,double*,double*); -double echange_point_tr_disq(int,double*,double*,double,double,double,int*,double*,double*,double*,double*,double*,double*,double,double,double,double*,int*,double*,double*,double*); -double echange_point_tr_rect(int,double*,double*,double,double,double,double,int*,double*,double*,double*,double*,double*,double*,double,double,double,double*,int*,double*,double*,double*); -void ic(int,int,double**,double**,double*,double*,int); +double deuxbord_point(double,double,double,double,double,double,double,double,double); + int in_droite(double,double,double,double,double,double,double,double,int); int in_triangle(double,double,double,double,double,double,double,double,int); -int intertype_disq_ic(int*,double*,double*,int*,double*,double*,double*,double*,double*,double*,int*,double*,int*,int*,double*,int*,int*,int*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*); -int intertype_disq(int*,double*,double*,int*,double*,double*,double*,double*,double*,int*,double*,double*,double*); -int intertype_rect_ic(int*,double*,double*,int*,double*,double*,double*,double*,double*,double*,double*,int*,double*,int*,int*,double*,int*,int*,int*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*); -int intertype_rect(int*,double*,double*,int*,double*,double*,double*,double*,double*,double*,int*,double*,double*,double*); -int intertype_tr_disq_ic(int*,double*,double*,int*,double*,double*,double*,double*,double*,double*,int*,double*,double*,double*,double*,double*,double*,int*,double*,int*,int*,double*,int*,int*,int*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*); -int intertype_tr_disq(int*,double*,double*,int*,double*,double*,double*,double*,double*,int*,double*,double*,double*,double*,double*,double*,int*,double*,double*,double*); -int intertype_tr_rect_ic(int*,double*,double*,int*,double*,double*,double*,double*,double*,double*,double*,int*,double*,double*,double*,double*,double*,double*,int*,double*,int*,int*,double*,int*,int*,int*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*); -int intertype_tr_rect(int*,double*,double*,int*,double*,double*,double*,double*,double*,double*,int*,double*,double*,double*,double*,double*,double*,int*,double*,double*,double*); -int intertype(int*,double*,double*,int*,double*,double*,int*,double*,double*,double*); -int intertypelocal_disq(int*,double*,double*,int*,double*,double*,double*,double*,double*,int*,double*,double*,double*); -int intertypelocal_rect(int*,double*,double*,int*,double*,double*,double*,double*,double*,double*,int*,double*,double*,double*); -int intertypelocal_tr_disq(int*,double*,double*,int*,double*,double*,double*,double*,double*,int*,double*,double*,double*,double*,double*,double*,int*,double*,double*,double*); -int intertypelocal_tr_rect(int*,double*,double*,int*,double*,double*,double*,double*,double*,double*,int*,double*,double*,double*,double*,double*,double*,int*,double*,double*,double*); -int mimetic_disq(int*,double*,double*,double*,double*,double*,double*,double*,int*,double*,double*,int*,int*,double*,double*,double*,double*,double*,int*); -int mimetic_rect(int*,double*,double*,double*,double*,double*,double*,double*,double*,int*,double*,double*,int*,int*,double*,double*,double*,double*,double*,int*); -int mimetic_tr_disq(int*,double*,double*,double*,double*,double*,double*,int*,double*,double*,double*,double*,double*,double*cy,double*,int*,double*,double*,int*,int*,double*,double*,double*,double*,double*,int*); -int mimetic_tr_rect(int*,double*,double*,double*,double*,double*,double*,double*,int*,double*,double*,double*,double*,double*,double*,double*,int*,double*,double*,int*,int*,double*,double*,double*,double*,double*,int*); + +void ic(int,int,double **,double **,double *,double *,int); + +double perim_in_rect(double, double, double, double, double, double, double); double perim_in_disq(double,double,double,double,double,double); -double perim_in_rect(double,double,double,double,double,double,double); -double perim_triangle(double,double,double,int,double*,double*,double*,double*,double*,double*); -int randlabelling(double*,double*,int,double*,double*,int,double*,double*,int*); -void randmark(int ,double*,double*); -int randomdist(int*,int,double*,double*); -int randomlab(double*,double*,int,int*,int,double**,int*,double**); -int randshifting_disq(int*,double*,double*,int,double*,double*,double,double,double,double); -int randshifting_rect(int*,double*,double*,int,double*,double*,double,double,double,double,double); -int randshifting_tr_disq(int*,double*,double*,int,double*,double*,double,double,double,int,double*,double*,double*,double*,double*,double*,double); -int randshifting_tr_rect(int*,double*,double*,int,double*,double*,double,double,double,double,int,double*,double*,double*,double*,double*,double*,double); -int rao_disq_ic(int*,double*,double*,double*,double*,double*,int*,double*,int*,int*,double*,int*,int*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*,int*); -int rao_disq(int*,double*,double*,double*,double*,double*,int*,double*,int*,int*,int*,double*,double*,double*,double*,double*,double*,double*,int*); -int rao_rect_ic(int*,double*,double*,double*,double*,double*,double*,int*,double*,int*,int*,double*,int*,int*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*,int*); -int rao_rect(int*,double*,double*,double*,double*,double*,double*,int*,double*,int*,int*,int*,double*,double*,double*,double*,double*,double*,double*,int*); -int rao_tr_disq_ic(int*,double*,double*,double*,double*,double*,int*,double*,double*,double*,double*,double*,double*,int*,double*,int*,int*,double*,int*,int*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*,int*); -int rao_tr_disq(int*,double*,double*,double*,double*,double*,int*,double*,double*,double*,double*,double*,double*,int*,double*,int*,int*,int*,double*,double*,double*,double*,double*,double*,double*,int*); -int rao_tr_rect_ic(int*,double*,double*,double*,double*,double*,double*,int*,double*,double*,double*,double*,double*,double*,int*,double*,int*,int*,double*,int*,int*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*,int*); -int rao_tr_rect(int*,double*,double*,double*,double*,double*,double*,int*,double*,double*,double*,double*,double*,double*,int*,double*,int*,int*,int*,double*,double*,double*,double*,double*,double*,double*,int*); -int ripley_disq_ic(int*,double*,double*,double*,double*,double*,double*,int*,double*,int*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*); -int ripley_disq(int*,double*,double*,double*,double*,double*,int*,double*,double*,double*); -int ripley_rect_ic(int*,double*,double*,double*,double*,double*,double*,double*,int*,double*,int*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*); -int ripley_rect(int*,double*,double*,double*,double*,double*,double*,int*,double*,double*,double*); -int ripley_tr_disq_ic(int*,double*,double*,double*,double*,double*,double*,int*,double*,double*,double*,double*,double*,double*,int*,double*,int*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*); -int ripley_tr_disq(int*,double*,double*,double*,double*,double*,int*,double*,double*,double*,double*,double*,double*,int*,double*,double*,double*); -int ripley_tr_rect_ic(int*,double*,double*,double*,double*,double*,double*,double*,int*,double*,double*,double*,double*,double*,double*,int*,double*,int*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*); -int ripley_tr_rect(int*,double*,double*,double*,double*,double*,double*,int*,double*,double*,double*,double*,double*,double*,int*,double*,double*,double*); -int ripleylocal_disq(int*,double*,double*,double*,double*,double*,int*,double*,double*,double*); -int ripleylocal_rect(int*,double*,double*,double*,double*,double*,double*,int*,double*,double*,double*); -int ripleylocal_tr_disq(int*,double*,double*,double*,double*,double*,int*,double*,double*,double*,double*,double*,double*,int*,double*,double*,double*); -int ripleylocal_tr_rect(int*,double*,double*,double*,double*,double*,double*,int*,double*,double*,double*,double*,double*,double*,int*,double*,double*,double*); -void s_alea_disq(int,double*,double*,double,double,double,double); +double perim_triangle(double,double,double,int,double *,double *,double *,double *,double *,double *); + +extern int ripley_rect(int*,double*,double*,double*,double*,double*,double*,int*,double*,double*,double*); +extern int ripley_disq(int *,double *,double *,double *,double *,double *,int *,double *,double *,double *); +extern int ripley_tr_rect(int *,double *,double *,double *,double *,double *,double *,int *,double *,double *, + double *,double *,double *,double *,int *,double *,double *,double *); +extern int ripley_tr_disq(int *,double *,double *,double *,double *,double *,int *,double *,double *,double *,double *, + double *,double *,int *,double *,double *,double *); + +extern int ripley_rect_ic(int *,double *,double *,double *,double *,double *,double *,double *,int *,double *,int *, + double *,double *,double *,double *,double *,double *,double *,double *,double *,double *,double *,double *); +extern int ripley_disq_ic(int *,double *,double *,double *,double *,double *,double *,int *,double *,int *,double *, + double *,double *,double *,double *,double *,double *,double *,double *,double *,double *,double *); +extern int ripley_tr_rect_ic(int *,double *,double *,double *,double *,double *,double *,double *,int *, double *, + double *,double *,double *,double *,double *,int *,double *,int *,double *,double *,double *,double *, + double *,double *,double *,double *,double *,double *,double *,double *); +extern int ripley_tr_disq_ic(int *,double *,double *,double *,double *,double *,double *,int *, double *, double *, + double *,double *,double *,double *,int *,double *,int *,double *,double *,double *,double *,double *, + double *,double *,double *,double *,double *,double *,double *); + +extern int ripleylocal_rect(int*,double *,double *,double*,double*,double*,double*,int*,double*,double *,double *); +extern int ripleylocal_disq(int *,double *,double *,double *,double *,double *,int *,double *,double *,double *); +extern int ripleylocal_tr_rect(int *,double *,double *,double *,double *,double *,double *,int *, + double *,double *,double *,double *,double *,double *,int *,double *,double *,double *); +extern int ripleylocal_tr_disq(int *,double *,double *,double *,double *,double *,int *, + double *,double *,double *,double *,double *,double *,int *,double *,double *,double *); + +extern int density_rect(int*,double*,double*,double*,double*,double*,double*,int*,double*,double*,double*,int*,double*); +extern int density_disq(int*,double *,double *,double*,double*,double*,int*,double*,double *,double *,int*,double *); +extern int density_tr_rect(int*,double *,double *,double*,double*,double*,double*,int*,double *,double *,double *, + double *,double *,double *,int*,double*,double *,double *,int*,double *); +extern int density_tr_disq(int*,double *,double *,double*,double*,double*,int*,double *,double *,double *,double *, + double *,double *,int*,double*,double *,double *,int*,double *); + +extern int intertype_rect(int *,double *,double *,int *,double *,double *,double *,double *,double *,double *, + int *,double *,double *,double *); +extern int intertype_disq(int *,double *,double *,int *,double *,double *,double *,double *,double *,int *, + double *,double *,double *); +extern int intertype_tr_rect(int *,double *,double *,int *,double *,double *,double *,double *,double *,double *,int *, + double *,double *,double *,double *,double *,double *,int *,double *,double *,double *); +extern int intertype_tr_disq(int *,double *,double *,int *,double *,double *,double *,double *,double *,int *, + double *,double *,double *,double *,double *,double *,int *,double *,double *,double *); + +extern int intertype_rect_ic(int *,double *,double *,int *,double *,double *,double *,double *,double *,double *, + double *,int *,double *,int *,int *,double *,int *, int *, int *, double *,double *,double *,double *,double *,double *,double *, + double *,double *,double *,double *); +extern int intertype_disq_ic(int *,double *,double *,int *,double *,double *,double *,double *,double *,double *,int *, + double *,int *,int *,double *,int *,int *,int *,double *,double *,double *,double *,double *,double *,double *,double *, + double *,double *,double *); +extern int intertype_tr_rect_ic(int *,double *,double *,int *,double *,double *,double *,double *,double *,double *, + double *,int *,double *,double *,double *,double *,double *,double *,int *,double *,int *,int *,double *,int *,int *,int *,double *, + double *,double *,double *,double *,double *,double *,double *,double *,double *,double *); +extern int intertype_tr_disq_ic(int *,double *,double *,int *, double *, double *,double *,double *,double *,double *, + int *,double *,double *,double *,double *,double *,double *,int *,double *,int *,int *,double *,int *,int *,int*,double *,double *, + double *,double *,double *,double *,double *,double *,double *,double *,double *); + +extern int intertypelocal_rect(int*,double *,double *,int*,double *,double *,double*,double*,double*,double*, + int*,double*,double *,double *); +extern int intertypelocal_disq(int *,double *,double *,int *,double *,double *,double *,double *, double *,int *, + double *,double *,double *); +extern int intertypelocal_tr_rect(int *,double *,double *,int *,double *,double *,double *,double *,double *,double *, + int *,double *,double *,double *,double *,double *,double *,int *,double *,double *,double *); +extern int intertypelocal_tr_disq(int *,double *,double *,int *,double *,double *,double *,double *,double *,int *, + double *,double *,double *,double *,double *,double *,int *,double *,double *,double *); + void s_alea_rect(int,double[],double[],double,double,double,double,double); -void s_alea_tr_disq(int ,double*,double*,double,double,double,int,double*,double*,double*,double*,double*,double*,double); -void s_alea_tr_rect(int,double*,double*,double,double,double,double,int,double*,double*,double*,double*,double*,double*,double); -int shen_ic(int*,double*,double*,int*,double*,int*,double*,int*,int*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*,int*); -int shen(int*,double*,double*,int*,double*,int*,int*,double*,double*,double*,double*,double*,int*); -int shimatani_disq_ic(int*,double*,double*,double*,double*,double*,int*,double*,int*,double*,int*,int*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*,int*); -int shimatani_disq(int*,double*,double*,double*,double*,double*,int*,double*,int*,int*,double*,double*,double*,int*); -int shimatani_rect_ic(int*,double*,double*,double*,double*,double*,double*,int*,double*,int*,double*,int*,int*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*,int*); -int shimatani_rect(int*,double*,double*,double*,double*,double*,double*,int*,double*,int*,int*,double*,double*,double*,int*); -int shimatani_tr_disq_ic(int*,double*,double*,double*,double*,double*,int*,double*,double*,double*,double*,double*,double*,int*,double*,int*,double*,int*,int*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*,int*); -int shimatani_tr_disq(int*,double*,double*,double*,double*,double*,int*,double*,double*,double*,double*,double*,double*,int*,double*,int*,int*,double*,double*,double*,int*); -int shimatani_tr_rect_ic(int*,double*,double*,double*,double*,double*,double*,int*,double*,double*,double*,double*,double*,double*,int*,double*,int*,double*,int*,int*,double*,double*,double*,double*,double*,double*,double*,double*,double*,double*,int*); -int shimatani_tr_rect(int*,double*,double*,double*,double*,double*,double*,int*,double*,double*,double*,double*,double*,double*,int*,double*,int*,int*,double*,double*,double*,int*); -double trois_point(double,double,double,double,double,double,double,double,double); -double un_point(double,double,double,double,double,double,double,double,double); -double ununun_point(double,double,double,double,double,double,double,double,double); +void s_alea_disq(int,double *,double *,double,double,double,double); +void s_alea_tr_rect(int,double *,double *,double,double,double,double,int,double *,double *,double *,double *, + double *,double *,double); +void s_alea_tr_disq(int ,double *,double *,double,double,double,int,double *,double *,double *,double *, + double *,double *,double); + +int randlabelling(double *, double *, int, double *, double *,int, double *, double *,int *); +int randshifting_rect(int *,double *,double *,int,double *,double *,double,double,double,double,double); +int randshifting_disq(int *,double *,double *,int,double *,double *,double,double,double,double); +int randshifting_tr_rect(int *,double *,double *,int,double *,double *,double,double,double,double,int, + double *,double *,double *,double *,double *,double *,double); +int randshifting_tr_disq(int *,double *,double *,int,double *,double *,double,double,double,int, + double *,double *,double *,double *,double *,double *,double); +int randomlab(double *,double *,int,int *,int,double **,int *,double **); +void randmark(int ,double *,double *); +int randomdist(int *,int,double *,double *); +extern int corr_rect(int *,double *,double *,double *, double *,double *,double *,double *,int *,double *,double *,double *); +extern int corr_disq(int *,double *,double *,double *, double *,double *,double *,int *,double *,double *,double *); +extern int corr_tr_rect(int *,double *,double *,double *, double *,double *,double *,double *,int *, double *, double *, double *, double *, double *, double *,int *,double *,double *,double *); +extern int corr_tr_disq(int *,double *,double *,double *, double *,double *,double *,int *,double *,double *,double *,double *,double *,double *,int *,double *,double *,double *); +extern int corr_rect_ic(int *,double *,double *,double *, double *,double *,double *,double *,int *,double *,int *, double *,double *,double *,double *,double *, double *,double *, double *, double *); +extern int corr_disq_ic(int *,double *,double *,double *, double *,double *,double *,int *,double *,int *, double *,double *,double *,double *,double *, double *,double *, double *, double *); +extern int corr_tr_rect_ic(int *,double *,double *,double *, double *,double *,double *,double *,int *, double *, double *, double *, double *, double *, double *,int *,double *,int *, double *,double *,double *,double *,double *, double *,double *, double *, double *); +extern int corr_tr_disq_ic(int *,double *x,double *,double *, double *,double *,double *,int *, double *, double *, double *, double *, double *, double *,int *,double *,int *, double *,double *,double *,double *,double *, double *,double *, double *, double *); +extern int shimatani_rect(int *,double *,double *,double *,double *,double *,double *,int *,double *,int *,int *,double *,double *, double *,int *); +extern int shimatani_disq(int *,double *,double *, double *,double *,double *,int *,double *,int *,int *,double *,double *, double *,int *); +extern int shimatani_tr_rect(int *,double *,double *, double *,double *,double *,double *,int *, double *, double *, double *, double *, double *, double *, int *,double *,int *,int *,double *,double *, double *,int *); +extern int shimatani_tr_disq(int *,double *,double *, double *,double *,double *,int *, double *, double *, double *, double *, double *, double *, int *,double *,int *,int *,double *,double *, double *,int *); +extern int shimatani_rect_ic(int *,double *,double *, double *,double *,double *,double *,int *,double *,int *,double *,int *,int *,double *,double *, + double *, double *,double *,double *,double *,double *,double *,double *,int *); +extern int shimatani_disq_ic(int *,double *,double *, double *,double *,double *,int *,double *,int *,double *,int *,int *,double *,double *, + double *, double *,double *,double *,double *,double *,double *,double *,int *); +extern int shimatani_tr_rect_ic(int *,double *,double *, double *,double *,double *,double *,int *, double *, double *, double *, double *, double *, double *, + int *,double *,int *,double *,int *,int *,double *,double *,double *, double *,double *,double *,double *,double *,double *,double *,int *); +extern int shimatani_tr_disq_ic(int *,double *,double *, double *,double *,double *,int *, double *, double *, double *, double *, double *, double *, + int *,double *,int *,double *,int *,int *,double *,double *,double *, double *,double *,double *,double *,double *,double *,double *,int *); + +extern int rao_rect(int *,double *,double *,double *,double *,double *,double *,int *,double *,int *,int *,int *,double *,double *,double *,double *, + double *,double *,double *,int *); +extern int rao_rect_ic(int *,double *,double *,double *,double *,double *,double *,int *,double *,int *,int *,double *,int *,int *,double *,double *, + double *,double *,double *,double *,double *,double *,double *,double *,double *,double *,double *,int *); +extern int rao_disq(int *,double *,double *,double *,double *,double *,int *,double *,int *,int *,int *,double *,double *,double *,double *, + double *,double *,double *,int *); +extern int rao_disq_ic(int *,double *,double *,double *,double *,double *,int *,double *,int *,int *,double *,int *,int *,double *,double *, + double *,double *,double *,double *,double *,double *,double *,double *,double *,double *,double *,int *); +extern int rao_tr_rect(int *,double *,double *,double *,double *,double *,double *,int *,double *,double *,double *,double *,double *,double *, + int *,double *,int *,int *,int *,double *,double *,double *,double *,double *,double *,double *,int *); + +extern int rao_tr_rect_ic(int *,double *,double *,double *,double *,double *,double *,int *,double *,double *,double *,double *,double *,double *, + int *,double *,int *,int *,double *,int *,int *,double *,double *,double *,double *,double *,double *,double *,double *, + double *,double *,double *,double *,double *,int *); +extern int rao_tr_disq(int *,double *,double *,double *,double *,double *,int *,double *,double *,double *,double *,double *,double *,int *,double *,int *,int *,int *, + double *,double *,double *,double *,double *,double *,double *,int *); +extern int rao_tr_disq_ic(int *,double *,double *,double *,double *,double *,int *,double *,double *,double *,double *,double *,double *,int *,double *,int *,int *,double *, + int *,int *,double *,double *,double *,double *,double *,double *,double *,double *,double *,double *,double *,double *,double *,int *); + +extern int mimetic_rect(int *,double *,double *, double *,double *,double *,double *,double *,double *, int *,double *,double *,int *,int *,double *,double *,double *,double *,double *,int *); +extern int mimetic_disq(int *,double *,double *,double *,double *,double *,double *,double *, int *, double *, double *, int *, int *, double *,double *,double *,double *,double *,int *); +extern int mimetic_tr_rect(int *,double *,double *, double *,double *,double *,double *,double *,int *, double *, double *, double *, double *, double *, double *, + double *, int *, double *, double *, int *, int *, double *,double *, double *,double *,double *,int *); +extern int mimetic_tr_disq(int *,double *,double *, double *,double *,double *,double *,int *, double *,double *,double *,double *,double *,double *cy, + double *, int *, double *, double *, int *, int *, double *,double *,double *,double *,double *,int *); +double echange_point_rect(int,double *,double *,double,double,double,double,double,double,double,double *,int *,double *,double *,double *); +double echange_point_disq(int,double *,double *,double,double,double,double,double,double,double *,int *,double *,double *,double *); +double echange_point_tr_rect(int,double *,double *,double,double,double,double,int *,double *,double *,double *,double *,double *,double *, + double,double,double,double *,int *,double *,double *,double *); +double echange_point_tr_disq(int,double *,double *,double,double,double,int *,double *,double *,double *,double *,double *,double *, + double,double,double,double *,int *,double *,double *,double *); +extern int shen(int *,double *,double *,int *,double *,int *,int *,double *,double *,double *,double *, double *, int *); +extern int shen_ic(int *,double *,double *,int *,double *,int *,double *,int *,int *,double *,double *,double *, + double *, double *, double *,double *,double *,double *,double *,double *,int *); +int intertype(int *,double *,double *,int *, double *, double *,int *,double *,double *,double *); diff --git a/src/adssub.c b/src/adssub.c index 2ed04ba..41e605e 100755 --- a/src/adssub.c +++ b/src/adssub.c @@ -347,3 +347,57 @@ void complete_tab(int point_nb,double **xx,double **yy,int *type,int *compt,int return ; } + + +/*test wether points are inside a polygon (points on boundaries are considered outside)*/ +void pnpoly(double *testx, double *testy, double *vertx, double *verty, int *npts, int *nvert, double *xmi, double *ymi, double *pxr, double *pyr, double *score) { + + int i, j, k; + int nedg=*nvert; + + /*so as to shift all coordinates to positive values only*/ +/* if(*xmi<0) { + for(i=0;i<*npts;i++) { + testx[i]=testx[i]-*xmi; + } + for(i=0;i<*nvert;i++) { + vertx[i]=vertx[i]-*xmi; + } + for(i=0;i<2;i++) { + pxr[i]=pxr[i]-*xmi; + } + //decalVal(testx,*npts,-*xmi); + //decalVal(vertx,*nvert,-*xmi); + //decalVal(pxr,2,-*xmi); + } + if(*ymi<0) { + for(i=0;i<*npts;i++) { + testy[i]=testy[i]-*ymi; + } + for(i=0;i<*nvert;i++) { + verty[i]=verty[i]-*ymi; + } + for(i=0;i<2;i++) { + pyr[i]=pyr[i]-*ymi; + } + //decalVal(testy,*npts,-*ymi); + //decalVal(verty,*nvert,-*ymi); + //decalVal(pyr,2,-*ymi); + }*/ + + for(k=0;k<*npts;k++) { + score[k]=0; + //for (i=0, j=(nedg-1); i <nedg; j = i++) { + j=(nedg-1); + for (i=0; i <nedg; i++) { + + if ((((verty[i] <= testy[k]) && (testy[k] < verty[j])) || ((verty[j] <= testy[k]) && (testy[k] < verty[i]))) && (testx[k] < (vertx[j] - vertx[i]) * (testy[k] - verty[i]) / (verty[j] - verty[i]) + vertx[i])) + {score[k] = 1;} + j=i; + + } + // We're outside the polygon! + /*if (testx[k] <= pxr[1] || testx[k] >= pxr[2] || testy[k] <= pyr[1] || testy[k] >= pyr[2]) + {score[k]=0;}*/ + } +} diff --git a/src/adssub.h b/src/adssub.h index 85e85ff..2452d4b 100755 --- a/src/adssub.h +++ b/src/adssub.h @@ -3,26 +3,33 @@ #include <limits.h> #include <R_ext/PrtUtil.h> -double bacos(double); -void complete_tab(int,double**,double**,int*,int*,int*,double*,double*); -void decalCirc(int,double*,double*,double*,double*,double); -void decalCirc2(int,double*,double*,int,double*,double*,double*,double*,double); -void decalCircTri(int,double*,double*,double*,double*,double, int,double*,double*,double*,double*,double*,double*); -void decalCircTri2(int,double*,double*,int,double*,double*,double*,double*,double,int,double*,double*,double*,double*,double*,double*); -void decalRect(int,double*,double*,double*,double*,double*,double*); -void decalRect2(int,double*,double*,int,double*,double*,double*,double*,double*,double*); -void decalRectTri(int,double*,double*,double*,double*,double*,double*, int,double*,double*,double*,double*,double*,double*); -void decalRectTri2(int,double*,double*,int,double*,double*,double*,double*,double*,double*, int,double*,double*,double*,double*,double*,double*); -void decalSample(int,double*,double*,double,double); -void decalVal(double*,int,double); -void freeinttab(int**); -void freeintvec(int*); -void freetab(double**); -void freevec(double*); -double Pi(); -void progress(int,int*,int); -void taballoc(double***,int,int); -double** taballoca(int,int*); -void tabintalloc(int***,int,int); -void vecalloc(double**,int); -void vecintalloc(int**,int); +double Pi(); +void progress(int,int*, int); +/*double alea ();*/ +void freeintvec (int *); +void freetab (double **); +void freevec (double *); +void taballoc (double ***,int,int); +void tabintalloc (int ***,int,int); +void freeinttab (int **); +void vecalloc (double **vec, int n); +void vecintalloc (int **vec, int n); +double bacos(double a); +void decalVal(double *,int,double); +void decalRect(int,double *,double *,double *,double *,double *,double *); +void decalCirc(int,double *,double *,double *,double *,double); +void decalRectTri(int,double *,double *,double *,double *,double *,double *, + int,double *,double *,double *,double *,double *,double *); +void decalCircTri(int,double *,double *,double *,double *,double, + int,double *,double *,double *,double *,double *,double *); +void decalRect2(int,double *,double *,int,double *,double *,double *,double *,double *,double *); +void decalCirc2(int,double *,double *,int,double *,double *,double *,double *,double); +void decalRectTri2(int,double *,double *,int,double *,double *,double *,double *,double *,double *, + int,double *,double *,double *,double *,double *,double *); +void decalCircTri2(int,double *,double *,int,double *,double *,double *,double *,double,int, + double *,double *,double *,double *,double *,double *); +void decalSample(int,double *,double *,double,double); +//void decalPoly(int ,double *, double *,double *, double *, double *, double *,int ,double *, double *); +double** taballoca(int,int *); +void complete_tab(int,double **,double **,int *,int *,int *,double *,double *); +extern void pnpoly(double *, double *, double *, double *, int *, int *, double *, double *, double *, double *, double *); diff --git a/src/init.c b/src/init.c index f7bfb7d..1e1728d 100644 --- a/src/init.c +++ b/src/init.c @@ -1,82 +1,81 @@ -#include <R_ext/RS.h> +#include <R.h> +#include <Rinternals.h> #include <stdlib.h> // for NULL #include <R_ext/Rdynload.h> -#include "Zlibs.h" #include "triangulate.h" +#include "Zlibs.h" +#include "adssub.h" -/* .Fortran calls */ -extern void F77_NAME(inpoly)(void *, void *, void *, void *, void *, void *, void *, void *); +// Generated by using tools::package_native_routine_registration_skeleton(dir) +extern int triangulate(int *npoly, int *tabpt, int *nptTot,double *vertX, double *vertY, int *ntri, + double *X1, double *Y1,double *X2, double *Y2,double *X3, double *Y3); + static const R_CMethodDef CEntries[] = { - {"corr_disq", (DL_FUNC) &corr_disq, 11}, - {"corr_disq_ic", (DL_FUNC) &corr_disq_ic, 19}, - {"corr_rect", (DL_FUNC) &corr_rect, 12}, - {"corr_rect_ic", (DL_FUNC) &corr_rect_ic, 20}, - {"corr_tr_disq", (DL_FUNC) &corr_tr_disq, 18}, - {"corr_tr_disq_ic", (DL_FUNC) &corr_tr_disq_ic, 26}, - {"corr_tr_rect", (DL_FUNC) &corr_tr_rect, 19}, - {"corr_tr_rect_ic", (DL_FUNC) &corr_tr_rect_ic, 27}, - {"density_disq", (DL_FUNC) &density_disq, 12}, - {"density_rect", (DL_FUNC) &density_rect, 13}, - {"density_tr_disq", (DL_FUNC) &density_tr_disq, 19}, - {"density_tr_rect", (DL_FUNC) &density_tr_rect, 20}, - {"intertype_disq", (DL_FUNC) &intertype_disq, 13}, - {"intertype_disq_ic", (DL_FUNC) &intertype_disq_ic, 29}, - {"intertype_rect", (DL_FUNC) &intertype_rect, 14}, - {"intertype_rect_ic", (DL_FUNC) &intertype_rect_ic, 30}, - {"intertype_tr_disq", (DL_FUNC) &intertype_tr_disq, 20}, - {"intertype_tr_disq_ic", (DL_FUNC) &intertype_tr_disq_ic, 36}, - {"intertype_tr_rect", (DL_FUNC) &intertype_tr_rect, 21}, - {"intertype_tr_rect_ic", (DL_FUNC) &intertype_tr_rect_ic, 37}, - {"intertypelocal_disq", (DL_FUNC) &intertypelocal_disq, 13}, - {"intertypelocal_rect", (DL_FUNC) &intertypelocal_rect, 14}, - {"intertypelocal_tr_disq", (DL_FUNC) &intertypelocal_tr_disq, 20}, - {"intertypelocal_tr_rect", (DL_FUNC) &intertypelocal_tr_rect, 21}, - {"mimetic_disq", (DL_FUNC) &mimetic_disq, 19}, - {"mimetic_rect", (DL_FUNC) &mimetic_rect, 20}, - {"mimetic_tr_disq", (DL_FUNC) &mimetic_tr_disq, 26}, - {"mimetic_tr_rect", (DL_FUNC) &mimetic_tr_rect, 27}, - {"rao_disq", (DL_FUNC) &rao_disq, 19}, - {"rao_disq_ic", (DL_FUNC) &rao_disq_ic, 27}, - {"rao_rect", (DL_FUNC) &rao_rect, 20}, - {"rao_rect_ic", (DL_FUNC) &rao_rect_ic, 28}, - {"rao_tr_disq", (DL_FUNC) &rao_tr_disq, 26}, - {"rao_tr_disq_ic", (DL_FUNC) &rao_tr_disq_ic, 34}, - {"rao_tr_rect", (DL_FUNC) &rao_tr_rect, 27}, - {"rao_tr_rect_ic", (DL_FUNC) &rao_tr_rect_ic, 35}, - {"ripley_disq", (DL_FUNC) &ripley_disq, 10}, - {"ripley_disq_ic", (DL_FUNC) &ripley_disq_ic, 22}, - {"ripley_rect", (DL_FUNC) &ripley_rect, 11}, - {"ripley_rect_ic", (DL_FUNC) &ripley_rect_ic, 23}, - {"ripley_tr_disq", (DL_FUNC) &ripley_tr_disq, 17}, - {"ripley_tr_disq_ic", (DL_FUNC) &ripley_tr_disq_ic, 29}, - {"ripley_tr_rect", (DL_FUNC) &ripley_tr_rect, 18}, - {"ripley_tr_rect_ic", (DL_FUNC) &ripley_tr_rect_ic, 30}, - {"ripleylocal_disq", (DL_FUNC) &ripleylocal_disq, 10}, - {"ripleylocal_rect", (DL_FUNC) &ripleylocal_rect, 11}, - {"ripleylocal_tr_disq", (DL_FUNC) &ripleylocal_tr_disq, 17}, - {"ripleylocal_tr_rect", (DL_FUNC) &ripleylocal_tr_rect, 18}, - {"shen", (DL_FUNC) &shen, 13}, - {"shen_ic", (DL_FUNC) &shen_ic, 21}, - {"shimatani_disq", (DL_FUNC) &shimatani_disq, 14}, - {"shimatani_disq_ic", (DL_FUNC) &shimatani_disq_ic, 23}, - {"shimatani_rect", (DL_FUNC) &shimatani_rect, 15}, - {"shimatani_rect_ic", (DL_FUNC) &shimatani_rect_ic, 24}, - {"shimatani_tr_disq", (DL_FUNC) &shimatani_tr_disq, 21}, - {"shimatani_tr_disq_ic", (DL_FUNC) &shimatani_tr_disq_ic, 30}, - {"shimatani_tr_rect", (DL_FUNC) &shimatani_tr_rect, 22}, - {"shimatani_tr_rect_ic", (DL_FUNC) &shimatani_tr_rect_ic, 31}, - {"c_triangulate", (DL_FUNC) &c_triangulate, 12}, - {NULL, NULL, 0} -}; - -static const R_FortranMethodDef FortranEntries[] = { - {"inpoly", (DL_FUNC) &F77_NAME(inpoly), 8}, - {NULL, NULL, 0} + {"corr_disq", (DL_FUNC) &corr_disq, 11}, + {"corr_disq_ic", (DL_FUNC) &corr_disq_ic, 19}, + {"corr_rect", (DL_FUNC) &corr_rect, 12}, + {"corr_rect_ic", (DL_FUNC) &corr_rect_ic, 20}, + {"corr_tr_disq", (DL_FUNC) &corr_tr_disq, 18}, + {"corr_tr_rect", (DL_FUNC) &corr_tr_rect, 19}, + {"corr_tr_rect_ic", (DL_FUNC) &corr_tr_rect_ic, 27}, + {"density_disq", (DL_FUNC) &density_disq, 12}, + {"density_rect", (DL_FUNC) &density_rect, 13}, + {"density_tr_disq", (DL_FUNC) &density_tr_disq, 19}, + {"density_tr_rect", (DL_FUNC) &density_tr_rect, 20}, + {"intertype_disq", (DL_FUNC) &intertype_disq, 13}, + {"intertype_disq_ic", (DL_FUNC) &intertype_disq_ic, 29}, + {"intertype_rect", (DL_FUNC) &intertype_rect, 14}, + {"intertype_rect_ic", (DL_FUNC) &intertype_rect_ic, 30}, + {"intertype_tr_disq", (DL_FUNC) &intertype_tr_disq, 20}, + {"intertype_tr_disq_ic", (DL_FUNC) &intertype_tr_disq_ic, 36}, + {"intertype_tr_rect", (DL_FUNC) &intertype_tr_rect, 21}, + {"intertype_tr_rect_ic", (DL_FUNC) &intertype_tr_rect_ic, 37}, + {"intertypelocal_disq", (DL_FUNC) &intertypelocal_disq, 13}, + {"intertypelocal_rect", (DL_FUNC) &intertypelocal_rect, 14}, + {"intertypelocal_tr_disq", (DL_FUNC) &intertypelocal_tr_disq, 20}, + {"intertypelocal_tr_rect", (DL_FUNC) &intertypelocal_tr_rect, 21}, + {"mimetic_disq", (DL_FUNC) &mimetic_disq, 19}, + {"mimetic_rect", (DL_FUNC) &mimetic_rect, 20}, + {"mimetic_tr_disq", (DL_FUNC) &mimetic_tr_disq, 26}, + {"mimetic_tr_rect", (DL_FUNC) &mimetic_tr_rect, 27}, + {"pnpoly", (DL_FUNC) &pnpoly, 11}, + {"rao_disq", (DL_FUNC) &rao_disq, 19}, + {"rao_disq_ic", (DL_FUNC) &rao_disq_ic, 27}, + {"rao_rect", (DL_FUNC) &rao_rect, 20}, + {"rao_rect_ic", (DL_FUNC) &rao_rect_ic, 28}, + {"rao_tr_disq", (DL_FUNC) &rao_tr_disq, 26}, + {"rao_tr_disq_ic", (DL_FUNC) &rao_tr_disq_ic, 34}, + {"rao_tr_rect", (DL_FUNC) &rao_tr_rect, 27}, + {"rao_tr_rect_ic", (DL_FUNC) &rao_tr_rect_ic, 35}, + {"ripley_disq", (DL_FUNC) &ripley_disq, 10}, + {"ripley_disq_ic", (DL_FUNC) &ripley_disq_ic, 22}, + {"ripley_rect", (DL_FUNC) &ripley_rect, 11}, + {"ripley_rect_ic", (DL_FUNC) &ripley_rect_ic, 23}, + {"ripley_tr_disq", (DL_FUNC) &ripley_tr_disq, 17}, + {"ripley_tr_disq_ic", (DL_FUNC) &ripley_tr_disq_ic, 29}, + {"ripley_tr_rect", (DL_FUNC) &ripley_tr_rect, 18}, + {"ripley_tr_rect_ic", (DL_FUNC) &ripley_tr_rect_ic, 30}, + {"ripleylocal_disq", (DL_FUNC) &ripleylocal_disq, 10}, + {"ripleylocal_rect", (DL_FUNC) &ripleylocal_rect, 11}, + {"ripleylocal_tr_disq", (DL_FUNC) &ripleylocal_tr_disq, 17}, + {"ripleylocal_tr_rect", (DL_FUNC) &ripleylocal_tr_rect, 18}, + {"shen", (DL_FUNC) &shen, 13}, + {"shen_ic", (DL_FUNC) &shen_ic, 21}, + {"shimatani_disq", (DL_FUNC) &shimatani_disq, 14}, + {"shimatani_disq_ic", (DL_FUNC) &shimatani_disq_ic, 23}, + {"shimatani_rect", (DL_FUNC) &shimatani_rect, 15}, + {"shimatani_rect_ic", (DL_FUNC) &shimatani_rect_ic, 24}, + {"shimatani_tr_disq", (DL_FUNC) &shimatani_tr_disq, 21}, + {"shimatani_tr_disq_ic", (DL_FUNC) &shimatani_tr_disq_ic, 30}, + {"shimatani_tr_rect", (DL_FUNC) &shimatani_tr_rect, 22}, + {"shimatani_tr_rect_ic", (DL_FUNC) &shimatani_tr_rect_ic, 31}, + {"triangulate", (DL_FUNC) &triangulate, 12}, + {NULL, NULL, 0} }; void R_init_ads(DllInfo *dll) { - R_registerRoutines(dll, CEntries, NULL, FortranEntries, NULL); - R_useDynamicSymbols(dll, FALSE); -} \ No newline at end of file + R_registerRoutines(dll, CEntries, NULL, NULL, NULL); + R_useDynamicSymbols(dll, FALSE); +} diff --git a/src/spatstatsub.f b/src/spatstatsub.f deleted file mode 100755 index f186cb8..0000000 --- a/src/spatstatsub.f +++ /dev/null @@ -1,47 +0,0 @@ -C Output from Public domain Ratfor, version 1.0 - subroutine inpoly(x,y,xp,yp,npts,nedges,score,onbndry) - implicit double precision(a-h,o-z) - dimension x(npts), y(npts), xp(nedges), yp(nedges), score(npts) - logical onbndry(npts) - zero = 0.d0 - half = 0.5d0 - one = 1.d0 - do23000 i = 1,nedges - x0 = xp(i) - y0 = yp(i) - if(i .eq. nedges)then - x1 = xp(1) - y1 = yp(1) - else - x1 = xp(i+1) - y1 = yp(i+1) - endif - dx = x1 - x0 - dy = y1 - y0 - do23004 j = 1,npts - xcrit = (x(j) - x0)*(x(j) - x1) - if(xcrit .le. zero)then - if(xcrit .eq. zero)then - contrib = half - else - contrib = one - endif - ycrit = y(j)*dx - x(j)*dy + x0*dy - y0*dx - if((dx .lt. 0 .and. ycrit .ge. zero) .or. (dx .gt. zero .and. ycri - *t .lt. zero))then - score(j) = score(j) - sign(one,dx)*contrib - onbndry(j) = onbndry(j) .or. (ycrit .eq. zero) - else - if(dx .eq. zero)then - if(x(j) .eq. x0)then - ycrit = (y(j) - y0)*(y(j) - y1) - onbndry(j) = onbndry(j) .or. (ycrit .le. zero) - endif - endif - endif - endif -23004 continue -23000 continue - return - end - diff --git a/src/triangulate.c b/src/triangulate.c index 7193f52..3a58f2d 100755 --- a/src/triangulate.c +++ b/src/triangulate.c @@ -2126,81 +2126,3 @@ int is_point_inside_polygon(vertex) return _greater_than_equal_to(&seg[rseg].v1, &seg[rseg].v0); } -int c_triangulate(int *npoly, int *tabpt, int *nptTot,double *vertX, double *vertY, int *ntri, double *X1, double *Y1,double *X2, double *Y2,double *X3, double *Y3) { - int i,j,k,l; - int **triangles; - double **vertices; - double *x,*y; - tabintalloc(&triangles,*ntri,3); - taballoc(&vertices,*nptTot+1,2); - l=0; - for(i=0;i<*npoly;i++) { - int npt=tabpt[i]; - vecalloc(&x,npt+1); - vecalloc(&y,npt+1); - for(j=1;j<=npt;j++) { - k=j+l-1; - x[j]=vertX[k]; - y[j]=vertY[k]; - } - if(i==0) { - if(testclock(x,y,npt)) { /*clockwise order*/ -k=npt; - for(j=1;j<=npt;j++) { - vertices[j+l][0]=x[k]; - vertices[j+l][1]=y[k]; - k--; - } - } - else { /*anti-clockwise order*/ -for(j=1;j<=npt;j++) { - vertices[j+l][0]=x[j]; - vertices[j+l][1]=y[j]; -} - } - } - else { - if(!testclock(x,y,npt)) { /*anti-clockwise order*/ -k=npt; - for(j=1;j<=npt;j++) { - vertices[j+l][0]=x[k]; - vertices[j+l][1]=y[k]; - k--; - } - } - else { /*clockwise order*/ -for(j=1;j<=npt;j++) { - vertices[j+l][0]=x[j]; - vertices[j+l][1]=y[j]; -} - } - } - l+=npt; - freevec(x); - freevec(y); - } - - /*Test de l'unicite des points*/ - for(i=2;i<=*nptTot;i++) { - for(j=1;j<i;j++) { - if((vertices[i][0]==vertices[j][0])&&(vertices[i][1]==vertices[j][1])) { - Rprintf("Error : Duplicate input vertices\n"); - return -1; - } - } - } - triangulate_polygon(*npoly,tabpt,vertices,triangles); - for(i=0;i<*ntri;i++) { - X1[i]=vertices[triangles[i][2]][0]; - Y1[i]=vertices[triangles[i][2]][1]; - X2[i]=vertices[triangles[i][1]][0]; - Y2[i]=vertices[triangles[i][1]][1]; - X3[i]=vertices[triangles[i][0]][0]; - Y3[i]=vertices[triangles[i][0]][1]; - } - freeinttab(triangles); - freetab(vertices); - return 0; -} - - diff --git a/src/triangulate.h b/src/triangulate.h index 50a0b50..baa3568 100755 --- a/src/triangulate.h +++ b/src/triangulate.h @@ -88,7 +88,7 @@ typedef struct { #define LASTPT 2 -#define INFINITY 1<<30 +#define INFINITY 1<<30 #define C_EPS 1.0e-7 /* tolerance value: Used for making */ /* all decisions about collinearity or */ /* left/right of segment. Decrease */ @@ -140,20 +140,26 @@ extern node_t qs[QSIZE]; /* Query structure */ extern trap_t tr[TRSIZE]; /* Trapezoid structure */ extern segment_t seg[SEGSIZE]; /* Segment table */ + /* Functions */ -extern int c_triangulate(int*, int *, int *,double *, double *, int *, double *, double *,double *, double *,double *, double *); + extern int triangulate_polygon(int, int *, double**,int**); extern int is_point_inside_polygon(double *); + int triangulate_polygon(int, int [], double**, int**); + int testclock(double *,double *,int); + extern int monotonate_trapezoids(int); extern int triangulate_monotone_polygons(int, int, int**); + extern int _greater_than(point_t *, point_t *); extern int _equal_to(point_t *, point_t *); extern int _greater_than_equal_to(point_t *, point_t *); extern int _less_than(point_t *, point_t *); extern int locate_endpoint(point_t *, point_t *, int); extern int construct_trapezoids(int); + extern int generate_random_ordering(int); extern int choose_segment(void); extern int read_segments(char *, int *); diff --git a/src/util.c b/src/util.c new file mode 100755 index 0000000..c6e6a23 --- /dev/null +++ b/src/util.c @@ -0,0 +1,80 @@ +#include "adssub.h" +#include "triangulate.h" + +int triangulate(int *npoly, int *tabpt, int *nptTot,double *vertX, double *vertY, int *ntri, +double *X1, double *Y1,double *X2, double *Y2,double *X3, double *Y3) { + int i,j,k,l; + int **triangles; + double **vertices; + double *x,*y; + tabintalloc(&triangles,*ntri,3); + taballoc(&vertices,*nptTot+1,2); + l=0; + for(i=0;i<*npoly;i++) { + int npt=tabpt[i]; + vecalloc(&x,npt+1); + vecalloc(&y,npt+1); + for(j=1;j<=npt;j++) { + k=j+l-1; + x[j]=vertX[k]; + y[j]=vertY[k]; + } + if(i==0) { + if(testclock(x,y,npt)) { /*clockwise order*/ + k=npt; + for(j=1;j<=npt;j++) { + vertices[j+l][0]=x[k]; + vertices[j+l][1]=y[k]; + k--; + } + } + else { /*anti-clockwise order*/ + for(j=1;j<=npt;j++) { + vertices[j+l][0]=x[j]; + vertices[j+l][1]=y[j]; + } + } + } + else { + if(!testclock(x,y,npt)) { /*anti-clockwise order*/ + k=npt; + for(j=1;j<=npt;j++) { + vertices[j+l][0]=x[k]; + vertices[j+l][1]=y[k]; + k--; + } + } + else { /*clockwise order*/ + for(j=1;j<=npt;j++) { + vertices[j+l][0]=x[j]; + vertices[j+l][1]=y[j]; + } + } + } + l+=npt; + freevec(x); + freevec(y); + } + + /*Test de l'unicite des points*/ + for(i=2;i<=*nptTot;i++) { + for(j=1;j<i;j++) { + if((vertices[i][0]==vertices[j][0])&&(vertices[i][1]==vertices[j][1])) { + Rprintf("Error : Duplicate input vertices\n"); + return -1; + } + } + } + triangulate_polygon(*npoly,tabpt,vertices,triangles); + for(i=0;i<*ntri;i++) { + X1[i]=vertices[triangles[i][2]][0]; + Y1[i]=vertices[triangles[i][2]][1]; + X2[i]=vertices[triangles[i][1]][0]; + Y2[i]=vertices[triangles[i][1]][1]; + X3[i]=vertices[triangles[i][0]][0]; + Y3[i]=vertices[triangles[i][0]][1]; + } + freeinttab(triangles); + freetab(vertices); + return 0; +} -- GitLab