Voici ma problématique:
Je crée une grille de points sous forme de cercle. Je voudrais récupérer uniquement les points au bord. En gros, si un point n'a pas ses 4 voisins (point au dessus, point en dessous, point à gauche et point à droite), il doit être marqué de couleur rouge.
Voici un code reproductible:
Code : Tout sélectionner
## Paramètres
r <- sqrt(2)
scale = 0.0707
s <- r + 0.001
ss <- -r-0.001
## Création de la grille de points
Xg <- expand.grid(X1 = seq(-r,r,scale), X2=seq(-r,r,scale))
Xg <- as.matrix(Xg)
sphere <- sqrt(Xg[,1]^2+Xg[,2]^2)
Xg2 <- cbind(Xg, sphere)
Xg3 <- Xg2[Xg2[,3]<=r+0.001,]
X <- Xg3[,-3]
rm(Xg,Xg2,Xg3)
## graphique
matplot(X[,1], X[,2], pch=1)
## essai pour les points au bord
test <- NULL
essai <- matrix(numeric(), ncol=6, nrow=1)
for (i in 1:nrow(X)) {
mat_X2_fixe <- as.matrix(X[,2])
mat <- matrix(X[i,1], nrow=nrow(mat_X2_fixe), ncol=1)
for (j in 1:nrow(mat_X2_fixe)) {
essai[,1] <- mat[1,1]
essai[,2] <- mat_X2_fixe[j,1]
essai[,3] <- mat[1,1]-scale
essai[,4] <- mat[1,1]+scale
essai[,5] <- mat_X2_fixe[j,1]-scale
essai[,6] <- mat_X2_fixe[j,1]+scale
if (essai[,3]>s | essai[,3]<ss | essai[,4]>s | essai[,4]<ss | essai[,5]>s | essai[,5]<ss | essai[,6]> s | essai[,6]<ss ) {
test <- rbind(test, essai[1,1:2])
} ## marque les points au bord
}
}
matplot(test[,1], test[,2], pch=16, col="purple", add=TRUE) ## je n'ai pas du tout le résultat attendu....
Pouvez-vous m'aider ?
Je vous remercie par avance,
Cordialement,
Diane