Your SlideShare is downloading. ×
  • Like
iTamabi 13  第7回:ARTSAT API 実践 2 衛星の情報で表現する
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

iTamabi 13 第7回:ARTSAT API 実践 2 衛星の情報で表現する

  • 720 views
Published

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
720
On SlideShare
0
From Embeds
0
Number of Embeds
4

Actions

Shares
Downloads
8
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 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のデータから、何が表現できるか ‣ パラメータと、それを表現する手法について話し合う ‣ 「衛星芸術」の可能性について