Sélection de points parmis une table + Création de spline encastré
Tout d'abord, excusez-moi pour le titre qui ne reflète pas totalement ce dont j'ai besoin. Je vais essayer d'être un peu plus explicite dans sa description.
Dans le cadre d'un stage, je dois réaliser un projet qui demande de réaliser un algorithme en C (chose dont je ne suis pas capable puisque ce n'est "pas" un enseignement dispensé par mon école).
Ce projet (programme) a pour but de lier grâce à une fonction, le mouvement d'un axe maitre à celui d'un axe secondaire (en gros :bad: ). L'utilisateur qui utilise ce programme doit fournir une liste de points (position axe maitre, position axe secondaire) afin qu'on puisse définir une fonction capable de relier ces points.
Voila donc les problèmes qui se posent.
Dans un premier temps, l'utilisateur peut donner autant de points qu'il le souhaite, cependant, le robot qui va utiliser la fonction ne peut en mémoriser que 32. Ainsi, une première partie de l'algorithme servirait à "choisir" les 32 points les "plus représentatifs" (ou les points donnés s'il y en a moins de 32) de la table de points fournie. Pour se faire, je propose ici de calculer un "écart relatif" entre deux points consécutifs. (Plus d'explication sur l'image)
http://nsa34.casimages.com/img/2013/...2704654968.jpg
Ensuite vient le gros du problème : la résolution du système. En effet, pour construire la fonction j'utilise la méthode des splines cubiques encastrés (puisque j'ai besoin d'avoir des dérivées nulles aux bords de "la" fonction), or, cette méthode demande de résoudre qui varie forcément en fonction du nombre de points choisis auparavant. Après résolution du système, on trouve les "principaux" coefficients des splines qui nous permettent de trouver les coefficients manquants.
En sortie, on doit obtenir n-1 fonctions (ou leur dérivée qui représentent donc la vitesse) qui puissent etre utilisées par un variateur pour définir la vitesse à adopter par l'axe secondaire.
http://nsa34.casimages.com/img/2013/...2811405106.jpg
Comme vous l'aurez compris, le problème n'est pas la représentation de la fonction finale mais bien son "écriture".
Merci d'avance pour votre aide et bonne journée!
(Je reste disponible pour toute précision)
Je viens de me rendre compte d'une petite erreur dans mon "premier" ordinogramme. Dans la condition k=31, il faut en fait écrire k=n qui signifie que si on a atteint de dernier point (donc de coordonnée (xn,yn)) alors on repart du début (sans les points qui ont donc étés supprimés).
A l'heure actuelle voila ce que je pensais faire pour la première partie, je sèche...
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| #include <iostream>
#include <cmath>
const int m = 2;
using namespace std;
int main()
{
int n,r=200,u,v ;
cout << "Saisissez le nombre de points de votre table"<< endl;
cin >> n;
int t[n][m], i, j, k=0;
for (i=0; i<n; i++)
for (j=0; j<m; j++)
{
cout << "Tapez t["<<i<<"]["<<j<<"] : ";
cin >> t[i][j];
}
if (n>=3)
{
i=0;
while (i<n)
{
u=abs((t[i][0]-t[i+1][0]));
u=u/t[i][0];
u=u*100;
v=abs((t[i][1]+t[i+1][1]));
v=v/t[i][1];
v=v*100;
if (r<=(u+v)/2)
{
// t[k][0]=t[i][0];
// t[k][1]=t[i][1];
k++;
}
else
{
i++;
}
}
i=0;
r=r+5;
}
cout<<"Voici le tableau :"<<endl;
for (i=0; i<n; i++)
{
for (j=0; j<m; j++) cout<<"|"<<t[i][j] <<"|";
cout<<endl;
}
return 0;
} |
Merci d'avance !