Création d'une grille de rectangles à l'aide d'une boucle ForSalut,
J'essaie de créer un tableau de rectangles 24x2 dans une nouvelle fenêtre. Je peux les créer manuellement en utilisant les commandes JSL pour la boîte graphique, mais je sais que cela peut être fait en utilisant une boucle for, ce qui serait beaucoup plus rapide. Il me suffit pour le moment que les rectangles aient deux dimensions et voici le code que je tentais de mettre en œuvre:
y1 = 5;
y2 = 10;
win = New Window("Spine",
gb = Graph Box(
Frame Size(1000,1000),
)
);
For(i = 0, i<24, i++,
Rect(5,y1,10,y2);
y1 = y2+1;
y2 = y1+5;
gb<<reshow;
);mais cela ne semble pas fonctionner ni me jeter d'erreurs. Merci pour toute aide.
Re: Création d'une grille de rectangles à l'aide d'une boucle ForDans mon exemple, je voulais que le nombre de points soit toujours le même, mais les erreurs d'arrondi en virgule flottante rendent ce code
for(y=y0,y<=y1,y+=(y1-y0)/16
parfois générer 16 vs 17 étapes. Une meilleure façon d'écrire ceci ressemblerait à ceci:
nsteps = 16;
for( iy = 0, iy <= nsteps, iy += 1,
y = y0 + iy * (y1 - y0) / nsteps;
vous pouvez facilement modifier cette boucle pour laisser de côté les points d’angle plutôt que de les dupliquer (les dupliquer?) ... pour (iy = 1, iy Re: Création d'une grille de rectangles à l'aide d'une boucle For
Cool
Re: Création d'une grille de rectangles à l'aide d'une boucle ForVoici un moyen de créer des cubes 3D, sans apprendre OpenGL, si vous n'en avez pas besoin de trop. Il trace vraiment les contours avec des points, de sorte que le nombre de points peut rapidement devenir incontrôlable et trop lent. Cet exemple utilise 12K points et fonctionne toujours bien.
Matrice 3D de cubes
// make cube outlines using scatter plot points
dt = New Table( "cubes", New Column( "xx" ), New Column( "yy" ), New Column( "zz" ) );
make cube = function({dt,x0,x1,y0,y1,z0,z1},{x,y,z},
if(x1<X0></X0>Re: Création d'une grille de rectangles à l'aide d'une boucle ForJe ne suis pas familiarisé avec l'accès OpenGL de JMP, je ne peux donc pas répondre à votre question sur la quantité d'environnement graphique disponible.
En ce qui concerne votre autre problème, je vous indiquerai les exemples de scripts distribués avec JMP, qui vous montreront comment utiliser une scène 3D ouvre tout un monde de fonctionnalités 3D. En particulier, je vous indiquerai les scripts MatrixRotation et PatchEditor, dans lesquels le code comporte des boucles de rétroaction pour détecter ce qui a été dessiné et permettre la manipulation de ces objets.
Pour accéder aux échantillons, allez simplement à
Aide ==> Exemple de données
puis dans la fenêtre qui s’ouvre, sélectionnez ensuite "Ouvrir le répertoire des exemples de scripts".
Re: Création d'une grille de rectangles à l'aide d'une boucle ForMerci! marche parfaitement. existe-t-il un moyen de récupérer les points utilisés pour créer les rectangles sous forme de matrice? Existe-t-il un moyen simple d'étendre cette idée à 3 dimensions en utilisant la mise en œuvre OpenGL de JSL?
Re: Création d'une grille de rectangles à l'aide d'une boucle ForLa zone de graphique () est dynamique et, lorsqu'elle est associée à votre code, chaque fois que vous essayez d'actualiser l'écran, la taille de vos valeurs y augmente. Voir le code ci-dessous pour trouver une solution au problème.
Names Default To Here( 1 );
win = New Window( "Spine",
gb = Graph Box(
Frame Size( 1000, 1000 ),
Y Scale( 0, 500 ),
X Scale( 0, 500 ),
For( i = 1, i < 25, i++,
If( i == 1,
y1 = 5;
y2 = 0;
);
Rect( 45, y1, 50, y2 );
Rect( 50, y1, 55, y2 );
y2 = y1 + 1;
y1 = y1 + 6;
)
)
);Re: Création d'une grille de rectangles à l'aide d'une boucle ForMerci! Jusqu'ici j'ai ceci, qui fonctionne un peu, mais place les rectangles à la position y ~ 125 au lieu de y = 5 et y = 0. Des idées quant à pourquoi cela peut être?
Names Default to Here(1);
y1 = 5;
y2 = 0;
win = New Window("Spine",
gb = Graph Box(
Frame Size(1000,1000),
Y Scale(0,500),
X Scale(0,500),
For(i=1,i<25,i++,
Rect(45,y1,50,y2);
Rect(50,y1,55,y2);
y2 = y1+1;
y1 = y1+6;
);
)
);Re: Création d'une grille de rectangles à l'aide d'une boucle ForIl y a quelques problèmes.
1. Les "rect" dans votre code sont en dehors de la zone de graphique () et ne savent donc pas où appliquer le rectangle.
2 Les spécifications de vos axes X et Y vont en dehors de la plage de la boîte graphique ().
Voici un code de démarrage qui devrait vous aider à démarrer
Names Default To Here( 1 );
y1 = 5;
y2 = 10;
win = New Window( "Spine",
gb = Graph Box(
Frame Size( 1000, 1000 ),
For( i = 0, i < 5, i++,
Rect( 5,y1, 10,y2);
y1 = y2 + 1;
y2 = y1 + 5;
);
)
);