検索条件
全1件
(1/1ページ)
import processing.net.*; Client myClient; double phi,theta,psi; double X,Y,Z; double[][] matrix = new double[4][4]; void setup() { myClient = new Client(this,"192.168.145.1",55555); // IPとポート番号 size(480, 480, P3D); frameRate(30); } void draw() { background(0); if (myClient.available() > 0) { String dataIn = myClient.readStringUntil('\n'); if ( dataIn != null ) { // "Num="を含むデータ列かどうかをチェックし,データ数を取得 if ( dataIn.indexOf("Num=")==0 ) { int num = int(split(trim(dataIn),' ' )[1]); // num個のマーカのデータを取得する for (int i=0; i<num; i++) { String marker_info = myClient.readStringUntil('\n'); if ( marker_info!= null ) { // 1行分のデータを切り分けて欲しいデータを取得する String[] data = split(trim(marker_info),','); // マーカの名前と2次元座標 String name = data[0]; for(int m=0;m<4;m++) { for(int n=0;n<4;n++) { matrix[n][m] = Double.parseDouble(data[1+m*4+n]); } } //傾斜角度を求める if (matrix[0][2] > 0.998) { phi = Math.atan2(matrix[1][0],matrix[1][1]); theta = Math.PI/2.0; psi = 0; } else if (matrix[0][2] < -0.998) { phi = Math.atan2(matrix[1][0],matrix[1][1]); theta = -Math.PI/2.0; psi = 0; } else { phi = Math.atan2(-matrix[1][2],matrix[2][2]); theta = Math.asin(matrix[0][2]); psi = Math.atan2(-matrix[0][1],matrix[0][0]); } //併進ベクトルを代入 X=matrix[0][3]; Y=matrix[1][3]; Z=matrix[2][3]; println("X:"+X+" Y:"+Y+" Z:"+Z); println("phi:"+Math.toDegrees(phi)+" theta"+Math.toDegrees(theta)+" psi:"+Math.toDegrees(psi)); println(); //マーカの位置にあわせて立体を表示 translate(width/2+(int)X, height/2+(int)Y,-(int)Z+600); //軸の向き的にy軸に180度,z軸に90度回転させて表示.あとなんか-をかける. rotateX(-(float)phi); rotateY(-((float)theta+(float)Math.PI)); rotateZ(-((float)psi+(float)Math.PI/2)); //マーカ平面ぽいものを描画 stroke(0); fill(255, 255, 255); pushMatrix(); translate(-50, -50, 0); rect(0,0,100,100); popMatrix(); //X軸の棒を描画 stroke(0); fill(255, 0, 0); pushMatrix(); translate(-50, 0, 0); box(100, 5, 5); popMatrix(); //Y軸の棒を描画 stroke(0); fill(0, 255, 0); pushMatrix(); translate(0, -50, 0); box(5, 100, 5); popMatrix(); //Z軸の棒を描画 stroke(0); fill(0, 0, 255); pushMatrix(); translate(0, 0, 50); box(5, 5, 100); popMatrix(); } } } } myClient.clear(); } }