Salut a tous!
Je me sens toujours newbie... Je suis en train de faire une démo' pour un logiciel d'holographie (yramide et tout).
Sauf que "The constructor is undefined"
Or le logiciel (ou certes il y a caremment du java), marche très bien de cette manière...
Je vous mes le machin, j'essais de le faire marcher la, mais ça ne VEUT PAS >_<
La moindre solution m'intéresse, merci a vous pour votre temps
voici le code:
//ControlP5 cp5; //ControlWindow controlWindow; public int PersX = 100; public int PersY = 100; public float Zoom = 1.00; int num = 150; float RADIUS = 550; float SCALE = 450.0; float cameraZ= (height/2.0) / tan(PI*60.0/360.0); int globKonexID = 0; Neuron n[]; void setup() { size(displayHeight, displayHeight, P3D); background(0); n = new Neuron[4]; n[0] = new Neuron(this, width/4, 0, width/2, height/2); n[1] = new Neuron(this, width/2, width/4, width/2, height/2); n[2] = new Neuron(this, width/4, height/2, width/2, height/2); n[3] = new Neuron(this, 0, height/4, width/2, height/2); // Set views // VIEW ROTATION WARNING n[0].setRotation( 270, 0, 0); n[1].setRotation( 270, 90, 0); // NICKEL A TESTER sur installation (toutes) n[2].setRotation( 90, 180, 0); n[3].setRotation( 90, 90, 0); n = new Neuron[num]; for (int i = 0;i<n.length;i++) { n[i] = new Neuron(i); } for (int i = 0;i<n.length;i++) { n[i].makeConnections(); } noSmooth(); stroke(1.0); for (int i = 0;i<n[0].k.length;i++) { n[0].makeSignal(i); } for (int i=0;i<n.length;i++) { n[i].draw(); } } void draw() { float time = millis()*0.001; background(0); camera( 2550, -1850, 100, 0, 0, 0, 0, 10, 0 ); // Cammera ///PERSPECTIVE float fov = PI/4.0; float cameraZ = (height/2.0) / tan(fov/2.0); perspective(fov*Zoom, float(width*PersX)/float(height*PersY), cameraZ/100.0, cameraZ*100.0); //// rotate (time*.2, time*.3, -time*.1, time*.4); //ROTATION DU TOUT for (int i = 0;i<n.length;i++) { n[i].draw(); } }
ET la classe NEURON:
class Neuron { float x, y, z, radius, xx, yy, zz, val; int id; boolean imobile = false; Konexe k[] = new Konexe[0]; Signal sig[] = new Signal[0]; Neuron(int _id) { xx = x = random(-width/2, width/2); yy = y = random(-width/2, width/2); zz = z = random(-width/2, width/2); id= _id; radius = RADIUS; val = 0; if (id==1)imobile = true; } void makeConnections() { k = new Konexe[0]; sig = new Signal[0]; for (int i = 0 ;i<n.length;i++) { if (i!=id && dist(x, y, z, n[i].x, n[i].y, n[i].z) < radius) { k = (Konexe[])expand(k, k.length+1); k[k.length-1] = new Konexe(id, i); sig = (Signal[])expand(sig, sig.length+1); sig[sig.length-1] = new Signal(k[sig.length-1]); } } } void makeSignal(int which) { int i = which; sig[i].x = xx; sig[i].y = yy; sig[i].z = zz; sig[i].running = true; } void drawConnections() { for (int i = 0 ;i<k.length;i++) { line(xx, yy, zz, n[k[i].B].xx, n[k[i].B].yy, n[k[i].B].zz); } } void draw() { xx += (x-xx) / 100.0; yy += (y-yy) / 100.0; zz += (z-zz) / 100.0; if (sig.length>0) { for (int i = 0;i<sig.length;i+=1) { if (sig[i].running) { if (sig[i].moving) { pushMatrix(); pushStyle(); strokeWeight(0); stroke(255, 20); fill(random(100, 255), 255, 255); // COULEUR BOITES //line(sig[i].x,sig[i].y,sig[i].z,sig[i].lx,sig[i].ly,sig[i].lz); translate(sig[i].x, sig[i].y, sig[i].z); box(10); popStyle(); popMatrix(); } sig[i].step(); } } } stroke(lerpColor(#3300FF, #33CCFF, norm(val, 10, 200)), 50); // Couleurs traits drawConnections(); strokeWeight(5); //Epaisseur de traits } } ////////////////////////// >> class Konexe { int A, B, id; float weight = 1.5; Konexe(int _A, int _B) { A = _A; B = _B; id = globKonexID++; weight = random(50, 100)/SCALE; } } class Signal { Konexe base; int cyc = 0; float x, y, z, lx, ly, lz; float speed = 10.1; boolean running = false; boolean visible = true; boolean moving = false; int deadnum = 2000; int deadcount = 0; Signal(Konexe _base) { base = _base; lx = x = n[base.A].x; ly = y = n[base.A].y; lz = z = n[base.A].z; speed *= base.weight; } void step() { running = true; if (abs(lx-x)>.1||abs(ly-y)>.1||abs(lz-z)>.1) moving = true; else moving = false; lx = x; ly = y; lz = z; if (!n[base.A].imobile) { x += (n[base.B].xx-x) / speed*0.5;//(speed+(dist(n[base.A].x,n[base.A].y,n[base.B].x,n[base.B].y)+1)/100.0); y += (n[base.B].yy-y) / speed*0.5;//(speed+(dist(n[base.A].x,n[base.A].y,n[base.B].x,n[base.B].y)+1)/100.0); z += (n[base.B].zz-z) / speed*0.5; } n[base.A].val+=(0-n[base.A].val)/5000.0; if (dist(x, y, z, n[base.B].xx, n[base.B].yy, n[base.B].zz)<1.0) { if (deadcount<500000) { deadcount = deadnum; //deadnum += (int)random(-1,1); //println("run "+base.A+" : "+base.B); running = false; for (int i = 0; i < n[base.B].k.length;i++) { if (!n[base.B].sig[i].running && base.A!=n[base.B].sig[i].base.B) { n[base.B].makeSignal(i); n[base.B].sig[i].base.weight += (base.weight-n[base.B].sig[i].base.weight)/((dist(x, y, z, n[base.A].xx, n[base.A].yy, n[base.A].zz)+1.0)/200.0); } } //base.weight = random(1001,3000) / 1000.0; if (n[base.A].id!=1) { n[base.A].xx+=((n[base.B].x-n[base.A].x)/1.1)*noise((frameCount+n[base.A].id)/18.0); ; n[base.A].yy+=((n[base.B].y-n[base.A].y)/1.1)*noise((frameCount+n[base.A].id)/17.0); n[base.A].zz+=((n[base.B].z-n[base.A].z)/1.1)*noise((frameCount+n[base.A].id)/16.0); n[base.A].xx-=((n[base.B].x-n[base.A].x)/1.1)*noise((frameCount+n[base.B].id)/18.2); ; n[base.A].yy-=((n[base.B].y-n[base.A].y)/1.1)*noise((frameCount+n[base.B].id)/17.2); n[base.A].zz-=((n[base.B].z-n[base.A].z)/1.1)*noise((frameCount+n[base.B].id)/16.2); } lx = n[base.A].x; ly = n[base.A].y; lz = n[base.A].z; n[base.A].val+=(255-n[base.A].val)/10.0; } else { println("deadcount--"); } }}}
Hors ligne
Salut,
Pourquoi tu définis deux fois à la suite le nombre d'objets dans ton array n dans le setup :
n = new Neuron[4]; n[0] = new Neuron(this, width/4, 0, width/2, height/2); n[1] = new Neuron(this, width/2, width/4, width/2, height/2); n[2] = new Neuron(this, width/4, height/2, width/2, height/2); n[3] = new Neuron(this, 0, height/4, width/2, height/2); n = new Neuron[num]; for (int i = 0;i<n.length;i++) { n[i] = new Neuron(i); }
En effet, d'abord tu déclares et ajoutes 4 objets dans ton array puis tu redéclares pour le même array un nombre i d'objets (tu écrases la précédente array) sans les (r)ajouter (n est à présent vide).
Sinon ton problème de constructeur non définis vient du fait que tu déclares ton constructeur Neuron dans le setup ainsi :
n[0] = new Neuron(this, width/4, 0, width/2, height/2);
— c'est-à-dire avec 5 variables — alors que dans ta classe, tu l'as codé ainsi
Neuron (int _id)
— c'est-à-dire avec une seule variable.
Tu as donc 4 variables de trop dans le setup (et pire tu ne définis même pas ta variable _id… !).
Enlève cette partie :
n = new Neuron[4]; n[0] = new Neuron(this, width/4, 0, width/2, height/2); n[1] = new Neuron(this, width/2, width/4, width/2, height/2); n[2] = new Neuron(this, width/4, height/2, width/2, height/2); n[3] = new Neuron(this, 0, height/4, width/2, height/2); // Set views // VIEW ROTATION WARNING n[0].setRotation( 270, 0, 0); n[1].setRotation( 270, 90, 0); // NICKEL A TESTER sur installation (toutes) n[2].setRotation( 90, 180, 0); n[3].setRotation( 90, 90, 0);
Et cela devrait marcher.
(et si tu as besoin de cette partie, tu auras besoin de coder une seconde classe neuron avec les champs qui vont bien dans le constructeur de la classe et de déclarer une autre array que n).
Hors ligne
mierda...
J'ai du faire un foutoir pas possible ><, ça marche mais avec seulement qu'un seul affichage
En fait je voulais 4 affichage...sinon l'hologramme ne marche pas donc, ce serait pas l'inverse qu'il faut que je fasse...?
Hors ligne
Peux-tu expliquer clairement le résultat que tu souhaites obtenir, stp ? (ce sera peut-être plus simple pour t'aider).
Tu veux 4 fois ce qui s'affiche à l'écran (après avoir enlever le bout de code n = new Neuron[4]; etc.) mais à des positions différentes et à des rotations différentes ? C'est ça ?
(si c'est le cas, une seconde liste devrait suffire).
edit : attention, la méthode setRotation n'existe pas non plus dans ton code…
Dernière modification par mfm (2012-12-04 17:08:15)
Hors ligne
Exact!
En gros, j'essais de rendre cet affichage, mais avec le réseau dedans (celui la n'est pas finis, je le fais avec un peut d'aide, et le JAVA dans la class renderer n'aide pas). N'étant pas un pro de processing, j'ai simplement voulus remplacer la class rendrer par Neuron. Malheureusement ça foire... En gros j'ai fait un melting pot de deux programmes :
import controlP5.*; ControlP5 cp5; import saito.objloader.*; import java.lang.reflect.*; ControlWindow controlWindow; Renderer renderers[]; OBJModel model; float rotX; float rotY; public int DeplacerX = 0; public int DeplacerY = 0; public int RotationX = 0; public int RotationY = 0; public int RotationZ = 0; public int Importer = 0; public int DEMONSTRATION ; public float Echelle = 1.00; void setup() { size(displayHeight, displayHeight, P3D); background(0); ///DECLARATION MODEL model = new OBJModel(this, "MTECH.obj", "relative", QUADS); model.enableDebug(); cp5 = new ControlP5(this); controlWindow = cp5.addControlWindow("controlP5window", 100, 100, 600, 300) .hideCoordinates() .setBackground(color(150)) ; //////ROTATIONS cp5.addSlider("RotationX") .setRange(0, 360) .setPosition(40, 40) .setSize(200, 30) .setWindow(controlWindow) ; cp5.addSlider("RotationY") .setRange(0, 360) .setPosition(40, 80) .setSize(200, 30) .setWindow(controlWindow) ; cp5.addSlider("RotationZ") .setRange(0, 360) .setPosition(40, 120) .setSize(200, 30) .setWindow(controlWindow) ; //////DEPLACEMENTS cp5.addSlider("DeplacerX") .setRange(-100, 100) .setPosition(300, 40) .setSize(200, 30) .setWindow(controlWindow) ; cp5.addSlider("DeplacerY") .setRange(-120, 120) .setPosition(300, 80) .setSize(200, 30) .setWindow(controlWindow) ; /////OPTIONS cp5.addSlider("Echelle") .setRange(0, 10) .setPosition(40, 220) .setSize(200, 15) .setWindow(controlWindow) ; cp5.addButton("Importer") .setValue(0) .setPosition(40, 160) .setSize(100, 20) .setWindow(controlWindow) ; cp5.addButton("DEMONSTRATION") .setValue(0) .setPosition(40, 190) .setSize(100, 20) .setWindow(controlWindow) ; renderers = new Renderer[4]; renderers[0] = new Renderer(this, width/4, 0, width/2, height/2); renderers[1] = new Renderer(this, width/2, width/4, width/2, height/2); renderers[2] = new Renderer(this, width/4, height/2, width/2, height/2); renderers[3] = new Renderer(this, 0, height/4, width/2, height/2); // Set views // VIEW ROTATION WARNING renderers[0].setRotation( 270, 0, 0); renderers[1].setRotation( 270, 90, 0); // NICKEL A TESTER sur installation (toutes) renderers[2].setRotation( 90, 180, 0); renderers[3].setRotation( 90, 90, 0); } void draw() { for (int i=0;i<renderers.length;i++) { renderers[i].draw(); } } //// IMPORTATEUR public void Importer(int theValue) { selectInput("Select a file to process:", "fileselected"); } void fileSelected(File selection) { if (selection == null) { println("Window was closed or the user hit cancel."); } else { println("User selected " + selection.getAbsolutePath()); model = new OBJModel(this, "fileSelected", "relative", QUADS); model.enableDebug(); } } void drawRendererObject(Renderer r) //METTRE 3D A LA PLACE? { float fov = PI/4.0; float cameraZ = (height/2.0) / tan(fov/2.0); r.graphics().rotateX( map((RotationX+rotX)*5, 0, width, 0, PI) ); r.graphics().rotateY( map((RotationY+rotY)*5, 0, width, 0, PI) ); r.graphics().rotateZ( map(RotationZ*5, 0, width, 0, PI) ); r.graphics().translate(DeplacerX, 0, DeplacerY); r.graphics().scale(Echelle); r.graphics().lights(); r.graphics().perspective(fov, float(width*100)/float(height*100), cameraZ/100.0, cameraZ*100.0); //dessin : //* r.graphics().fill(255); r.graphics().strokeWeight(0); r.graphics().box(60); r.graphics().translate(0, 60, 0); r.graphics().fill(#74E9FF); r.graphics().sphere(30); r.graphics().sphereDetail(20); // */ } void mouseDragged() { rotY += (mouseX - pmouseX) ; rotX -= (mouseY - pmouseY) ; }
Et la class renderer
class Renderer { PApplet applet; PGraphics pg; PVector transfoRotation; PVector position; PVector dimension; Method methodDrawObject; Renderer(PApplet applet, float x, float y, float w, float h) { this.applet = applet; this.pg = createGraphics(int(w), int(h), P3D); this.pg.sphereDetail(7); position = new PVector(x, y, 0); dimension = new PVector(w, h, 0); transfoRotation = new PVector(0, 0, 0); try { this.methodDrawObject = applet.getClass().getMethod("drawRendererObject", new Class[] { Renderer.class } ); System.out.println("- \"findMethodFrame\" found."); } catch (Exception e) { System.out.println("- no \"findMethodFrame\" found."); } } PGraphics graphics() { return pg; } void setRotation(float x, float y, float z) { transfoRotation.set(x, y, z); } void draw() { pg.beginDraw(); //pg.background(0,LIGHTEST);// pg.background(0, 100); pg.translate(pg.width/2, pg.height/2); //pg.translate(DeplacerX,DeplacerY,0); pg.rotateX(radians(transfoRotation.x)); pg.rotateY(radians(transfoRotation.y)); pg.rotateY(radians(transfoRotation.z)); //drawAxis(100); pg.pushMatrix(); try { if (methodDrawObject!=null) methodDrawObject.invoke( applet, new Object[] { this } ); } catch(Exception e) { } pg.popMatrix(); pg.endDraw(); image(pg, position.x, position.y, dimension.x, dimension.y); } /* void drawAxis(float l) { //Axes d'ajustement : pg.pushStyle(); pg.stroke(255, 0, 0); pg.line(0, 0, 0, l, 0, 0); pg.stroke(0, 255, 0); pg.line(0, 0, 0, 0, l, 0); pg.stroke(0, 0, 255); pg.line(0, 0, 0, 0, 0, l); pg.popStyle(); }*/ }
Hors ligne
en général... des que je poste ce code... c'est la débandade ^^(pas d'bol, pas d'bol...)
Hors ligne
Heu???? C'est le JAVA qui fait encore peur
Dsl pour ce code, je sais qu'il est hard, mais si vous avez ne serais-ce que une toute petite idée de comment faire évoluer cette... chose^^
Hors ligne
Personnellement, je n'ai pas trop bien saisi ce que tu cherchais exactement à faire, à obtenir ; ce qui est handicapant pour t'aider…
Sinon, j'ai copié/collé la classe renderer dans ton code et ai remplacé ce bout de code :
n = new Neuron[4]; n[0] = new Neuron(this, width/4, 0, width/2, height/2); n[1] = new Neuron(this, width/2, width/4, width/2, height/2); n[2] = new Neuron(this, width/4, height/2, width/2, height/2); n[3] = new Neuron(this, 0, height/4, width/2, height/2); // Set views // VIEW ROTATION WARNING n[0].setRotation( 270, 0, 0); n[1].setRotation( 270, 90, 0); // NICKEL A TESTER sur installation (toutes) n[2].setRotation( 90, 180, 0); n[3].setRotation( 90, 90, 0);
par l'équivalent pour la classe renderer et j'ai rajouté, dans le void draw :
for (int j=0; j <renderers.length; j++) { renderers[j].draw(); }
(il faut aussi importer la librairie java (en début de code) :
import java.lang.reflect.*;
chez moi ça bug dans la version 2b06 à cause de cette ligne de code, dans la classe renderer (mais je ne sais pas pourquoi exactement) :
image(pg, position.x, position.y, dimension.x, dimension.y);
(chez moi la version 2 beta est, par ailleurs pas très amicale avec la 3D…).
Mais cela fonctionne parfaitement dans la version stable, c'est-à-dire la 1.5.1 ; du moins, il se passe quelque chose : on est comme happé dans la structure dessinée à l'écran ; on passe de l'extérieur de ta structure à l'intérieur de celle-ci, cette dernière se développe soudain "autour de nous". Le problème c'est que je ne sais pas si c'est l'effet escompté ou pas…
Hors ligne
Donc, plus de class Neuron, mais une classe renderer >.<?
Hors ligne
Heuuuu...
En fait le problème est plus complexe que cela: je cherche a garder mes 4 vues pour créer le réseau mais dans une pyramide holographique.
Une vidéo de base ce serait ça par exemple:
http://www.youtube.com/watch?v=UI7mtRI1-Qg
J'ai le même genre de vues dans le code de base, et j'essais donc d'y importer le réseau, peut m'importe si il faut le modifier ou non bien sur.
Hors ligne