login.php?sid=036963045fe97e5316aaa5a5da5468b1 profile.php?mode=register&sid=036963045fe97e5316aaa5a5da5468b1 faq.php?sid=036963045fe97e5316aaa5a5da5468b1 memberlist.php?sid=036963045fe97e5316aaa5a5da5468b1 search.php?sid=036963045fe97e5316aaa5a5da5468b1 index.php?sid=036963045fe97e5316aaa5a5da5468b1

traçage d'une étoile à l'aide de carscript

 
Post new topic   Reply to topic     Forum Index -> Les CaRScripts
View previous topic :: View next topic  
Author Message
mohjer



Joined: 10 Jun 2009
Posts: 58
Location: Tunis

PostPosted: Sun Feb 05, 2012 6:25 pm    Post subject: traçage d'une étoile à l'aide de carscript Reply with quote

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;
}
Back to top
View user's profile Send private message Send e-mail Visit poster's website
jerome



Joined: 06 Nov 2007
Posts: 173
Location: Saint-Brieuc

PostPosted: Mon Feb 06, 2012 1:51 pm    Post subject: Reply with quote

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")
Back to top
View user's profile Send private message
mohjer



Joined: 10 Jun 2009
Posts: 58
Location: Tunis

PostPosted: Tue Feb 07, 2012 3:49 pm    Post subject: Reply with quote

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.
Back to top
View user's profile Send private message Send e-mail Visit poster's website
mohjer



Joined: 10 Jun 2009
Posts: 58
Location: Tunis

PostPosted: Wed Feb 08, 2012 9:56 am    Post subject: Reply with quote

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);
Back to top
View user's profile Send private message Send e-mail Visit poster's website
monique31



Joined: 03 Nov 2007
Posts: 306
Location: Toulouse

PostPosted: Fri Feb 10, 2012 5:44 pm    Post subject: Reply with quote

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 Wink


Last edited by monique31 on Sun Feb 12, 2012 2:56 pm; edited 1 time in total
Back to top
View user's profile Send private message Send e-mail
monique31



Joined: 03 Nov 2007
Posts: 306
Location: Toulouse

PostPosted: Sat Feb 11, 2012 6:01 pm    Post subject: Reply with quote

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");
Back to top
View user's profile Send private message Send e-mail
monique31



Joined: 03 Nov 2007
Posts: 306
Location: Toulouse

PostPosted: Sun Feb 12, 2012 10:50 am    Post subject: Reply with quote

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");
Back to top
View user's profile Send private message Send e-mail
mohjer



Joined: 10 Jun 2009
Posts: 58
Location: Tunis

PostPosted: Wed Feb 15, 2012 7:04 pm    Post subject: Reply with quote

Merci Monique pour tes essais et tes conseils;je suis entrain de creuser tout ça malgré certaines difficultés.
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Display posts from previous:   
Post new topic   Reply to topic     Forum Index -> Les CaRScripts All times are GMT
Page 1 of 1

 
  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You cannot download files in this forum


Powered by phpBB © 2001-2004 phpBB Group
phpBB Style by Vjacheslav Trushkin