Faire des triangles

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Benjamin Leduc
Messages : 158
Enregistré le : 09 Avr 2010, 08:48

Faire des triangles

Messagepar Benjamin Leduc » 28 Avr 2021, 07:39

Bonjour,

Je cherche à faire des triangles qui pavent un ensemble de points. Je m'explique:

Code : Tout sélectionner

> GenData<-cbind(sample(1:10,10),sample(1:10,10))
> GenData
      [,1] [,2]
 [1,]    7    3
 [2,]    4    6
 [3,]    1    7
 [4,]    8   10
 [5,]    9    8
 [6,]    2    9
 [7,]   10    4
 [8,]    6    1
 [9,]    3    5
[10,]    5    2
> plot(GenData)

Si l'on regarde cette exemple, je veux comme retour:
Les points 8-10-1
Les points 8-1-7
et aucune autre combinaison avec le 8 car cela traverserais les deux triangle précédent
Les points 10-1-9
Les points 9-1-2
Les points 1-2-7

Etc…

Une idée?

Merci d'avance
Je dois être Suicide-R

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: Faire des triangles

Messagepar Logez Maxime » 28 Avr 2021, 07:48

Bonjour,

Tu peux regarder du côté de la triangulation de Delaunay :

Code : Tout sélectionner

library(interp)
GenData <- structure(list(x = c(7L, 4L, 1L, 8L, 9L, 2L, 10L, 6L, 3L, 5L),
    y = c(3L, 6L, 7L, 10L, 8L, 9L, 4L, 1L, 5L, 2L)), class = "data.frame", row.names = c("[1,]",
"[2,]", "[3,]", "[4,]", "[5,]", "[6,]", "[7,]", "[8,]", "[9,]",
"[10,]"))

res <- tri.mesh(GenData)
plot(res)
Cordialement,
Maxime

Benjamin Leduc
Messages : 158
Enregistré le : 09 Avr 2010, 08:48

Re: Faire des triangles

Messagepar Benjamin Leduc » 29 Avr 2021, 08:04

Merci, c'est en effet ça!

J'ai essayé de craquer le code, mais je n'y arrive pas, comment faire un algorithme simple en R pour avoir juste la première colonne (celle entre parenthèse)

Merci
Je dois être Suicide-R

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: Faire des triangles

Messagepar Logez Maxime » 29 Avr 2021, 10:50

Bonjour,

en général quand tu as une différence entre le stockage des informations dans un objet (que tu peux appréhender avec str) et son affichage, c'est qu'il existe une fonction print associée à la classe de ton objet :

Code : Tout sélectionner

str(res)
print.triSht
function (x, ...)
{
    if (!inherits(x, "triSht"))
        stop("x must be of class \"triSht\"")
    cat("Delauney triangulation, node and triangle indices:\n")
    cat("triangle: nodes (a,b,c), neighbour triangles [i,j,k] \n")
    for (i in 1:x$nt) {
        cat(i, ": (", x$trlist[i, "i1"], ",",
            x$trlist[i, "i2"], ",", x$trlist[i, "i3"],
            # ....
           
# du coup regarde du côté de res$trlist
res$trlist
      i1 i2 i3 j1 j2 j3 k1 k2 k3
 [1,]  1 10  8  0  4  5  1  2  3
 [2,]  2  9 10  7  5  8  4  5  6
 [3,]  5  1  7  4  0  6  7  8  9
 [4,]  7  1  8  1  0  3  2 10  7
 [5,]  2 10  1  1  6  2  3 11  5
 [6,]  5  2  1  5  3 10 11  9 12
 [7,]  3 10  9  2  8  0  4 13 14
 [8,]  3  9  2  2  9  7  6 15 13
 [9,]  2  6  3  0  8 11 16 15 17
[10,]  2  5  4  0 11  6 18 19 12
[11,]  2  4  6  0  9 10 20 17 19
Les trois premières colonnes de cette matrice correspondent à celles afficher quand tu fais appel à l'objet.

Cordialement,
Maxime


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité