Bonjour,

J'essaie de créer un algo afin de générer un flocon de Koch avec une liste chainée de points, mais j'ai un souci au niveau des pointeurs je pense.

Tout d'abord, voici la structure de point:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
typedef struct EPOINT EPOINT; 
 
struct EPOINT {
  double x;
  double y;
  struct EPOINT *next;
};
 
typedef EPOINT *PLISTE;
Et celle de Koch :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
/**
 * \brief Structure représentant le flocon de Koch
 * \details Le flocon de Koch est constitué :
 * */
typedef struct Koch Koch; 
 
struct Koch {
	PLISTE points;
	int ordreIteration;
	int echelle;
	int couleurFond;
	int couleurContour;
 
};
La fonction d'ajout, après un point :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
/*
 * Insere un point apres element elt 
 * INPUT: ptr sur element avant insertion, coordonnees du nouveau point
 * OUTPUT: ptr sur element ajoute
 */
EPOINT *insert_after(EPOINT * elt, double xx, double yy){
	//Déclarations
	EPOINT *point, *pTmp;
 
	//MàJ de la liste
	if(elt->next != NULL){
		pTmp = create_point(elt->next->x, elt->next->y, elt->next->next);
		point = create_point(xx, yy, pTmp);
		point->next = pTmp;
		elt->next = point;
	}else{
		point = create_point(xx, yy, elt->next);
		elt->next = point;
	}
 
	return point;
}
et l'algo qui génère le flocon de koch (une iteration) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
Koch* developperKoch(Koch* this){
	//variables
	EPOINT *pointCourant, *pointSuivant, *pointMilieu, *pointTier1, *pointTier2, *pointEquilateral;
	int continuer;
 
	//declarations
	pointCourant = this->points;
	pointSuivant = pointCourant->next;
	continuer = 1;
 
	//parcourt des points du flocon
	while(continuer == 1){
		//mise en place point premier tier
		pointMilieu = milieu(pointCourant->x, pointCourant->y, pointSuivant->x, pointSuivant->y);
		pointTier1 = milieu(pointCourant->x, pointCourant->y, pointMilieu->x, pointMilieu->y);
		pointTier1 = insert_after(pointCourant, pointTier1->x, pointTier1->y);
 
 
		//mise en place point second tier
		pointTier2 = milieu(pointMilieu->x, pointMilieu->y, pointSuivant->x, pointSuivant->y);
		pointTier2 = insert_after(pointTier1, pointTier2->x, pointTier2->y);
 
		//mise en place point formation equilateral
		pointEquilateral = equilateral(pointTier1->x, pointTier1->y, pointTier2->x, pointTier2->y);
		pointEquilateral = insert_after(pointTier1, pointEquilateral->x, pointEquilateral->y);
		printf("pointCourant : %lf ; %f \n", pointCourant->x, pointCourant->y);
		printf("pointTier1 : %lf ; %f \n", pointTier1->x, pointTier1->y);
		printf("pointEQUILATERAL : %lf ; %f \n", pointEquilateral->x, pointEquilateral->y);
		printf("pointTier2 : %lf ; %f \n", pointTier2->x, pointTier2->y);
		printf("pointSuivant : %lf ; %f \n", pointSuivant->x, pointSuivant->y);
 
		//repositionnement sur le segment suivant
		if(pointSuivant->next == NULL){
			pointCourant = pointSuivant;
			pointSuivant = this->points;
			continuer=0;
		}else{
			printf("tttttggggggg\n");
			pointCourant = pointSuivant;
			pointSuivant = pointSuivant->next;
		}	
 
	}	
		printf("pointCourant : %lf ; %f \n", pointCourant->x, pointCourant->y);
		printf("pointTier1 : %lf ; %f \n", pointTier1->x, pointTier1->y);
		printf("pointEQUILATERAL : %lf ; %f \n", pointEquilateral->x, pointEquilateral->y);
		printf("pointTier2 : %lf ; %f \n", pointTier2->x, pointTier2->y);
		printf("pointSuivant : %lf ; %f \n", pointSuivant->x, pointSuivant->y);
	return this;
}
En fait, ça m'ajoute les bon points mais que sur le premier segment. Quand il passe au segment suivant, j'ai les bonnes coordonnées (avec printf()) mais ils ne s'insèrent pas dans la liste.
On dirait qu'il saute le "insert_after()" après le premier segment.


Merci d'avance