狠狠撸
Submit Search
iTamabi 13 第7回:ARTSAT API 実践 2 衛星の情報で表現する
?
1 like
?
1,879 views
Atsushi Tadokoro
Follow
1 of 25
Download now
Download to read offline
More Related Content
iTamabi 13 第7回:ARTSAT API 実践 2 衛星の情報で表現する
1.
iTamabi 13? 第6回:ARTSAT API
実践 2 衛星の情報で表現する 2013年10月28日 多摩美術大学 PBL科目 担当:田所 淳
2.
今日の内容 ? ARTSAT API -
WebAPIから送出されるデータの意味につ いて ? APIから取得した数値で表現してみる ? ディスカッション:衛星の数値を、どう表現するか?
3.
先週のプログラムの 復習 APIの全ての内容を表示する サンプル
4.
先週のプログラムの復習 ? 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(){ ! }
5.
先週のプログラムの復習 ? 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)); } }
6.
取得された値について
7.
取得された値について ? 表示される値 (ax, ay,
az, mx, my, mz …etc.) ? これらは何を意味するのか? ? 衛星が取得したセンサーの値
8.
取得された値について ? センサーの値の意味 センサー名 センサーの意味 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 温度 (内部)
9.
取得された値について ? センサーの値の意味 センサー名 センサーの意味 epx, emx 太陽電池発電量 (+x面、-x面) epy,
emy 太陽電池発電量 (+y面、-y面) epz, emz 太陽電池発電量 (+z面、-z面)
10.
取得された値で表现する
11.
取得された値で表现する ? これらの値を用いて、アプリで表現する ? どんな値を、何に用いれば良いのか?
12.
取得された値で表现する ? サンプル 1 :
角速度で表現する ? 取得した角速度をもとに、3Dのオブジェクトを動かす ? 実際に宇宙にいる衛星の動きを実感できるかも(?)
13.
取得された値で表现する ? 角速度を取得 - testApp.h #pragma
once ! #include #include #include #include ! "ofMain.h" "ofxiOS.h" "ofxiOSExtras.h" "ofxJSONElement.h" class testApp : public ofxiOSApp{ public: void void void void setup(); update(); draw(); exit(); void void void void void touchDown(ofTouchEventArgs & touch); touchMoved(ofTouchEventArgs & touch); touchUp(ofTouchEventArgs & touch); touchDoubleTap(ofTouchEventArgs & touch); touchCancelled(ofTouchEventArgs & touch); void void void void lostFocus(); gotFocus(); gotMemoryWarning(); deviceOrientationChanged(int newOrientation); ofxJSONElement response; ofVec3f angleSpeed; };
14.
取得された値で表现する ? 角速度を取得 - 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(){
15.
取得された値で表现する ? 角速度を取得 - 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); }
16.
取得された値で表现する ? 角速度が取得できた
17.
取得された値で表现する ? 次に、この角速度で3Dオブジェクトを実際の速度で回転 させてみたい ? まずは立方体で
18.
取得された値で表现する ? openFrameworksで立方体を描く方法 // 立方体のプリミティブ ofBoxPrimitive box; ! //
位置を指定して、立方体を描く box.setPosition(x, y, z); box.draw();
19.
取得された値で表现する ? 角速度の単位は、deg/sec つまり一秒間に変化する角度 ? アプリケーションを実行してからの時間に、角速度をかけ 算すれば、角度(degree)が計算できる ! ? アプリケーションを実行してからの時間を求める方法 // プログラムが開始してからの時間を求める float
sec = ofGetElapsedTimef();
20.
取得された値で表现する ? testApp.h #pragma once ! #include #include #include #include ! "ofMain.h" "ofxiOS.h" "ofxiOSExtras.h" "ofxJSONElement.h" class testApp
: public ofxiOSApp{ public: void void void void setup(); update(); draw(); exit(); … (中略) … ofxJSONElement response; ofVec3f angleSpeed; ofLight light; ofEasyCam cam; };
21.
取得された値で表现する ? 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();
22.
取得された値で表现する ? 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();
23.
取得された値で表现する ? 宇宙空間で回転する衛星を再現
24.
ディスカッション
25.
ディスカッション ? INVADERのデータから、何が表現できるか ? パラメータと、それを表現する手法について話し合う ? 「衛星芸術」の可能性について
Download now