| Voir le sujet précédent :: Voir le sujet suivant |
| Auteur |
Message |
mohjer
Inscrit le: 10 Juin 2009 Messages: 56 Localisation: Tunis
|
Posté le: Dim Fév 05, 2012 6:25 pm Sujet du message: traçage d'une étoile à l'aide de carscript |
|
|
Bonjour,
Je souhaiterai tracer une étoile à 5 branches ou plus qui est remplie telle l'image pièce jointe ,
j'ai déniché un script mais qui laisse sous ma faim
j'ai fait plusieurs essais mais en vain,je débute en carscript;
Ci_après le script :
// nombre de branche de l'étoile
n=5;
// rayon de l'étoile initiale
R=9/10;
angle=360/n;
Point("O",0,0);
Point("A",R,0);SetPointType("A","circle");
SetHide("O",true);
FixedCircle("O",R);
// compteur de sommets, de centres et de segments
b=1;
c=1;
t=1;
// détermination des sommets de l'étoile initiale
for (i=1; i<2*n; i=i+1){
a=(i-1)*angle;
Point("A"+b,"(x(A)-x(O))*cos(_a)-(y(A)-y(O))*sin(_a)","(x(A)-x(O))*sin(_a)+(y(A)-y(O))*cos(_a)");
SetHide("A"+b,true);
b=b+1;
}
k=Math.floor(n/2)
// on trace l'étoile
for (i=1; i<n+1; i=i+1){
j=i+k+1;
s_t=Segment("A"+i,"A"+j);
SetRGBColor(s_t,100,(255/n)*i,230);
t=t+1;
} |
|
| Revenir en haut de page |
|
 |
jerome
Inscrit le: 06 Nov 2007 Messages: 173 Localisation: Saint-Brieuc
|
Posté le: Lun Fév 06, 2012 1:51 pm Sujet du message: |
|
|
Une piste : utiliser les polygones
| Code: |
// on trace l'étoile
//for (i=1; i<n+1; i=i+1){
//j=i+k+1;
//s_t=Segment("A"+i,"A"+j);
//SetRGBColor(s_t,100,(255/n)*i,230);
//t=t+1;
//}
Polygon("A1,A3,A5,A7,A2,A4,A6") |
|
|
| Revenir en haut de page |
|
 |
mohjer
Inscrit le: 10 Juin 2009 Messages: 56 Localisation: Tunis
|
Posté le: Mar Fév 07, 2012 3:49 pm Sujet du message: |
|
|
Bonjour Jerôme,
Après réflexion , j'ai trouvé un script qui me donne ce que je voulais;
le script est simple ;
je vous l'enverrai bientôt car je ne suis pas actuellement sur mon pc portable;mais je cherche à généraliser ce que j'ai trouvé et à améliorer le script;
En tous les cas, je te remercie pour ton idée que je suivrai certainement pour la généralisation du coeur de l'étoile et non de l'étoile. |
|
| Revenir en haut de page |
|
 |
mohjer
Inscrit le: 10 Juin 2009 Messages: 56 Localisation: Tunis
|
Posté le: Mer Fév 08, 2012 9:56 am Sujet du message: |
|
|
Bonjour,
voici le script qui me donne ce que j'appelle le coeur de l'étoile à 5 branches;
j'aimerai bien améliorer ce script qui me parait long et essayer de le généraliser à n branches:
le script:
a1=Point(9/10,0);
a2=Point(9/10*Math.cos(Math.PI*2/5),9/10*Math.sin(Math.PI*2/5));
a3=Point(9/10*Math.cos(Math.PI*4/5),9/10*Math.sin(Math.PI*4/5));
a4=Point(9/10*Math.cos(Math.PI*6/5),9/10*Math.sin(Math.PI*6/5));
a5=Point(9/10*Math.cos(Math.PI*8/5),9/10*Math.sin(Math.PI*8/5));
s1=Segment(a1,a3);
s2=Segment(a1,a4);
s3=Segment(a2,a5);
s4=Segment(a2,a4);
s5=Segment(a3,a5);
g1=Intersection(s1,s4);
g2=Intersection(s1,s3);
g3=Intersection(s2,s3);
g4=Intersection(s2,s5);
g5=Intersection(s5,s4);
Polygon("_a1,_g2,_a2,_g1,_a3,_g5,_a4,_g4,_a5,_g3");
SetHide(a1,true);
SetHide(a2,true);
SetHide(a3,true);
SetHide(a4,true);
SetHide(a5,true);
SetHide(g1,true);
SetHide(g2,true);
SetHide(g3,true);
SetHide(g4,true);
SetHide(g5,true); |
|
| Revenir en haut de page |
|
 |
monique31
Inscrit le: 03 Nov 2007 Messages: 297 Localisation: Toulouse
|
Posté le: Ven Fév 10, 2012 5:44 pm Sujet du message: |
|
|
Je viens d'essayer ceci :
- afin de pouvoir généraliser à d'autres valeurs de n, il me semble intéressant de travailler avec des tableaux à une dimension, c'est à dire des listes. Comme tu débutes en javascript je te conseille de lire sur le "Site du zéro" la page correspondante.
- j'ai gardé, comme sur le script que tu as récupéré, le Math.floor(n/2)+1 pour le choix du sommet suivant. Manifestement ça pose problème pour certaines valeurs paires de n : on n'a pas de permutation sur l'ensemble des sommets !!! Mes souvenirs sur les congruences, permutations etc sont un peu lointains. Bref, quelqu'un peut donner une meilleure solution ?
Attention ! ce script ne fonctionne qu'avec la 3.7.3 bêta ! (voir 2 posts plus loin ...)
| Code: |
var n=Input("Nombre de sommets ?");
var Indices = [];
var Points = [];
for (i=0; i<n; i=i+1){
ai=Point("A_i",Math.cos(2*(Math.PI)*i/n),Math.sin(2*(Math.PI)*i/n));SetHide("A_i",true);
}
k=Math.floor(n/2)+1;
for (j=0; j<n; j=j+1){
Indices[j]=(j*k)%n;
Points[j]="A"+Indices[j];
}
Println(Indices);
Println(Points);
var poly=Points.join(",");//remplace la liste des points Ai par une unique chaîne de caractères en les séparant par une virgule
Etoile=Polygon(poly);
SetThickness(Etoile,"normal"); |
Même si ce script ne fonctionne pas à tous les coups, je l'ai quand même mis en ligne, puisque comme moi tu débutes en javascript et programmation : que tu voies un peu comment fonctionnent les tableaux 
Dernière édition par monique31 le Dim Fév 12, 2012 2:56 pm; édité 1 fois |
|
| Revenir en haut de page |
|
 |
monique31
Inscrit le: 03 Nov 2007 Messages: 297 Localisation: Toulouse
|
Posté le: Sam Fév 11, 2012 6:01 pm Sujet du message: |
|
|
Le code précédent ne fonctionne pas si : n%4==2;
Dans ce cas, il faut tracer deux polygones, et c'est le script c-dessous qu'on utilisera ...
| Code: |
var n=Input("Nombre de sommets ?");
var FirstIndices = [];
var SecondIndices =[];
var FirstPoints = [];
var SecondPoints = [];
for (i=0; i<n; i=i+1){
ai=Point("A_i",Math.cos(2*(Math.PI)*i/n),Math.sin(2*(Math.PI)*i/n));SetHide("A_i",true);
}
p=n/2+1;
for (j=0; j<n/2; j=j+1){
FirstIndices[j]=(j*p)%n;
FirstPoints[j]="A"+FirstIndices[j];
SecondIndices[j]=(j*p)%n+1;
SecondPoints[j]="A"+SecondIndices[j];
}
Println(FirstIndices);Println(SecondIndices);
var Firstpoly=FirstPoints.join(",");
var Secondpoly=SecondPoints.join(",");
FirstEtoile=Polygon(Firstpoly);
SecondEtoile=Polygon(Secondpoly);
SetThickness(FirstEtoile,SecondEtoile,"normal");
|
|
|
| Revenir en haut de page |
|
 |
monique31
Inscrit le: 03 Nov 2007 Messages: 297 Localisation: Toulouse
|
Posté le: Dim Fév 12, 2012 10:50 am Sujet du message: |
|
|
Désolée pour ceux qui auraient essayé mes scripts ! Ils ne fonctionnent pas vraiment. Parce que j'ai utilisé la version 3.7.3 béta qui permet par exemple Point("A_i", ...). Avec la 3.7.2 on est obligé d'utiliser Point("A"+i, ...). Ce code devrait fonctionner avec la version officielle (faire la même modif pour le second code) :
| Code: |
var n=Input("Nombre de sommets ?");
var Indices = [];
var Points = [];
for (i=0; i<n; i=i+1){
ai=Point("A"+i,Math.cos(2*(Math.PI)*i/n),Math.sin(2*(Math.PI)*i/n));SetHide("A"+i,true);
}
k=Math.floor(n/2)+1;
for (j=0; j<n; j=j+1){
Indices[j]=(j*k)%n;
Points[j]="A"+Indices[j];
}
Println(Indices);
Println(Points);
var poly=Points.join(",");//remplace la liste des points Ai par une unique chaîne de caractères en les séparant par une virgule
Etoile=Polygon(poly);
SetThickness(Etoile,"normal");
|
|
|
| Revenir en haut de page |
|
 |
mohjer
Inscrit le: 10 Juin 2009 Messages: 56 Localisation: Tunis
|
Posté le: Mer Fév 15, 2012 7:04 pm Sujet du message: |
|
|
| Merci Monique pour tes essais et tes conseils;je suis entrain de creuser tout ça malgré certaines difficultés. |
|
| Revenir en haut de page |
|
 |
|
|
Vous ne pouvez pas poster de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas voter dans les sondages de ce forum You cannot attach files in this forum You cannot download files in this forum
|
|