Opérations géométriques en C
Fermé
leoliom
Messages postés
171
Date d'inscription
jeudi 21 juillet 2016
Statut
Membre
Dernière intervention
20 février 2024
-
Modifié le 25 sept. 2022 à 20:08
leoliom Messages postés 171 Date d'inscription jeudi 21 juillet 2016 Statut Membre Dernière intervention 20 février 2024 - 3 mai 2022 à 16:22
leoliom Messages postés 171 Date d'inscription jeudi 21 juillet 2016 Statut Membre Dernière intervention 20 février 2024 - 3 mai 2022 à 16:22
A voir également:
- Impossible de terminer l'opération car le fichier contient un virus
- Fichier rar - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Impossible de supprimer un fichier - Guide
- Fichier host - Guide
4 réponses
leoliom
Messages postés
171
Date d'inscription
jeudi 21 juillet 2016
Statut
Membre
Dernière intervention
20 février 2024
2
Modifié le 1 mai 2022 à 13:39
Modifié le 1 mai 2022 à 13:39
Bonjour ,en fait set_point permet de créer un point,add_point permet de faire:
Si on a A=(2.0,4.0) et B=(1.0,6.0) C=A+B=(3.0,8.0)
En fait je vais tout reprendre
J'ai une fonction principal appelé fonction approximation_contout_polygonal_par_une_courbe_bezier_degre2 (CONT,j1,j2,d) → Lqui doit approximé une ligne polygonal par une courbe lisse
Exemple:(voir photo)L'approximation est en bleu
On approxime le contour polygonal(P0,P1,P2,P3) par une courbe lisse
J'ai mis en gras la fonction qui m'interresse
L'algorithme est le suivant:
C0 ← Pj1
C2 ← Pj2
n ← j2 − j1
si n = 1 alors
A ←1/2(Pj1 + Pj2)
sinon
A← c(somme allant de i à n-1 de P_i+j1)+ d(Pj1 + Pj2)
Le type bézier2 est composé de 3 points
Esce que c'est plus clair ou bien j'explicite encore davantage
Si on a A=(2.0,4.0) et B=(1.0,6.0) C=A+B=(3.0,8.0)
Point set_point (double x , double y ){ Point P = {x , y } ; return P; } Point add_point(Point P1 , Point P2 ){ return set_point(P1.x+P2.x,P1.y+P2.y ) ; } Point produit_reel_point( double a,Point p){ Point Pr = {a*p.x,a*p.y} ; return Pr; }
En fait je vais tout reprendre
J'ai une fonction principal appelé fonction approximation_contout_polygonal_par_une_courbe_bezier_degre2 (CONT,j1,j2,d) → Lqui doit approximé une ligne polygonal par une courbe lisse
Exemple:(voir photo)L'approximation est en bleu
On approxime le contour polygonal(P0,P1,P2,P3) par une courbe lisse
J'ai mis en gras la fonction qui m'interresse
L'algorithme est le suivant:
C0 ← Pj1
C2 ← Pj2
n ← j2 − j1
si n = 1 alors
A ←1/2(Pj1 + Pj2)
sinon
A← c(somme allant de i à n-1 de P_i+j1)+ d(Pj1 + Pj2)
Le type bézier2 est composé de 3 points
struct Bezier2{ Point P0,P1,P2 }
Bezier2 approx_bezier2(Tableau_Point Tableau,int j1,int j2){ Bezier2 B; Point Pj1=Tableau.tab[j1]; Point Pj2=Tableau.tab[j2]; Point C0=Pj1; Point C2=Pj2; Point A; B.P0=C0; B.P2=C2; int m=j2-j1; if(m==1){ // Tab= (Pj1, . . . , Pj2) = (Pj1, Pj1+1) // r ́eduit à un seul segment C1=division_reel_point(2,add_point(Pj1,Pj2)); B.P1=C1; } else{ // n ≥ 2 :Tableau avec au moins 3 points float n=(float)m; float c=(3*n)/(n*n-1); float d=(1-2*n)/(2*(n+1)) ; int i; <gras> //somme de i allant de 1 à n-1 de P_j1+i <=>i=j1+1->j1+n-1 de P_i Point somme=set_point(0,0); for(i=1;i<=m-1;i++){ somme=add_point(Tableau.tab[i+j1],somme); } </gras> A=add_point( produit_reel_point(c,somme) , produit_reel_point(d,add_point(Pj1,Pj2)) ); B.P1=C1; } return B; }
Esce que c'est plus clair ou bien j'explicite encore davantage
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié le 29 avril 2022 à 01:36
Modifié le 29 avril 2022 à 01:36
Salut leoliom,
Tout est très confus.
Puisqu'on te donne des fonctions, si tu postais le code des fonctions qui te sont fournies peut-être qu'on y verrait plus clair.
Le prototype que tu indiques
Par ailleurs, tu dis que on t'a "donné" aussi la "fonction add_point qui permet d’additionner des points". Personnellement, je ne sais pas ce que "additionner des points" signifie. Dans le contexte de ce que tu décris, une fonction add_point() pourrait être une fonction qui ajoute un Point dans un Tableau_point ou alors avoir un sens mathématique. Sans le code de cette fonction, on ne peut que jouer aux devinettes.
Tu dis que tu as le code de
Ensuite, je suppose qu'on te donne aussi les réels
Après, tu dis qu'on te donne :
Manifestement, il s'agit d'une fonction qui retourne un Point, dont on peut supposer qu'il résulte du calcul de A, et que A serait de type Point.
Qu'est-ce que
Après, il y a un problème de notation dans ce qu'on te donne :
Peux-tu dire, en français, qu'elle est ton interprétation des opérations élémentaires signifiées par ces notations ?
Tu parles d'un tableau de points T, qui est d'ailleurs sensé être passé en paramètre de ta fonction
Dal
Tout est très confus.
Puisqu'on te donne des fonctions, si tu postais le code des fonctions qui te sont fournies peut-être qu'on y verrait plus clair.
Le prototype que tu indiques
set_point(double x,double y)semble erroné par rapport à l'usage que tu mentionnes :
Point P = set_point(4,3);. Il devrait plutôt être :
Point set_point(double x,double y)...
Par ailleurs, tu dis que on t'a "donné" aussi la "fonction add_point qui permet d’additionner des points". Personnellement, je ne sais pas ce que "additionner des points" signifie. Dans le contexte de ce que tu décris, une fonction add_point() pourrait être une fonction qui ajoute un Point dans un Tableau_point ou alors avoir un sens mathématique. Sans le code de cette fonction, on ne peut que jouer aux devinettes.
Tu dis que tu as le code de
produit_reel_point(double a,Point P)... peux-tu le fournir ?
Ensuite, je suppose qu'on te donne aussi les réels
cet
d, non ? Quels sont-ils ?
Après, tu dis qu'on te donne :
Point calcul_A(Tableau_point T,int j1,int j2)
A=c(somme de i=1->n de P_j1+i)+d(P_j1+P_j2)
Manifestement, il s'agit d'une fonction qui retourne un Point, dont on peut supposer qu'il résulte du calcul de A, et que A serait de type Point.
Qu'est-ce que
n?
Après, il y a un problème de notation dans ce qu'on te donne :
c(somme de i=1->n de P_j1+i)+d(P_j1+P_j2)
- je suppose que c() signifie un produit de c avec le contenu de la parenthèse.
- je suppose que i=1->n signifie que i est une variable interne à la fonction qui prend successivement les valeurs de 1 à n dans une boucle
- on manque de contexte pour comprendre ce que signifie la notation P_j1, est-ce le Point contenu dans le tableau T à l'indice j1 ? Autre chose ?
- on manque de contexte pour comprendre ce que signifie la notation P_j1+i
Peux-tu dire, en français, qu'elle est ton interprétation des opérations élémentaires signifiées par ces notations ?
Tu parles d'un tableau de points T, qui est d'ailleurs sensé être passé en paramètre de ta fonction
calcul_Ate donne-t-on les valeurs contenues dans ce tableau (les Point) et sa taille (le nombre d'éléments Point) qu'il contient ? A ton avis, à quel moment ce tableau, ou son contenu, est-il utilisé dans la fonction ?
Dal
Bonjour désolé finalement j’ai résolu le problème .Je met ici la solution ou bien c’est pas La peine
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
30 avril 2022 à 15:28
30 avril 2022 à 15:28
Tu pourrais tout d'abord répondre aux questions posées, puis poster ta solution, cela permettrait à ce topic d'avoir du sens :-)
leoliom
Messages postés
171
Date d'inscription
jeudi 21 juillet 2016
Statut
Membre
Dernière intervention
20 février 2024
2
1 mai 2022 à 13:04
1 mai 2022 à 13:04
Ah oui désolé
Modifié le 1 mai 2022 à 16:55
Ta solution consistant à précalculer la valeur de la "somme" des points du tableau dans une boucle avant ta ligne 49 est une façon de faire.
Tu pourrais aussi faire une fonction qui retourne un type Point et fait la somme des Points contenu dans un tableau de Points dont tu passes la dimension, ce qui te permettrait de mettre l'appel de ta fonction directement en ligne 49.
3 mai 2022 à 16:22