Diagonales d'un tableau

Bonjour
Ayant un faible niveau de math, même pas un niveau collège, la denière classe que j'ai fréquentée étant la 3ème et cela remonte à plus de 30 ans, autant dire que tout est passé depuis bien longtemps dans les oubliettes de mon cerveau.
De ce fait j'aurais besoin d'être aiguillé vers une solution, et la plus simple à comprendre si possible pour résoudre un problème sur lequel je sèche.

J'ai un tableau de 2 dimensions de 7 par 6, représenté ainsi :
_________________________________________
|                                         |
| 0,0 | 0,1 | 0,2 | 0,3 | 0,4 | 0,5 | 0,6 |
|_________________________________________|
|                                         |
| 1,0 | 1,1 | 1,2 | 1,3 | 1,4 | 1,5 | 1,6 |
|_________________________________________|
|                                         |
| 2,0 | 2,1 | 2,2 | 2,3 | 2,4 | 2,5 | 2,6 |
|_________________________________________|
|                                         |
| 3,0 | 3,1 | 3,2 | 3,3 | 3,4 | 3,5 | 3,6 |
|_________________________________________|
|                                         |
| 4,0 | 4,1 | 4,2 | 4,3 | 4,4 | 5,5 | 5,6 |
|_________________________________________|
|                                         |
| 5,0 | 5,1 | 5,2 | 5,3 | 5,4 | 5,5 | 5,6 |
|_________________________________________|
La 1ère valeur de chaque éléments représente l'index de la ligne du tableau, la seconde l'index de la colonne.

Maintenant j'ai besoin de trouver les coordonnées des 2 diagonales à partir d'une ligne et colonne quelconque, pour cela je n'ai uniquement besoin de trouver qu'un des 2 extrêmes de la diagonale du tableau, pour la diagonale que je qualifierai d' "à l'endroit", j'ai rapidement trouvé la solution, désolé de ne pas pouvoir représenter cela avec une formule mathématique, du coup j'expliquerai succinctement ce que j'ai déduit à partir d'une ligne et colonne.

pour une ligne à 2 et une colonne à 4.
Je prends le minimum entre (le nombre de lignes - la ligne) et (le nombre de colonnes - la colonne)
Ce qui dans l'exemple donne 5-2 et 6-4, soit 3 et 2, donc mini vaut 2.
Je déduis cette valeur de ma ligne et ma colonne, ce qui donne 0 et 2, j'ai bien mon extrémité, cela me suffit pour le besoin que j'en ai.

Pour la diagonale que je qualifierai "d'à l’envers", je n'arrive pas à trouver une solution valable pour tous les éléments de mon tableau.
J'ai un semblant de solution, en utilisant le même principe que précédemment sauf qu'au lieu de déduire la valeur pour la colonne, je lui ajoute. Mais je me retrouve avec des exceptions dans les cas où la ligne vaut 0 ou la colonne vaut 6 et cela m'ennuie car j'aimerais trouver une solution universelle si tant soit peu qu'il en existe une pour tous les éléments du tableau.

J'espère avoir été compréhensible dans l'énoncé de mon problème.
Merci d'avance de vos suggestions pour m'aider à le résoudre.

Réponses

  • Bonsoir gledo.

    Qu'appelles-tu diagonale d'un tableau \( 6 \times 7 \) ?

    e.v.
    Personne n'a raison contre un enfant qui pleure.


  • Bonsoir ev.

    En résumé, j'ai besoin d'obtenir une des bornes de la diagonale, c'est à dire la ligne, et la colonne d'une des extrémités, à partir d'une extrémité, je n'aurai aucun mal à obtenir les éléments (ligne et colonne) de la diagonale.

    Ce que je désigne par diagonale, ce sont les lignes et colonnes jusqu'aux bords du tableau.

    Par exemple, j'ai la ligne 2, et la colonne 3 (2, 3) dans mon tableau.
    La 1ère diagonale est donc :
    0, 1
    1, 2
    2, 3
    3, 4
    4, 5
    5, 6
    La seconde diagonale est :
    0, 5
    1, 4
    2, 3
    3, 2
    4, 1
    5, 0

    Autre exemple, ligne 1, et colonne 5, soit le 1, 5 dans mon tableau.
    La 1ère diagonale est :
    0, 4
    1, 5
    2, 6
    La seconde :
    0, 6
    1, 5
    2, 4
    3, 3
    4, 2
    5, 1

    J'ai présenté cela avec un tableau de 7 éléments × 6 éléments, mais en fait, j'aurai des tableaux de tailles variables desquels je dois obtenir ces valeurs.

    Je ne sais si je suis bien clair dans mon explication.
  • Bonjour.

    Finalement, ma première approche était erronée, car je me suis moi-même induit en erreur, en ayant utilisé en base les index max (lignes et colonnes) au lieu du nombre d'éléments.

    Mais je suis toujours bloqué pour trouver la ligne et colonne d'une extrémité de la seconde diagonale.

    Voici un exemple en lua qui permet de trouver la ligne et colonne d'une extrémité de la 1ère diagonale avec le modulo, ce qui me convient.
    function extremite_diagonale(ligne, colonne, total_lignes, total_colonnes)
        min = math.min(ligne % total_lignes, colonne % total_colonnes)
        return {ligne - min, colonne - min}
    end
        
    for i = 0, 5 do
        for j = 0, 6 do
            print(i .. ", " .. j .. " =>  " .. table.concat(extremite_diagonale(i, j, 6, 7), ", "))
        end
    end
    

    Ce qui me retourne (ligne, colonne => ligne extrémité diagonale, colonne extrémité diagonale)
    0, 0 => 0, 0
    0, 1 => 0, 1
    0, 2 => 0, 2
    0, 3 => 0, 3
    0, 4 => 0, 4
    0, 5 => 0, 5
    0, 6 => 0, 6
    1, 0 => 1, 0
    1, 1 => 0, 0
    1, 2 => 0, 1
    1, 3 => 0, 2
    1, 4 => 0, 3
    1, 5 => 0, 4
    1, 6 => 0, 5
    2, 0 => 2, 0
    2, 1 => 1, 0
    2, 2 => 0, 0
    2, 3 => 0, 1
    2, 4 => 0, 2
    2, 5 => 0, 3
    2, 6 => 0, 4
    3, 0 => 3, 0
    3, 1 => 2, 0
    3, 2 => 1, 0
    3, 3 => 0, 0
    3, 4 => 0, 1
    3, 5 => 0, 2
    3, 6 => 0, 3
    4, 0 => 4, 0
    4, 1 => 3, 0
    4, 2 => 2, 0
    4, 3 => 1, 0
    4, 4 => 0, 0
    4, 5 => 0, 1
    4, 6 => 0, 2
    5, 0 => 5, 0
    5, 1 => 4, 0
    5, 2 => 3, 0
    5, 3 => 2, 0
    5, 4 => 1, 0
    5, 5 => 0, 0
    5, 6 => 0, 1

    Pour la seconde diagonale, je suis sûr que la solution doit être simple, mais je ne l'ai toujours pas trouvée.
  • Bonjour,

    La seconde diagonale est la première lorsque la case (ligne,colonne) est indexée par :
    (ligne_bis,colonne_bis)=(total_lignes-ligne,total_colonne-colonne)
    (ligne,colonne_bis) où : colonne_bis=total_colonne-colonne.

    edit : rectification de la formule proposée après une nuit de réflexion…
Connectez-vous ou Inscrivez-vous pour répondre.