Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// une carte des membres//// (apéros) codelab


#1 2012-12-04 11:26:40 Constructor undefined

Malleat
membre
Date d'inscription: 2012-04-15
Messages: 148
Site web

Constructor undefined



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 smile

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--");
      }
    }}}

SITE WEB ->REVŒLUTION

Hors ligne

 

#2 2012-12-04 12:14:40 Re : Constructor undefined

mfm
membre
Date d'inscription: 2012-08-30
Messages: 37

Re: Constructor undefined



Salut,

Pourquoi tu définis deux fois à la suite le nombre d'objets dans ton array n dans le setup :

Code (p5) :

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. wink

(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

 

#3 2012-12-04 16:12:35 Re : Constructor undefined

Malleat
membre
Date d'inscription: 2012-04-15
Messages: 148
Site web

Re: Constructor undefined



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...?


SITE WEB ->REVŒLUTION

Hors ligne

 

#4 2012-12-04 16:53:04 Re : Constructor undefined

mfm
membre
Date d'inscription: 2012-08-30
Messages: 37

Re: Constructor undefined



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

 

#5 2012-12-04 17:09:16 Re : Constructor undefined

Malleat
membre
Date d'inscription: 2012-04-15
Messages: 148
Site web

Re: Constructor undefined



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();
   }*/
}

SITE WEB ->REVŒLUTION

Hors ligne

 

#6 2012-12-05 01:41:40 Re : Constructor undefined

Malleat
membre
Date d'inscription: 2012-04-15
Messages: 148
Site web

Re: Constructor undefined



en général... des que je poste ce code... c'est la débandade ^^(pas d'bol, pas d'bol...)


SITE WEB ->REVŒLUTION

Hors ligne

 

#7 2012-12-06 16:43:54 Re : Constructor undefined

Malleat
membre
Date d'inscription: 2012-04-15
Messages: 148
Site web

Re: Constructor undefined



Heu???? C'est le JAVA qui fait encore peur sad
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^^


SITE WEB ->REVŒLUTION

Hors ligne

 

#8 2012-12-06 23:24:32 Re : Constructor undefined

mfm
membre
Date d'inscription: 2012-08-30
Messages: 37

Re: Constructor undefined



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 :

Code (P5) :

for (int j=0; j <renderers.length; j++) {
    renderers[j].draw();
  }

(il faut aussi importer la librairie java (en début de code) :

Code (P5) :

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

 

#9 2012-12-07 21:24:05 Re : Constructor undefined

Malleat
membre
Date d'inscription: 2012-04-15
Messages: 148
Site web

Re: Constructor undefined



Donc, plus de class Neuron, mais une classe renderer >.<?


SITE WEB ->REVŒLUTION

Hors ligne

 

#10 2012-12-08 22:40:06 Re : Constructor undefined

Malleat
membre
Date d'inscription: 2012-04-15
Messages: 148
Site web

Re: Constructor undefined



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.


SITE WEB ->REVŒLUTION

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024