Connaitre positio x,z d'une piece de base sur pyramide

Olympiades mathématiques, énigmes et défis
Risu75
Membre Naturel
Messages: 10
Enregistré le: 28 Fév 2020, 10:28

Connaitre positio x,z d'une piece de base sur pyramide

par Risu75 » 28 Fév 2020, 10:52

Bonjour,
Voici mon problème :

Je souhaite construire une pyramide qui possède une base de 5 pièces ( donc premier étage à 5 pièces, 4eme étages à 4 pièces etc) mais pour cela, je dois trouver une équation mathématique qui me permet de calculer la position (en x et en z ) de n'importe quelle pièce de la pyramide pas besoin de calculer ma position en y car celle-ci reste fixé par mon robot.
Donc je souhaite trouver une équation qui me permet d'obtenir les coordonnées d'une pièce de la pyramide dans un repère orthonormé.
voici un lien image que j'ai héberger pour vous aidez à visualiser mon problème :

- https://image.noelshack.com/fichiers/20 ... ramide.png

J'ai comme données :

- nombre de pièces de base : 5
- le diamètre = 20
- le décalage entre chaque pièce = 30
- la hauteur de la pièce = 20
- la première pièce ( tous à gauche ) est ma pièce de référence qui à pour position : x = 0 et z = 0.
- z : représente les étages de la pyramide
- x : représente le décalage de la pyramide
- nombre de pièces base = 5.
- nombre d'étages pyramide= 5.

J'utilise x,z comme variable de décalage car je vais programmer mon robot à partir de la pièce de référence ( piece1) avec lequel je vais faire des décalages en x et en z car la variable y sera fixe.
Je précise que je place le début de mon étage en bas à gauche donc ma pièce 6 sera placé au dessus de ma pièce 1 et 2 mais "centré" entre ses deux dernières. Et que ma pyramide sera donc un triangle équilatéral ou isocèle ( peu importe).
Je souhaite préciser que contrairement à l'image du lien pourrait faire croire je souhaite bien évidemment trouver une "équation mathématique" qui me permet de calculer les positions x,z de n'importe quelles pièces de la pyramide.
Mon robot à une base fixe, je ne cherche donc pas à optimiser son temps de cycle mais simplement suivre le processus imposé c'est pour cela que ma pièce 6 est située deuxième étage à gauche et c'est donc normal qu'il fasse des "zig,zag." pour placer des pièces.

Cela va faire 3 jours que je suis dessus sans aucune réponses concrète je poste ici en espérant recevoir une aide.
Merci à vous



pascal16
Membre Légendaire
Messages: 6663
Enregistré le: 01 Mar 2017, 13:58
Localisation: Angoulème : Ville de la BD et du FFA. gare TGV

Re: Connaitre positio x,z d'une piece de base sur pyramide

par pascal16 » 28 Fév 2020, 20:41

c'est une fonction à valeurs discrètes.

si c'est pour construire dans l'ordre la pyramide :
c'est plutôt une boucle de calcul que va te donner les valeurs.
soit en travaillant un peu, sans cas paire/impaire.
avec la différentiation paire/impaire assez facilement.
cette boucle étant elle même dans une autre boucle qui change le numéro de " l'étage".


en une seule fois avec des partie entières, il faut sans doute s'inspirer du dénombrement des rationnels positifs

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

Re: Connaitre positio x,z d'une piece de base sur pyramide

par fatal_error » 29 Fév 2020, 11:39

Posons
Code: Tout sélectionner
u_0 = 0
u_1 = 5
u_2 = 9
u_3 = 12
u_4 = 14
u_5 = 15

(on somme à chaque fois la ligne en partant du bas)

De manière générale on a
dont le terme général est

Pour un nombre x donné, on cherche le couple tq

donne la ligne et le décalage dans la ligne

ca revient à chercher tq
et en prendre la partie entière .
on a alors et on retrouve par

La ligne est donnée par
La colonne (indexée 0) par (et on la formule explicite pour faut juste remplacer)


Une fois qu'on a les coordonnées à partir d'un index, déplacer la quille est trivial:
Vu que ya 30 d'espace entre chaque, la quille du milieu est déplacée de 15

Il suffit alors de multiplier j par 15.

Dans le code ci-dessous, j'illustre que pour les 15 quilles, on retrouve bien les bonnes coordonnées à partir de leur numéro
Code: Tout sélectionner

function plotStr(coord) {
  const str = ''
  //plot everything as X except idx as O
  const lines = []
  for(let i = 0; i < 5; ++i) {
    line = Array(9).fill(' ')
    for(let j = 0; j < 5-i; ++j) {
      if (coord.i === i && coord.j === j) {
        line[i+j*2] = 'W'
      } else {
        line[i+j*2] = 'X'
      }
    }
    lines.push(line)
  }
  return lines.map(line => line.join('')).reverse().join('\n')
}
function u(k) {
  return 6*k - k*(k+1)/2 
}
function getCoord(x) {
  const k = Math.floor(-Math.sqrt(121/4 - 2*x) + 11/2)
  return {
    i: k,
    j: x-u(k)
  }
}
for(let i = 0; i< 15; ++i){
  console.log(plotStr(getCoord(i)))
}

https://jsfiddle.net/cmdfz692/
la vie est une fête :)

GaBuZoMeu
Habitué(e)
Messages: 6019
Enregistré le: 05 Mai 2019, 10:07

Re: Connaitre positio x,z d'une piece de base sur pyramide

par GaBuZoMeu » 29 Fév 2020, 12:36

Moi,si j'étais ton robot, je préférerais construire la pyramide dans cet ordre :
Code: Tout sélectionner
   9
  5 8
 2 4 7
0 1 3 6

Comme ça, j'aurais moins de boulot pour m'adapter à une demande différente (construire une pyramide de 7 étages au lieu de 5, faire la pyramide la plus haute possible avec un nombre de pièces fixé mais inconnu ...)

Risu75
Membre Naturel
Messages: 10
Enregistré le: 28 Fév 2020, 10:28

Re: Connaitre positio x,z d'une piece de base sur pyramide

par Risu75 » 02 Mar 2020, 09:51

Bonjour,
Je vous remercie pour vos réponses, je vais essayer d'adapter cela sur mon robot Yaskawa. Je vous tiens au courant de mon avancé.
Merci encore

Risu75
Membre Naturel
Messages: 10
Enregistré le: 28 Fév 2020, 10:28

Re: Connaitre positio x,z d'une piece de base sur pyramide

par Risu75 » 02 Mar 2020, 13:01

GaBuZoMeu a écrit:Moi,si j'étais ton robot, je préférerais construire la pyramide dans cet ordre :
Code: Tout sélectionner
   9
  5 8
 2 4 7
0 1 3 6

Comme ça, j'aurais moins de boulot pour m'adapter à une demande différente (construire une pyramide de 7 étages au lieu de 5, faire la pyramide la plus haute possible avec un nombre de pièces fixé mais inconnu ...)


Bonjour GaBuZoMeu,
J'ai sans doute oublié de le préciser mais je ne cherche pas à optimiser son temps de cycle. C'est pour une présentation robotique envers un jeune publique et je débute la programmation robotique d'ou la problématique forum.

GaBuZoMeu
Habitué(e)
Messages: 6019
Enregistré le: 05 Mai 2019, 10:07

Re: Connaitre positio x,z d'une piece de base sur pyramide

par GaBuZoMeu » 02 Mar 2020, 22:13

Je ne cherche pas non plus à optimiser le temps de cycle.
Je cherche à avoir une approche qui se prête mieux à une formalisation. Avec ma proposition, on peut reprendre par exemple ce que fait fatal_error, en un peu plus simple, et de façon qui puisse servir pour n'importe quelle taille de pyramide.
Dans quel langage programmes-tu ton robot ?

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

Re: Connaitre positio x,z d'une piece de base sur pyramide

par fatal_error » 02 Mar 2020, 23:16

@risu75, Je pensais que tu avais volontairement simplifié le problème.
Mais si c'est vraiment juste associer un index à sa position dans la pyramide, alors moeux vaut faire comme pascal: itere et associe petit a petit les coordonnées a chaque index, que tu stores dans un tableau

Cest plus rapide, moins chiant (mentalement), et a le bon gout de tenir en memoire...
la vie est une fête :)

Risu75
Membre Naturel
Messages: 10
Enregistré le: 28 Fév 2020, 10:28

Re: Connaitre positio x,z d'une piece de base sur pyramide

par Risu75 » 04 Mar 2020, 10:24

fatal_error a écrit:@risu75, Je pensais que tu avais volontairement simplifié le problème.
Mais si c'est vraiment juste associer un index à sa position dans la pyramide, alors moeux vaut faire comme pascal: itere et associe petit a petit les coordonnées a chaque index, que tu stores dans un tableau

Cest plus rapide, moins chiant (mentalement), et a le bon gout de tenir en memoire...


@fatal_error, c'est un robot industriel Yaskawa et il ne possède pas de tableau sinon cela serait trop simple je dois effectuer un décalage à partir d'un point appris ( point de référence = P1 ( pièce 1) ) et à partir de ce point je vais devoir construire la pyramide sans optimiser son temps de cycle. Je vous tiendrais au courant de mon avancé sur ce mini projet.

Risu75
Membre Naturel
Messages: 10
Enregistré le: 28 Fév 2020, 10:28

Re: Connaitre positio x,z d'une piece de base sur pyramide

par Risu75 » 04 Mar 2020, 10:32

GaBuZoMeu a écrit:Je ne cherche pas non plus à optimiser le temps de cycle.
Je cherche à avoir une approche qui se prête mieux à une formalisation. Avec ma proposition, on peut reprendre par exemple ce que fait fatal_error, en un peu plus simple, et de façon qui puisse servir pour n'importe quelle taille de pyramide.
Dans quel langage programmes-tu ton robot ?


@GaBuZoMeu, d'accord je comprends votre point de vue dans ce cas. Je programme le robot industriel en : inform language ( avec des boucles for, while, for) des compteurs, des affectations de variable simplement.

GaBuZoMeu
Habitué(e)
Messages: 6019
Enregistré le: 05 Mai 2019, 10:07

Re: Connaitre positio x,z d'une piece de base sur pyramide

par GaBuZoMeu » 04 Mar 2020, 11:00

Est-ce que ton langage contient une instruction du genre "partie entière" ("floor"), ou a défaut "round" ?

Risu75
Membre Naturel
Messages: 10
Enregistré le: 28 Fév 2020, 10:28

Re: Connaitre positio x,z d'une piece de base sur pyramide

par Risu75 » 04 Mar 2020, 11:48

Je te remercie pour ton aide, il va arrondir la partie entière de l'opération au dixième prêt quand ce dernier est supérieur à 5 du résultat obtenus.
exemple : x = 5.2 * 3 = 15.6 donc il va arrondir à 16.

GaBuZoMeu
Habitué(e)
Messages: 6019
Enregistré le: 05 Mai 2019, 10:07

Re: Connaitre positio x,z d'une piece de base sur pyramide

par GaBuZoMeu » 04 Mar 2020, 11:55

Et que fait l'arrondi pour 15.5 ?

Risu75
Membre Naturel
Messages: 10
Enregistré le: 28 Fév 2020, 10:28

Re: Connaitre positio x,z d'une piece de base sur pyramide

par Risu75 » 04 Mar 2020, 11:59

GaBuZoMeu a écrit:Et que fait l'arrondi pour 15.5 ?


16

GaBuZoMeu
Habitué(e)
Messages: 6019
Enregistré le: 05 Mai 2019, 10:07

Re: Connaitre positio x,z d'une piece de base sur pyramide

par GaBuZoMeu » 04 Mar 2020, 13:42

Bon, ça permet d'avoir un "floor(x)" comme arrondi de x-0.5.

Risu75
Membre Naturel
Messages: 10
Enregistré le: 28 Fév 2020, 10:28

Re: Connaitre positio x,z d'une piece de base sur pyramide

par Risu75 » 04 Mar 2020, 14:16

GaBuZoMeu a écrit:Bon, ça permet d'avoir un "floor(x)" comme arrondi de x-0.5.


@GaBuZoMeu, oui

GaBuZoMeu
Habitué(e)
Messages: 6019
Enregistré le: 05 Mai 2019, 10:07

Re: Connaitre positio x,z d'une piece de base sur pyramide

par GaBuZoMeu » 04 Mar 2020, 17:09

Un petit amusement en python :

Code: Tout sélectionner
import numpy as np
from matplotlib import pyplot as plt

def pyramide(largeur,hauteur,ecart,nombre) :
    for i in range(nombre) :
        rang = np.floor(np.sqrt(1+8*i)/2-1/2)
        niveau = i-rang*(rang+1)/2
        x = rang*(largeur+ecart)-niveau*(largeur+ecart)/2
        y = niveau*hauteur
        plt.fill([x,x+largeur,x+largeur,x],[y,y,y+hauteur,y+hauteur])
    plt.show()


Exemple :
Code: Tout sélectionner
pyramide(20,30,10,100)


Image

couleurs dans l'ordre : bleu, orange, vert rouge, violet, marron, rose, gris, kaki, cyan et ça recommence

Risu75
Membre Naturel
Messages: 10
Enregistré le: 28 Fév 2020, 10:28

Re: Connaitre positio x,z d'une piece de base sur pyramide

par Risu75 » 05 Mar 2020, 09:32

@GaBuZoMeu, je te remercie pour ce code. Je vais essayer de code tous cela sur le robot puis je reviendrais ici pour vous montrer le résultat ou pour vous indiquer ou j'en suis

GaBuZoMeu
Habitué(e)
Messages: 6019
Enregistré le: 05 Mai 2019, 10:07

Re: Connaitre positio x,z d'une piece de base sur pyramide

par GaBuZoMeu » 05 Mar 2020, 10:28

Un code python alternatif, sans floor ni sqrt :

Code: Tout sélectionner
from matplotlib import pyplot as plt

def pyramidebis(largeur,hauteur,ecart,nombre) :
    reste = nombre
    rang = 0
    niveau = 0
    while reste > 0 :
        while niveau <= rang and reste > 0 :
            x = (largeur+ecart)*(rang-niveau/2)
            y = niveau*hauteur
            plt.fill([x,x+largeur,x+largeur,x],\
                     [y,y,y+hauteur,y+hauteur])
            reste -= 1
            niveau += 1
        rang += 1
        niveau = 0
    plt.show()

Risu75
Membre Naturel
Messages: 10
Enregistré le: 28 Fév 2020, 10:28

Re: Connaitre positio x,z d'une piece de base sur pyramide

par Risu75 » 05 Mar 2020, 12:22

@GaBuZoMeu, Je vais essayer d'adapter tous cela à mon robot merci encore

 

Retourner vers ⚔ Défis et énigmes

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 9 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite