Upload
atsushi-tadokoro
View
807
Download
5
Embed Size (px)
Citation preview
‣ testApp.mm
先週のプログラムの復習
#include "testApp.h" !void testApp::setup(){ ofBackground(224); ofSetFrameRate(30); // ARTSAT WebAPIにアクセスしてJSONデータを取得 bool result = response.open("http://api.artsat.jp/web/v2/invader/sensor_data.json"); // 取得結果をコンソールに出力 if (!result) { // もし取得できなかったら、エラーを出力 cout << "faild to get JSON data!" << endl; } else { // 取得に成功したら、JSONデータを出力 cout << response.getRawString() << endl; } } !void testApp::update(){ !}
‣ testApp.mm
先週のプログラムの復習
void testApp::draw(){ ofSetColor(63); int lineHeigt = 15; ! // 取得した時間を表示 string available_time = response["results"][0]["closest_available_time_iso_string"].asString(); ofDrawBitmapString(available_time, 10, lineHeigt*1); // センサーの全てのメンバー名を取得 ofxJSONElement::Members mem = response["results"][0]["sensors"].getMemberNames(); // メンバーごとにセンサーの値をとりだして、画面に表示 for (int i = 0; i < mem.size(); i++) { string lavel = mem[i]; float value = response["results"][0]["sensors"][mem[i]]["value"].asFloat(); ofDrawBitmapString(lavel + " = " + ofToString(value), 10, lineHeigt * (i + 3)); } }
取得された値について
‣ センサーの値の意味センサー名 センサーの意味lat latitude : 緯度
lon longitude : 経度
alt altitude : 高度
ax, ay, az 衛星の角速度 (x, y, z軸)
px, py, pz 衛星の姿勢角度 (x, y, z軸)
mx, my, mz 磁気センサー (x, y, z軸)
tpx, tmx 太陽電池の温度 (+x面、-x面)
tpy, tmy 太陽電池の温度 (+y面、-y面)
tpy, tmy 太陽電池の温度 (+z面、-z面)
tin 温度 (内部)
取得された値について
‣ センサーの値の意味センサー名 センサーの意味
epx, emx 太陽電池発電量 (+x面、-x面)
epy, emy 太陽電池発電量 (+y面、-y面)
epz, emz 太陽電池発電量 (+z面、-z面)
‣ 角速度を取得 - testApp.h
取得された値で表現する
#pragma once !#include "ofMain.h" #include "ofxiOS.h" #include "ofxiOSExtras.h" #include "ofxJSONElement.h" !class testApp : public ofxiOSApp{ public: void setup(); void update(); void draw(); void exit(); void touchDown(ofTouchEventArgs & touch); void touchMoved(ofTouchEventArgs & touch); void touchUp(ofTouchEventArgs & touch); void touchDoubleTap(ofTouchEventArgs & touch); void touchCancelled(ofTouchEventArgs & touch); void lostFocus(); void gotFocus(); void gotMemoryWarning(); void deviceOrientationChanged(int newOrientation); ofxJSONElement response; ofVec3f angleSpeed; };
‣ 角速度を取得 - testApp.mm
取得された値で表現する
#include "testApp.h" !void testApp::setup(){ ofBackground(224); ofSetFrameRate(30); // ARTSAT WebAPIにアクセスしてJSONデータを取得 bool result = response.open("http://api.artsat.jp/web/v2/invader/sensor_data.json"); // 取得結果をコンソールに出力 if (!result) { // もし取得できなかったら、エラーを出力 cout << "faild to get JSON data!" << endl; } else { // 取得に成功したら、JSONデータを出力 cout << response.getRawString() << endl; angleSpeed.x = response["results"][0]["sensors"]["ax"]["value"].asFloat(); angleSpeed.y = response["results"][0]["sensors"]["ay"]["value"].asFloat(); angleSpeed.z = response["results"][0]["sensors"]["az"]["value"].asFloat(); } } !void testApp::update(){ !}
‣ 角速度を取得 - testApp.mm
取得された値で表現する
!void testApp::draw(){ // 取得した角速度を表示 ofSetColor(31); ofDrawBitmapString("angle speed x = " + ofToString(angleSpeed.x, 8), 10, 15); ofDrawBitmapString("angle speed y = " + ofToString(angleSpeed.y, 8), 10, 30); ofDrawBitmapString("angle speed z = " + ofToString(angleSpeed.z, 8), 10, 45); }
‣ openFrameworksで立方体を描く方法
取得された値で表現する
// 立方体のプリミティブ ofBoxPrimitive box; !// 位置を指定して、立方体を描く box.setPosition(x, y, z); box.draw();
取得された値で表現する
‣ 角速度の単位は、deg/sec つまり一秒間に変化する角度 ‣ アプリケーションを実行してからの時間に、角速度をかけ算すれば、角度(degree)が計算できる !
‣ アプリケーションを実行してからの時間を求める方法// プログラムが開始してからの時間を求める float sec = ofGetElapsedTimef();
‣ testApp.h
取得された値で表現する
#pragma once !#include "ofMain.h" #include "ofxiOS.h" #include "ofxiOSExtras.h" #include "ofxJSONElement.h" !class testApp : public ofxiOSApp{ public: void setup(); void update(); void draw(); void exit(); … (中略) … ofxJSONElement response; ofVec3f angleSpeed; ofLight light; ofEasyCam cam; };
‣ testApp.mm
取得された値で表現する
#include "testApp.h" !void testApp::setup(){ ofBackground(0); ofSetFrameRate(60); // ARTSAT WebAPIにアクセスしてJSONデータを取得 bool result = response.open("http://api.artsat.jp/web/v2/invader/sensor_data.json"); // 取得結果をコンソールに出力 if (!result) { // もし取得できなかったら、エラーを出力 cout << "faild to get JSON data!" << endl; } else { // 取得に成功したら、JSONデータを出力 cout << response.getRawString() << endl; // 角速度を取得 angleSpeed.x = response["results"][0]["sensors"]["ax"]["value"].asFloat(); angleSpeed.y = response["results"][0]["sensors"]["ay"]["value"].asFloat(); angleSpeed.z = response["results"][0]["sensors"]["az"]["value"].asFloat(); } // 3D表示設定 ofEnableDepthTest(); ofEnableLighting(); light.setPosition(200, 300, 50); light.enable(); }
‣ testApp.mm
取得された値で表現する
void testApp::update(){ !} !void testApp::draw(){ ofVec3f angle = angleSpeed * ofGetElapsedTimef(); // カメラ開始 cam.begin(); ! // 回転 ofPushMatrix(); ofRotateX(ofRadToDeg(angle.x)); ofRotateY(ofRadToDeg(angle.y)); ofRotateZ(ofRadToDeg(angle.z)); // 立方体を描く ofBoxPrimitive box; box.draw(); ofPopMatrix(); ! // カメラ終了 cam.end(); }