FAQ
-
Question Roubis -Pizzol ? Comment faire tourner des sphères ou des cubes autour d'un de leurs axes de symétrie?
float rx = 0;
float ry = 0;
float z = 100;
void setup() {
size(800,700,P3D);
}void draw() {
background(128);
rx = map(mouseX, 0,width,-PI,PI);
ry = map(mouseY, 0,height,-PI,PI);
pushMatrix();
translate(width/2,height/2,z);
rotateX(rx);
rotateY(ry);
box(90);
fill(#CB5917);
sphere(60);
popMatrix();
pushMatrix();
translate(100,100);
rotateX(rx);
rotateY(ry);fill(#CB5917);
sphere(60);
popMatrix();
pushMatrix();
translate(700,100);
rotateX(rx);
rotateY(ry);fill(#CB5917);
sphere(60);
popMatrix();
pushMatrix();
translate(100,600);
rotateX(rx);
rotateY(ry);fill(#CB5917);
sphere(60);
popMatrix();
pushMatrix();
translate(700,600);
rotateX(rx);
rotateY(ry);fill(#CB5917);
sphere(60);
popMatrix();
} -
Comment afficher un chronomètre ou un horloge?
avec les méthodes second(); minute(); hour();Exemple Processing :
/**
* Clock.
*
* The current time can be read with the second(), minute(),
* and hour() functions. In this example, sin() and cos() values
* are used to set the position of the hands.
*/int cx, cy;
float secondsRadius;
float minutesRadius;
float hoursRadius;
float clockDiameter;void setup() {
size(640, 360);
stroke(255);
int radius = min(width, height) / 2;
secondsRadius = radius * 0.72;
minutesRadius = radius * 0.60;
hoursRadius = radius * 0.50;
clockDiameter = radius * 1.8;
cx = width / 2;
cy = height / 2;
}void draw() {
background(0);
// Draw the clock background
fill(80);
noStroke();
ellipse(cx, cy, clockDiameter, clockDiameter);
// Angles for sin() and cos() start at 3 o'clock;
// subtract HALF_PI to make them start at the top
float s = map(second(), 0, 60, 0, TWO_PI) - HALF_PI;
float m = map(minute() + norm(second(), 0, 60), 0, 60, 0, TWO_PI) - HALF_PI;
float h = map(hour() + norm(minute(), 0, 60), 0, 24, 0, TWO_PI * 2) - HALF_PI;
// Draw the hands of the clock
stroke(255);
strokeWeight(1);
line(cx, cy, cx + cos(s) * secondsRadius, cy + sin(s) * secondsRadius);
strokeWeight(2);
line(cx, cy, cx + cos(m) * minutesRadius, cy + sin(m) * minutesRadius);
strokeWeight(4);
line(cx, cy, cx + cos(h) * hoursRadius, cy + sin(h) * hoursRadius);
// Draw the minute ticks
strokeWeight(2);
beginShape(POINTS);
for (int a = 0; a < 360; a+=6) {
float angle = radians(a);
float x = cx + cos(angle) * secondsRadius;
float y = cy + sin(angle) * secondsRadius;
vertex(x, y);
}
endShape();
} -
Gaëlle et Fanny :Comment utiliser la bibliothèque ReadBox?
Il faut importer d'abord la bibliothèque :import readBox.*;Elle doit pour cela être présente dans le sketchbook.
Dans le menu sketch, import library , on doit trouver ReadBox.
Si ce n'est pas le cas, le dossier sketchbook n'est pas le bon, ou n'est pas complet.Pour vérifier que le sketchbook est le bon: Fichier , préférences, sketchbook, qui doit être sur le drive T au lycée. Vous devez copier ce sketchbook complet pour travailler chez vous.
Exemple de sketch (fonctionne avec deux images)
import readBox.*;
PImage img; // Declare variable "a" of type PImage
PImage img1;
int x = 40;
int y = 420;
int score = 0;
String enigme;
void setup() {
img = loadImage("character.jpg");
img1 = loadImage("labyrinthe.png");
size(img1.width, img1.height);
textSize(20);
enigme=new Dialog().readString("Je suis invisible, mais tu peux m'entendre. Tu peux me prononcer mais si tu me répètes je disparaîtrai. Qui suis-je ?");
//Première partie
/* size(640, 360);
img = loadImage("campagne.jpg"); // Load the image into the program
image(img, 0, 0, img.width/2, img.height/2);
loadPixels();
for(int i=0; i<230300;i=i+1){
pixels[i]=color(#F50C2B);}
updatePixels();*/
}
void draw() {
image(img1, 0, 0);
bougerPerso();
image(img, x, y, 80, 100);
if (y == 4 && x>100) {
}
if (y == 4 && x>100) {
fill (#057416);
textSize(48);
text("Porte ouverte", 80, 200);
}
text(" "+enigme+" ", 50, 100);
fill (#057416);
}
void bougerPerso() {
if (keyPressed) {
if (key == CODED) {
if (keyCode == UP) {
if (red(get(x, y-5))==0) {
y=y;
}
else {
y = y-1;
}
}
}
}
if (keyPressed) {
if (key == CODED) {
if (keyCode == LEFT) {
if (red(get(x-5, y))==0) {
x=x;
}
else {
x = x-1;
}
}
}
}
if (keyPressed) {
if (key == CODED) {
if (keyCode == RIGHT) {
if (red(get(x+45, y))==0) {
x=x;
}
else {
x = x+1;
}
}
}
}
if (keyPressed) {
if (key == CODED) {
if (keyCode == DOWN) {
if (red(get(x, y+45))==0) {
y=y;
}
else {
y = y+1;
}
}
}
}
}
-
Comment insérer de la musique dans le sketch?
Grâce à la bibliothèque Audio minim (voir les exemples de processing, Contributed Libraries.)
/**
* This sketch demonstrates how to use an FFT to analyze
* the audio being generated by an AudioPlayer.
* <p>
* FFT stands for Fast Fourier Transform, which is a
* method of analyzing audio that allows you to visualize
* the frequency content of a signal. You've seen
* visualizations like this before in music players
* and car stereos.
* <p>
* For more information about Minim and additional features,
* visit https://code.compartmental.net/minim/
*/
import ddf.minim.analysis.*;
import ddf.minim.*;
Minim minim;
AudioPlayer jingle;
FFT fft;
void setup()
{
size(512, 200, P3D);
minim = new Minim(this);
// specify that we want the audio buffers of the AudioPlayer
// to be 1024 samples long because our FFT needs to have
// a power-of-two buffer size and this is a good size.
jingle = minim.loadFile("jingle.mp3", 1024);
// loop the file indefinitely
jingle.loop();
// create an FFT object that has a time-domain buffer
// the same size as jingle's sample buffer
// note that this needs to be a power of two
// and that it means the size of the spectrum will be half as large.
fft = new FFT( jingle.bufferSize(), jingle.sampleRate() );
}
void draw()
{
background(0);
stroke(255);
// perform a forward FFT on the samples in jingle's mix buffer,
// which contains the mix of both the left and right channels of the file
fft.forward( jingle.mix );
for(int i = 0; i < fft.specSize(); i++)
{
// draw the line for frequency band i, scaling it up a bit so we can see it
line( i, height, i, height - fft.getBand(i)*8 );
}
} -
Matthieu, Samson : Nous voulons :
Que 3 rangées de 10 balles apparaissent au début entre x = 0 et x = 500, chaque balle faisant 50 de diamètre
void setup() {
size(600,600);
background(0);
for (int j = 375; j < 525; j=j+50) {
for (int i = 30; i < 530; i=i+50) {
ellipse(i,j,50,50);
}
}
}
void draw() {
} -
Comment comparer deux chaînes de caractères?
Pour pouvoir comparer correctement les chaînes de caractères vous pouvez utiliser String.equals():
Voici un exemple d'utilisation:
String enigme1 = "secret";
String enigme2 = "faux";
String secret = "secret";
void setup() {
if(enigme1.equals(secret)){println( "chaînes de caractères identiques");}
else{println( "chaînes de caractères différentes");}
if(enigme2.equals(secret)){println( "chaînes de caractères identiques");}
else{println( "chaînes de caractères différentes");}
}
void draw() {
}Résultat: chaînes de caractères identiques
chaînes de caractères différentes -
Ouvrir une nouvelle fenêtre
Branchez une Webcam sur votre ordinateur et essayez ce programme qui permet de prendre des photos et de les traiter automatiquement. Vous trouverez les outils pour ouvrir une nouvelle fenêtre Mettre l'image radarfeurouge dans le dossier data
.
import javax.swing.JFrame;
//import java.awt.FileDialog;
import javax.swing.SwingUtilities;
import java.awt.BorderLayout ;
import ddf.minim.spi.*;
import ddf.minim.signals.*;
import ddf.minim.*;
import ddf.minim.analysis.*;
import ddf.minim.ugens.*;
import ddf.minim.effects.*;
import processing.video.*;
//Ensuite nous allons déclarer une variable qui stockera
//notre objet Camera.
Capture camera;
Minim minim;
//nous devons créer un objet source sonore in
//qui permettra d'accéder au son capté par le microphone.
AudioInput in;
int inversion= 0;
PImage img;
int numeroimage=1;
int date=0;
int olddate=0;
int feu=0;
int datefeu=0;
int olddatefeu=0;
//PImage img;
PImage img1; // Declare variable of type PImage
PImage img2;
PImage img3;
JFrame new_window;
MApplet imageviewer;
// the size the outer-frame takes (in windows 7.. not sure about other os)
//int frameWidth = 16;
//int frameHeight = 38;
void setup(){
background(270);
size(350, 310);
smooth();
frameRate(30);
String[] devices = Capture.list();
println(devices);
colorMode(RGB, 255, 255, 255, 100);
//camera = new Capture(this, 320, 240, devices[0]);
camera = new Capture(this, 320, 240);
camera.start();
minim = new Minim(this);
//in = minim.getLineIn(Minim.STEREO, 512);
in = minim.getLineIn(Minim.MONO, 4096*8, 44100);
background(0);
stroke(255);}
void keyPressed() {
if(feu==1){
if (key == 'r' && date>olddate+1000) {
// saveFrame("output/frames####.png");
if (numeroimage == 1){
//saveFrame("output/frames####.png");
saveFrame("data/frames0017.png");
olddate=millis();
numeroimage=2;}
else{saveFrame("data/frames0018.png");
numeroimage=1;
olddate=millis();
loadNewImage();
}
//img = loadImage("frames0017.png");
//image(img,350,-100);
}}
if (key == 'i' || key == 'I') {
if (inversion == 1){inversion= 0;} else
{inversion=1;}
}
}
void stop() {
in.close();
minim.stop();
super.stop();
}
void draw(){
//line(random(width),random(height),random(width),random(height));
datefeu = millis();
if (datefeu > olddatefeu + 10000){
if (datefeu > olddatefeu + 20000){olddatefeu = datefeu;}
feu=1;}
else {feu=0;}
if (camera.available()) {
camera.read();
if (inversion == 1){
camera.filter(INVERT);
}
else {camera.filter(OPAQUE);
}
image(camera, 10, 60);
// If we are recording call saveFrame!
// The number signs (#) indicate to Processing to
// number the files automatically
if (feu==1){
fill(255,0,0,251);}
else{fill(0,255,0,251);}
ellipse (300,20,20,20);
text("Press r to start recording.",10, 10);
text("Press i to invert the image.",10,30);
text("Niveau d'entrée x10000 = ", 100,280);
text(10000*in.mix.level(), 250, 280);
date= millis();
println (date);
println(olddate);
if (feu ==1){
if (10000*in.mix.level()>1000 && date>olddate+1000) {
if (numeroimage == 1){
//saveFrame("output/frames####.png");
saveFrame("data/frames0017.png");
olddate=millis();
numeroimage=2;}
else{saveFrame("data/frames0018.png");
numeroimage=1;
olddate=millis();
loadNewImage();
}
}
}}
}
//void mousePressed(){ loadNewImage();}
// I chose to just make my own filter-function, because of the bug on windowsmachines
//with FileDialog and FilenameFilter // see https://developer.java.sun.com/developer/bugParade/bugs/4031440.html
//for more info// should use JFileChooser
//public boolean isImage(String name) {
//return (name.endsWith(".jpg") ||
//name.endsWith(".png") ||
//name.endsWith(".gif") ||
//name.endsWith(".jpeg"));}
void loadNewImage(){
// pick image to display in a new window
//FileDialog fd = new FileDialog(this.frame,"Open image",FileDialog.LOAD);
//fd.setLocation(50, 50);
//fd.show();
//String dir = fd.getDirectory();
//String file = fd.getFile();
//fd.dispose();
//if( dir != null && file != null && isImage(file))
{
// load image
//img = loadImage(dir+file);
img1 = loadImage("frames0017.png");
img2 = loadImage("frames0018.png");
img3= loadImage ("radarfeurouge.png");
// open the window / change the content
if(new_window == null){ new_window = new JFrame("Red light camera");
// create the image viewer applet
imageviewer = new MApplet();
// add the image viewer applet
new_window.getContentPane().add(imageviewer, BorderLayout.CENTER);
// set it to not be resizable //new_window.setResizable(false); // show it
new_window.setLocation( 690,0);
new_window.setVisible(true);
// init
imageviewer.init(); }
// size it
//new_window.setSize(img.width + frameWidth, img.height + frameHeight);
new_window.setSize(680, 580);
}}
public class MApplet extends PApplet{
public void setup() {
//size(680, 580);
background(0);
//background(255);
}
public void draw() {
image(img1, 0, -35);
image(img2, 340,-35);
image(img3,180,300);
fill(255,255,255,251);
text("Red light Camera", 280, 290);
//image(img,0,0);
}} -
Faire apparaître une boite de dialogue avec JOptionPane
import javax.swing.JOptionPane;
/**Affiche une boite de dialogue
message: Information demandée à l'utilisateur
*/
void setup(){
readString("voilà comment utiliser JOptionPane");
}
String readString(String message){
//Déclare une boite de dialogue
JOptionPane jop1 = new JOptionPane();
//On récupère le texte de l'utilisateur
return jop1.showInputDialog(
null,
message,
"Boite de dialogue",
JOptionPane.QUESTION_MESSAGE);
}
float readFloat(String message){
//Déclare une boite de dialogue
JOptionPane jop1 = new JOptionPane();
//On récupère le texte de l'utilisateur
String texte=jop1.showInputDialog(
null,
message,
"Boite de dialogue",
JOptionPane.QUESTION_MESSAGE);
float f=new Float(texte);
return f;
}