ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MovieNetwork Backup 3.1 MovieNetwork.pde
    작가/코드 2014. 11. 22. 21:03



    첫 번째 계층 연결까지 된 상태임

    링크 메소드 두 개씩 분할하여 여섯 개로 만들고

    여섯 개 메소드를 적절히 이용하여 두 번째 계층 연결 구현해야 함




    <명량(검정)>에서 만난 <최민식(노랑)>과 <류승룡<노랑)>

     


    import shapes3d.utils.*;  // Ellipsoid Library importing

    import shapes3d.animation.*;

    import shapes3d.*;


    import peasy.*;  // Camera Library importing


    import de.bezier.data.*;  // Excel File Reader Library importing


    XlsReader reader;


    PeasyCam cam;

    PVector camPos;

    float angleXY, distance;


    int R_Director = 1600;

    int R_Film = 1200;

    int R_Star = 2000;


    public int filmNum = 12;

    public int directorNum = filmNum;

    public int starNum = 3000;


    // Position of Nodes

    public PVector[] film = new PVector[filmNum];

    public PVector[] director = new PVector[directorNum];

    public PVector[] star;


    Ellipsoid[] e_film;

    Ellipsoid[] e_director;

    Ellipsoid[] e_star;


    Shape3D picked = null;  // Picked ellipsoids

    Ellipsoid selected = null;

    boolean clicked = false;  // Mouse interaction

    double dis = 10;

    long ani = 3000;


    // MovieData[] mData = new MovieData[filmNum]; 

    // Java : Class is pointer. That is why this line does not work.


    // Step 1) Make a list of array to save the pointer of class array.  //// ArrayList<MovieData> mData;

    // Step 2) Make a real space to save the content of class.  //// mData = new ArrayList<MovieData>();

    // Step 3) Make a temporal class object to do tasks.  //// MovieData tempData = new MovieData();

    // Step 4)-1) Doing the first task.  //// tempData.makeMovieXML(i+1, movieID);

    // Step 4)-2) Doing the second task.  //// int movieDate = tempData.getMovieDate();

    // Step 5) To add the tempData - which has done all tasks - in the list of class array.  //// mData.add(tempData);

    // Step 6) To use the class in the list of class array, use get() method with new class object.  //// println("length : " + mData.size());


    public ArrayList<MovieData> mData;  // Step 1) Make a list of class array to save the pointer of class array.


    float[] filmNumX = new float[filmNum];

    float[] filmNumY = new float[filmNum];

    float[] filmNumZ = new float[filmNum];

    float[] directorNumX = new float[directorNum];

    float[] directorNumY = new float[directorNum];

    float[] directorNumZ = new float[directorNum];

    float[] starNumX = new float[starNum];

    float[] starNumY = new float[starNum];

    float[] starNumZ = new float[starNum];

    //String[] movieEngTitle = new String[filmNum];  // ^^ Long Version


    boolean filmText = false;



    void setup ()

    {

      //////// Display

      size(750, 750, P3D);


      //////// Camera

      cam = new PeasyCam(this, 4000);  // initial Distance

      cam.setMinimumDistance(200);  // minimum Distance

      cam.setMaximumDistance(6000);  // maximum Distance


      ////////// Data and Data Space

      reader = new XlsReader(this, "Boxoffice.xls");

      println("Reading excel file......");  // OK


      mData = new ArrayList<MovieData>();  // Step 2) Make a real space to save the content of class.



      //////// (1) Film Part


      for (int i = 0; i < filmNum; i++)

      {


        int movieID = reader.getInt((i+2), 1);

        println();

        println(movieID);


        MovieData tempData = new MovieData();  // Step 3) Make a temporal class object to do tasks.


        tempData.makeMovieXML(i+1, movieID);  // Step 4)-1) Doing the first task.

        println("movie_" + (i+1) + ".XML File is saved.");


        tempData.setMovieData();  // Step 4)-2) Doing the second task.

        println("movie_" + (i+1) + "'s Each Data Setting is completed.");


        int movieDate = tempData.getMovieDate();  // Step 4)-3) Doing the third task.

        filmNumX[i] = map(movieDate, 20040000, 20150000, -15, 15);  // Film_X = According to Date

        filmNumY[i] = map((i+1), 1, 200, -15, 15);  // Film_Y = According to Rank


        mData.add(tempData);  // Step 5) To add the tempData - which has done all tasks - in the list of class array.

      }


      println("Class Array List Length = " + mData.size());  

      // Step 6) Printing total number of the class - which has saved in the list of class array MovieData.


      for (int i = 0; i < filmNum; i++)

      {  

        //////// ^^ Long Version

        //movieEngTitle[i] = mData.get(i).getMovieEnglishTitle();  // movieEngTitle[0] ~ movieEngTitle[199]  

        // Step 6) To use the class in the list of class array - use get() method with new class object.

        //char[] alpha = movieEngTitle[i].toCharArray();


        //////// ^^ Short Version

        char[] alpha = mData.get(i).getMovieEnglishTitle().toCharArray();


        if (alpha[0] == 'A') filmNumZ[i] = random( map(0, 1, 27, -15, 15), map(1, 1, 27, -15, 15) );  // Film_Z = According to Alphabet

        else if (alpha[0] == 'B') filmNumZ[i] = random( map(1, 1, 27, -15, 15), map(2, 1, 27, -15, 15) );

        else if (alpha[0] == 'C') filmNumZ[i] = random( map(2, 1, 27, -15, 15), map(3, 1, 27, -15, 15) );

        else if (alpha[0] == 'D') filmNumZ[i] = random( map(3, 1, 27, -15, 15), map(4, 1, 27, -15, 15) );

        else if (alpha[0] == 'E') filmNumZ[i] = random( map(4, 1, 27, -15, 15), map(5, 1, 27, -15, 15) );

        else if (alpha[0] == 'F') filmNumZ[i] = random( map(5, 1, 27, -15, 15), map(6, 1, 27, -15, 15) );

        else if (alpha[0] == 'G') filmNumZ[i] = random( map(6, 1, 27, -15, 15), map(7, 1, 27, -15, 15) );

        else if (alpha[0] == 'H') filmNumZ[i] = random( map(7, 1, 27, -15, 15), map(8, 1, 27, -15, 15) );

        else if (alpha[0] == 'I') filmNumZ[i] = random( map(8, 1, 27, -15, 15), map(9, 1, 27, -15, 15) );

        else if (alpha[0] == 'J') filmNumZ[i] = random( map(9, 1, 27, -15, 15), map(10, 1, 27, -15, 15) );

        else if (alpha[0] == 'K') filmNumZ[i] = random( map(10, 1, 27, -15, 15), map(11, 1, 27, -15, 15) );

        else if (alpha[0] == 'L') filmNumZ[i] = random( map(11, 1, 27, -15, 15), map(12, 1, 27, -15, 15) );

        else if (alpha[0] == 'M') filmNumZ[i] = random( map(12, 1, 27, -15, 15), map(13, 1, 27, -15, 15) );

        else if (alpha[0] == 'N') filmNumZ[i] = random( map(13, 1, 27, -15, 15), map(14, 1, 27, -15, 15) );

        else if (alpha[0] == 'O') filmNumZ[i] = random( map(14, 1, 27, -15, 15), map(15, 1, 27, -15, 15) );

        else if (alpha[0] == 'P') filmNumZ[i] = random( map(15, 1, 27, -15, 15), map(16, 1, 27, -15, 15) );

        else if (alpha[0] == 'Q') filmNumZ[i] = random( map(16, 1, 27, -15, 15), map(17, 1, 27, -15, 15) );

        else if (alpha[0] == 'R') filmNumZ[i] = random( map(17, 1, 27, -15, 15), map(18, 1, 27, -15, 15) );

        else if (alpha[0] == 'S') filmNumZ[i] = random( map(18, 1, 27, -15, 15), map(19, 1, 27, -15, 15) );

        else if (alpha[0] == 'T') filmNumZ[i] = random( map(19, 1, 27, -15, 15), map(20, 1, 27, -15, 15) );

        else if (alpha[0] == 'U') filmNumZ[i] = random( map(20, 1, 27, -15, 15), map(21, 1, 27, -15, 15) );

        else if (alpha[0] == 'V') filmNumZ[i] = random( map(21, 1, 27, -15, 15), map(22, 1, 27, -15, 15) );

        else if (alpha[0] == 'W') filmNumZ[i] = random( map(22, 1, 27, -15, 15), map(23, 1, 27, -15, 15) );

        else if (alpha[0] == 'X') filmNumZ[i] = random( map(23, 1, 27, -15, 15), map(24, 1, 27, -15, 15) );

        else if (alpha[0] == 'Y') filmNumZ[i] = random( map(24, 1, 27, -15, 15), map(25, 1, 27, -15, 15) );

        else if (alpha[0] == 'Z') filmNumZ[i] = random( map(25, 1, 27, -15, 15), map(26, 1, 27, -15, 15) );

        else filmNumZ[i] = random( map(26, 1, 27, -15, 15), map(27, 1, 27, -15, 15) );

      }


      for (int i = 0; i < filmNum; i++)

      {

        film[i] = new PVector(filmNumX[i], filmNumY[i], filmNumZ[i]);

        film[i].setMag(R_Film);

      }



      //////// (2) Director Part


      for (int i = 0; i < directorNum; i++)

      {

        directorNumX[i] = random(-15, 15);

        directorNumY[i] = random(-15, 15);

        directorNumZ[i] = random(-15, 15);

        director[i] = new PVector(directorNumX[i], directorNumY[i], directorNumZ[i]);

        director[i].setMag(R_Director);  // outer Sphere

      }



      //////// (3) Actor Part


      starNum = getTotalActorNum();

      star = new PVector[starNum];

      println();

      println("Total " + starNum + " Actors");


      for (int i = 0; i < starNum; i++)

      {

        starNumX[i] = random(-15, 15);

        starNumY[i] = random(-15, 15);

        starNumZ[i] = random(-15, 15);

        star[i] = new PVector(starNumX[i], starNumY[i], starNumZ[i]);

        star[i].setMag(R_Star);

        //String currentA = wholeActors_eng.get(i);

      }

    }



    void draw() 

    {


      //////// 3D Space

      // There is the original center point in this 3D Space


      background(250);



      //////// Sphere


      //fill(200, 20);  // Color and Alpha

      //noStroke();

      //sphere(R_Film);

      //sphere(R_Director);

      //sphere(R_Star);

      //text("test", 100, 100, 100);



      //////// Axes for frame of reference 


      // line(x1, y1, z1, x2, y2, z2)

      // Each line is from -100 to 100 - So we can see six end points of lines

      // The standard of naming X, Y, Z axes is the initial position of the camera

      strokeWeight(1);


      stroke(255, 0, 0);  // RED = X

      line(-(R_Star + 400), 0, 0, (R_Star + 400), 0, 0);

      stroke(0, 255, 0);  // GREEN = Y 

      line(0, -(R_Star + 400), 0, 0, (R_Star + 400), 0);

      stroke(0, 0, 255);  // BLUE = Z

      line(0, 0, -(R_Star + 400), 0, 0, (R_Star + 400) ); 



      //////// Points on 3 axes to denote positive orientation

      strokeWeight(5);


      stroke(255, 0, 0);

      point((R_Star + 200), 0, 0);  // RED point on X

      stroke(0, 255, 0);

      point(0, (R_Star + 200), 0);  // GREEN point on Y

      stroke(0, 0, 255);

      point(0, 0, (R_Star + 200));  // BLUE point on Z



      //////// Drawing Dots


      strokeWeight(5);


      for (PVector p : film) 

      {

        stroke(0, 0, 0);  // Black

        point(p.x, p.y, p.z);

      }


      for (PVector p : director) 

      {

        stroke(164, 76, 36);  // Brown

        point(p.x, p.y, p.z);

      }


      for (PVector p : star) 

      {

        stroke(250, 220, 0);  // Yellow

        point(p.x, p.y, p.z);

      }



      //////// Drawing Ellipsoids

      //filmEllipsoid();

      //directorEllipsoid();

      //starEllipsoid();



      if (key=='f') filmNameWriting();

      if (key=='d') directorNameWriting();

      if (key=='s') starNameWriting();


      if (key=='a')

      {

        filmNameWriting();

        directorNameWriting();

        starNameWriting();

      }


      if (key=='e') TextErasing();




      //////// Clicking Ellipsoid


      if (clicked)

      {

        println("Clicked");

        clicked = false;

        picked = Shape3D.pickShape(this, mouseX, mouseY);

        //selected = 

        if (picked != null)

        {

          println("Picked");

          picked.fill(200 /*randomColor()*/);


          float x = picked.x();

          float y = picked.y();

          float z = picked.z();

          cam.lookAt(x, y, z, dis, ani);  //(x, y, z, double distance, long animationTimeMillis)



          /*

          imageMode(CENTER);

           image(test, x, y, 1000, 1000);  // Blink

           

           for (int i = 0; i < lines.length; i++)

           {

           if ( (e_x[i]==x) && (e_y[i]==y) && (e_z[i]==z) )

           {

           ellipnum = i;

           }

           }

           imagePopup();

           */

        }

      }



      //////// Selecting interaction (1) Selecting Film Part ////////

      //drawLinkFilm("Roaring Currents");

      //drqwLinkFilm("The Attorney");


      //////// Selecting interaction (2) Selecting Director Part ////////

      //drawLinkDirector("KIM Han-min");

      //drawLinkDirector("Bong Joon Ho");


      //////// Selecting interaction (3) Selecting Actor Part ////////

      drawLinkStar("CHOI Min-shik");

      drawLinkStar("RYU Seung-ryong");



      //////// Current Position

      camPos = new PVector(cam.getPosition()[0], cam.getPosition()[1], cam.getPosition()[2]);  

      angleXY = degrees(atan2(camPos.z, camPos.x));   // camera XY angle from origin

      distance = sqrt(pow(camPos.z, 2) + pow(camPos.x, 2));  // XY distance between camera and object (compare to cam.getDistance())

      //println("campos: " + camPos + " " + ", ang: " + angleXY + ", dist:" + distance);

    }









    void keyPressed()

    {

      if (key=='r') setup();  // Total Restart from data to structure


      if (key=='x') camera(camPos.x, camPos.y, camPos.z, 0, 0, 0, 1, 0, 0);  // Stabilize image on X axis

      if (key=='y') camera(camPos.x, camPos.y, camPos.z, 0, 0, 0, 0, 1, 0);  // Stabilize image on Y axis

      if (key=='z') camera(camPos.x, camPos.y, camPos.z, 0, 0, 0, 0, 0, 1);  // Stabilize image on Z axis

      //camera(eyeX, eyeY, eyeZ, centerX, centerY, centerZ, upX, upY, upZ)


      if (key=='f') filmNameWriting();

      if (key=='d') directorNameWriting();

      if (key=='s') starNameWriting();


      // Rotations work

      if (key=='m') cam.rotateY(radians(2));

      if (key=='n') cam.rotateY(radians(-2));

    }



    void mouseClicked()

    {

      clicked = true;

    }





    void drawLinkFilm(String filmName)

    {

      int filmSelec = findFilmID(filmName);


      strokeWeight(1);

      stroke(0);

      line(film[filmSelec].x, film[filmSelec].y, film[filmSelec].z, director[filmSelec].x, director[filmSelec].y, director[filmSelec].z);

      // Drawing line between Film & Director


      String[] aa = new String[10];

      aa = mData.get(filmSelec).getMovieEnglishActor();


      for (int i = 0; i < mData.get (filmSelec).getActorNum(); i++)

      {

        int filmSelec_star = findStarIDTotalView(aa[i]);

        line(film[filmSelec].x, film[filmSelec].y, film[filmSelec].z, star[filmSelec_star].x, star[filmSelec_star].y, star[filmSelec_star].z);

        // Drawing line between Film & Actors

      }

    }



    void drawLinkDirector(String directorName)

    {

      int directorSelec = findDirectorID(directorName);  // Bong Joon Ho - 10 (Just one.. The highest number)


      StringList directorsMovieList = new StringList();

      int directorsMovieNum = 0;


      for (int i = 0; i < directorNum; i++)

      {

        String currentD = mData.get(i).getMovieEnglishDirector();

        if (currentD.equals(directorName))

        {

          directorsMovieList.append(mData.get(i).getMovieEnglishTitle());

        }

      }

      directorsMovieNum = directorsMovieList.size();


      for (int i = 0; i < directorsMovieNum; i++)

      {

        int temp = findFilmID(directorsMovieList.get(i));

        strokeWeight(1);

        stroke(0);

        line(director[directorSelec].x, director[directorSelec].y, director[directorSelec].z, film[temp].x, film[temp].y, film[temp].z);

        // Drawing line between Director & Films

        // Drawing line between Director & Actors (via Films)

      }

    }



    void drawLinkStar(String starName)

    {

      int starSelec = findStarIDTotalView(starName);  // (Just one.. The highest number)


      StringList starsMovieList = new StringList();

      int starsMovieNum = 0;


      for (int i = 0; i < filmNum; i++)  // Rotating movies

      {

        String[] currentS = new String[20];  // expected maximum overlap of star in the list

        currentS = mData.get(i).getMovieEnglishActor();  

        for (int j = 0; j < mData.get (i).getActorNum(); j++)  // Rotating actors of current movie

        {

          if (currentS[j].equals(starName))

          {

            starsMovieList.append(mData.get(i).getMovieEnglishTitle());

          }

        }

      }

      starsMovieNum = starsMovieList.size();


      for (int i = 0; i < starsMovieNum; i++)

      {

        int temp = findFilmID(starsMovieList.get(i));

        strokeWeight(1);

        stroke(0);

        line(star[starSelec].x, star[starSelec].y, star[starSelec].z, film[temp].x, film[temp].y, film[temp].z);

        // Drawing line between Actor & Films

        // Drawing line between Actor & Directors (via Films)

      }

    }




    '작가 > 코드' 카테고리의 다른 글

    MovieNetwork Backup 3.3 NetworkMethods.pde  (0) 2014.11.22
    MovieNetwork Backup 3.2 MovieData.pde  (0) 2014.11.22
    MovieNetwork Backup 2  (0) 2014.11.15
    MovieNetwork Backup 1  (0) 2014.11.13
    Multivariate Information Visualization  (0) 2014.11.07
Designed by Tistory.