-
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