CaRMetal-FR

Forum des utilisateurs francophones
login.php?sid=238bd35eee62817616e55e5d5a0aeb87 profile.php?mode=register&sid=238bd35eee62817616e55e5d5a0aeb87 faq.php?sid=238bd35eee62817616e55e5d5a0aeb87 memberlist.php?sid=238bd35eee62817616e55e5d5a0aeb87 search.php?sid=238bd35eee62817616e55e5d5a0aeb87 index.php?sid=238bd35eee62817616e55e5d5a0aeb87

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

 
Poster un nouveau sujet   Répondre au sujet    CaRMetal-FR Index du Forum -> Les CaRScripts
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
mohjer



Inscrit le: 10 Juin 2009
Messages: 56
Localisation: Tunis

MessagePosté le: Dim Fév 05, 2012 6:25 pm    Sujet du message: traçage d'une étoile à l'aide de carscript Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé Envoyer un e-mail Visiter le site web de l'utilisateur
jerome



Inscrit le: 06 Nov 2007
Messages: 173
Localisation: Saint-Brieuc

MessagePosté le: Lun Fév 06, 2012 1:51 pm    Sujet du message: Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé
mohjer



Inscrit le: 10 Juin 2009
Messages: 56
Localisation: Tunis

MessagePosté le: Mar Fév 07, 2012 3:49 pm    Sujet du message: Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé Envoyer un e-mail Visiter le site web de l'utilisateur
mohjer



Inscrit le: 10 Juin 2009
Messages: 56
Localisation: Tunis

MessagePosté le: Mer Fév 08, 2012 9:56 am    Sujet du message: Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé Envoyer un e-mail Visiter le site web de l'utilisateur
monique31



Inscrit le: 03 Nov 2007
Messages: 297
Localisation: Toulouse

MessagePosté le: Ven Fév 10, 2012 5:44 pm    Sujet du message: Répondre en citant

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


Dernière édition par monique31 le Dim Fév 12, 2012 2:56 pm; édité 1 fois
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Envoyer un e-mail
monique31



Inscrit le: 03 Nov 2007
Messages: 297
Localisation: Toulouse

MessagePosté le: Sam Fév 11, 2012 6:01 pm    Sujet du message: Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé Envoyer un e-mail
monique31



Inscrit le: 03 Nov 2007
Messages: 297
Localisation: Toulouse

MessagePosté le: Dim Fév 12, 2012 10:50 am    Sujet du message: Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé Envoyer un e-mail
mohjer



Inscrit le: 10 Juin 2009
Messages: 56
Localisation: Tunis

MessagePosté le: Mer Fév 15, 2012 7:04 pm    Sujet du message: Répondre en citant

Merci Monique pour tes essais et tes conseils;je suis entrain de creuser tout ça malgré certaines difficultés.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Envoyer un e-mail Visiter le site web de l'utilisateur
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    CaRMetal-FR Index du Forum -> Les CaRScripts Toutes les heures sont au format GMT
Page 1 sur 1

 
  
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


Powered by phpBB © 2001-2004 phpBB Group
phpBB Style by Vjacheslav Trushkin
Traduction par : phpBB-fr.com