Microsoft Word - 卒業論文 docx

Size: px
Start display at page:

Download "Microsoft Word - 卒業論文 docx"

Transcription

1 - ARToolKit によるマルチマーカの考察 日付 2011 年 1 月 24 日 阪南大学経営情報学部経営情報学科 筒井亮 山岡大介 1

2 目次 第 1 章拡張現実感 (AR: Augmented reality)~はじめに~... 3 第 2 章関連研究... 4 第 3 章 ARToolKit の概要... 6 第 4 章プログラムの構成... 7 第 1 節メイン関数 Main()... 7 第 2 節メインループ関数 MainLoop() 第 3 節オブジェクト描画関数 DrawObject() 第 4 節キーボード入力処理関数 KeyEvent() 第 5 節マウス入力処理関数 MouseEvent() 第 6 節終了処理関数 Cleanup() 第 5 章作成した 3DCG モデルの応用 第 1 節 3DCG モデルの作成 Metasequoia 第 2 節 GLMetaseq の関数 第 3 節モーションの連番 MQO 出力 第 6 章複数のマーカを利用した AR アプリケーション 第 1 節構造体 第 2 節パターンファイルのロード 第 3 節マーカの信頼度の比較 第 4 節 3DCG とマーカの役割 第 7 章まとめ 参考文献 謝辞

3 第 1 章拡張現実感 (AR:Augmented reality) ~ はじめに ~ 2007 年前後から 拡張現実感技術を利用した新たなサービスに大きな注目が集まっている 拡張現実感技術はディジタル情報を現実の世界に融合させることにより 新しいユーザインタフェースを構築し 作業支援や情報提示に役立てることを目的としている 現在 拡張現実感を利用した技術が医療 教育 建築 観光 エンタテイメントなどのさまざまな分野での応用が期待されている まず AR とは 実環境の上にバーチャル環境を重畳する概念である AR は実環境に対し空間的整合性を保ちつつ 実時間でシームレスに情報を重畳提示する点が従来の位置情報システムとの違いとなっている 拡張現実感 (Augmented reality) とは 仮想現実感 (virtual reality) から派生した比較的新しい研究領域で 実世界の映像に仮想的な物体の映像を重ね合わせるという発想に由来している カーナビゲーションシステムは 実世界における現在位置と地図上の現在位置の間に常に関連を持たせ 現在位置とユーザーの目的に関連のある情報を提示することができる このようなシステムは 実世界を情報的に拡張しているという意味で一種の拡張現実と言える 拡張現実感をアプリケーションの側面からみると その最も一般的な適用場面はユーザの実世界でのタスク遂行を支援するというものである 例えば 仮想物体を実物体上に重畳表示することによって組み立て作業 医療活動 メンテナンス作業を支援するシステムをあげることができる 本論文では ARToolKit を使ったアプリケーションを開発するために ARToolKit Home page[1] で配布されているC 言語ライブラリ郡を扱うこととする また 3DCG 作成ソフトで自作のモデルを作り 技術的に応用した物の作成を試みる 図 1-1 拡張現実モデル 3

4 第 2 章関連研究 まず, 拡張現実の実際の利用例を示す 自動車メーカーの BMW ( Bayerische Motoren Werke AG) は 広告 販促活動の一環としてマーカの描かれたパンフレットなどをカメラにかざすと 車両の CG モデルを描画するウェブサイトを提供している [2] 単にウェブコンテンツとして AR ネタを見せるだけでなく 実際の BMW が 走り でペイントする TV -CM( 図 2-1 参照 ) の放映もしている TOYOTA UK も IQ の広告 販促活動の一環として マーカ上に車両の3D モデルを重畳させるアプリケーション Toyota IQ MagicSymbol を配布している マーカの傾きを変化させることで走行状態の制御や 車両の内臓構造の確認を行うことが可能となっている [3] 図 2-1 BMW プロモーション映像. さらに 拡張現実の発展として カメラと位置 姿勢センサーを搭載した携帯電話の普及により 携帯型情報端末を用いた AR サービスの可能性が注目されている 2009 年 9 月から 頓智ドット が実環境の地理情報に対応したタグをカメラ映像に重畳する セカイカメラ が提供されている [4] iphone のカメラ機能を使って撮影した場所の位置情報を取得し ディスプレイに表示された対象にエアタグと呼ばれる付加情報を重ねて表示させるアプリケーションである エアタグはユーザが自由に貼り付けることができ コンビニやファストフード店もエアタグで見れる セカイカメラは米国で開催されたネット サービスのビジネス コンテスト TechCrunch50 で発表され 米アップルの iphone と AR を組み合わせたサービス像が話題を集めた iphone アプリで最も注目されている AR アプリである 図 2-2 セカイカメラ起動画面 4

5 そして iphone などのスマートフォン以外でも国内 3キャリアの携帯電話で楽しめる AR アプリ AR3DPlayer が登場した[5] マーカの中に QR コードが含まれており マーカを読み取るだけでプロモーションのコンテンツのダウンロードができる そのためマーカに対応した AR コンテンツをダウンロードする必要がなく利用できるので雑誌などで配布されている QR コード入りのマーカを読み込むことでスムーズに利用出来るのが特徴である これは プロモーション媒体として活用が注目されている 図 2-3 AR3DPlayer のマーカと動作例 [6] 5

6 第 3 章 ARToolKit の概要 拡張現実感技術とは Myron Krueger 氏が 1973 年に提唱した概念であり 現実の環境から受ける知覚情報にコンピュータによって作り出された情報を重ね合わせることによって 現実世界の情報を強化する技術である 日常私たちが感じている現実感とは 目や耳 鼻 口などの感覚器に与えられる刺激を脳の中で処理し感じ取っている つまり その刺激を擬似的に作り出して知覚器に与えることによって 存在しないものをあたかもそこにあるかのように実感し 体験することが出来るのである 本章で扱う ARToolKit とは 奈良先端科学技術大学院大学の加藤博一教授が開発した C/C++ 言語用のプログラミングライブラリである ARToolKit を使うことで 紙に印刷されたマーカをカメラで読み込み 位置 姿勢 座標などを計算してその上に3Dオブジェクトを描画する ( 図 3-1 参照 ) ためのライブラリである ARToolKit が提供している主な機能は カメラからの画像取得 マーカの検出とパターンの認識 マーカの3 次元位置と姿勢の計測 実写画像の3 次元 CGの合成表示である また カメラ画像の描画や仮想空間における視点の設定には GLUT(OpenGL Utility Toolkit) を用いている これは 1994 年にSGI( シリコングラフィックス ) 社のマーク ギルガード氏によって開発 OpenGL の補助ライブラリであり OSをシステムレベルで I/O を制御しているため OSに依存せずに描画できることが特徴である nate@pobox.com[7] で配布されている補助ライブラリ郡を利用する 図 3-1 ARToolKit 起動画面 6

7 第 4 章 ARToolKit の内部構造 このプログラムは 登録しているマーカを Web カメラで撮影することでマーカの位置や姿勢を計算し あたかもそこにあるかのように3DCG を表示させるものである 本章では 青い立方体を表示させるプログラムの流れ ( 図 4-1 参照 ) を説明していく また ARToolKit のコマンドは arvideoopen や arvideoinqsize などの先頭に ar がついて始まる これらの先頭文字列から定義されているヘッダーファイルを推測することが可能である また OpenGL のコマンドも gl glut などの先頭文字列で始まるコマンドが用意されている 図 4-1 ARToolKit のプログラム全体像 [8] 第 1 節メイン関数 Main() メイン関数では ARToolKit を扱うための OpenGL やビデオデバイス ウィンドウ設定などの初期化処理とメインループ関数の呼び出しを行っている 初期化関数である Init() 7

8 関数を用いてコマンドを分けている場合もあるが 本プログラムでは Main() 関数ですべての初期化を行うことにする 以下にプログラムの説明を行う. int main( int argc, char **argv ) { ARParam cparam; // カメラパラメータ ARParam wparam; // カメラパラメータ ( 作業用変数 ) int xsize, ysize; // 画像サイズ // GLUT の初期化 (1) glutinit( &argc, argv ); // ビデオデバイスの設定 (2) if ( arvideoopen( vconf_name ) < 0 ) { printf(" ビデオデバイスのエラー "); return -1; // カメラパラメータの設定 (3) if ( arvideoinqsize( &xsize, &ysize ) < 0 ) { printf(" 画像サイズを取得できませんでした \n"); return -1; if ( arparamload( cparam_name, 1, &wparam ) < 0 ) { printf(" カメラパラメータの読み込みに失敗しました \n"); return -1; arparamchangesize( &wparam, xsize, ysize, &cparam ); arinitcparam( &cparam ); // パターンファイルのロード (4) if ( (patt_id = arloadpatt(patt_name)) < 0 ) { printf(" パターンファイルの読み込みに失敗しました \n"); return -1; // ウィンドウの設定 (5) arginit( &cparam, 1.0, 0, 2, 1, 0 ); // ビデオキャプチャの開始 (6) arvideocapstart(); // メインループの開始 argmainloop( MouseEvent, KeyEvent, MainLoop ); return 0; (1)GLUT の初期化 ARtoolKit ライブラリと このプログラムにおいて GLUT のコードを使用しているので最初に GLUT の初期化を行う必要があるので glutinit() 関数を実行する また この関数は初期化関数なので OpenGL や glut などの他の関数よりも先に呼び出すことが前提である (2) ビデオデバイスの設定 arvideoopen() 関数によってビデオデバイスなどの USB カメラを使える状態に設定する 引数には ビデオデバイスの設定ファイルの名前を指定する 本プログラ 8

9 ムでは 設定ファイルには WDM_camera_para_flipV.xml という xml ファイルから読み込んでいる この xml ファイルには ビデオデバイス名の設定を行うことが可能で初期の状態でエラーが発生した場合は名前を指定する ビデオデバイスの設定に失敗した場合は ARToolKit が起動できないのでプラグラムが終了する (3) カメラパラメータの設定ここでは以下の処理を行っている 1 画像サイズの取得 (arvideoinqsize()) 2カメラパラメータファイルの読み込み (arparmload()) 3 解像度に合わせてカメラパラメータの変更 (arparamchengesize()) 4カメラパラメータを内部の変数にロード (arinitcparam()) カメラパラメータの設定には使用するカメラの解像度によってカメラパラメータの変更が必要なため ファイルから値を読み込んで内部変数にセットする前に値の変更を行っている (4) パターンファイルのロードマーカの認識に用いるパターン情報をパターンファイル (.patt) から読み込んで パターンごとに ID を割り当てる これらの 80mm 80mm のマーカ ( 図 4-2 参照 ) を自作し それを USB カメラを通してコンピュータにパターンファイルとして記録させることでマーカを自由に変更することが可能である 図 4-2 [hiro] マーカ arloadpatt() 関数を使って ファイルから読み込んだパターン情報を ARtoolkit の内部変数に格納してから ID を生成する ここで設定された ID を使ってマーカを識別している (5) ウィンドウの設定 arginit() は ARToolKit のグラフィック処理機能の初期化を行う関数でウィンドウに関する設定も行っている arginit() 関数には cparam のカメラパラメータを格納した変数へのポインである zoom の入力画像のサイズ又は表示サイズの拡大率 fullflag のフルスクリーンモードの有無 xwin の横方向の表示領域の追加数 9

10 ywin の縦方向の表示領域の追加数 hmd_flag のステレオディスプレイモードの有無などの引数が用意されている フルスクリーン表示を行いたい場合は zoom と fullflag を変更する必要がある xwin と ywin は ウィンドウ内に複数の表示領域を設けたいときに使う 本プログラムでは zoom に 1.0 fullflag に0 xwin に2 ywin に1と設定している これはメインのウィンドウの下に2つ表示領域を設けることを表している (6) ビデオキャプチャの開始とメインループのスタート各種設定が済んだら arvideocapstart() 関数によってビデオキャプチャを開始させ argmainloop() 関数を呼ぶ argmainloop() 関数はマウス入力処理関数 キーボード入力処理関数 メインループ関数の登録を行い メインループをスタートさせる関数である 第 2 節メインループ関数 MainLoop() ここでは毎フレームに行う処理を書いている 1 秒間に表示するフレーム数を計算する処理も行う また 終了処理が実行するまでメインループ関数は延々と繰り返して実行される 以下にプログラムの説明をする void MainLoop(void) { ARUint8 *image; ARMarkerInfo *marker_info; int marker_num; int j, k; // カメラ画像の取得 (1) if ( (image = arvideogetimage()) == NULL ) { arutilsleep( 2 ); return; // カメラ画像の描画 (2) argdrawmode2d(); // 入力画像の描画 argdispimage( image, 0, 0 ); argdispimage( image, 1, 1 ); // 内部画像の描画 if (ardebug && arimage!= NULL ) { argdispimage( arimage, 2, 1 ); // マーカの検出と認識 (3) if ( ardetectmarker( image, thresh, &marker_info, &marker_num ) < 0 ) { Cleanup(); exit(0); // 次の画像のキャプチャ指示 (4) arvideocapnext(); // マーカの信頼度の比較 (5) k = -1; 10

11 for( j = 0; j < marker_num; j++ ) { if ( patt_id == marker_info[j].id ) { if ( k == -1 ) k = j; else if ( marker_info[k].cf < marker_info[j].cf ) k = j; if ( k!= -1 ) { // マーカの位置 姿勢 ( 座標変換行列 ) の計算 (6) argettransmat( &marker_info[k], patt_center, patt_width, patt_trans ); // 3D オブジェクトの描画 DrawObject(); // バッファの内容を画面に表示 (7) argswapbuffers(); (1) カメラ画像の取得 arvideogetimage() 関数によってビデオデバイスから画像を取得し 画像データへのポインタである image に返す ここで使う image は ARUint8 という unsigned char 型と同義のオリジナルのポインタ型を使っている 取得した画像は arvideocapnext() または ビデオデバイス終了処理が実行されるまでバッファに保持される もし 画像が準備されていなければ NULL を返して arutilsleep() を実行して休止時間をおいてから一度メインループを抜ける これは 画像データが準備できていないと以後の処理を行えないためである (2) カメラ画像の描画 AR アプリケーションでは カメラ画像を描画した後で3D オブジェクトを重ねて描画している カメラ画像を描画するには まず argdrawmode2d() という関数によって2 次元画像を描画するための準備をした後で argdispimage() 関数を使って画像を描画する これらの関数は3D オブジェクトを描画する前に実行する必要がある argdispimage() 関数の引数 xwin と ywin は メイン関数のウィンドウ設定の際に値を入れたものである ウィンドウ内に複数の表示領域を設けたい際に 描画する場所を指定するために使う メインの表示領域の下に2つ領域を設けたい場合は xwin に 2 ywin に 1 を入れることで表示することが可能である 本プログラムでは 右下にデバッグ用のモノクロでマーカをどのように表示しているかを確認する領域と左下にユーザー視点である 3DCG が見えない領域を用意する ( 図 4-3 を参照 ) 11

12 図 4-3 デバッグ画面 (3) マーカの検出と認識 ARToolkit では 画像をモノクロ化してからマーカの候補領域を探している 引数 thresh は画像をモノクロ化する際の閾値である ウィンドウの右下に表示しているのがこの結果である ardetectmarker() 関数はカメラ画像の中からマーカを見つけ そのマーカのパターンを認識する関数である キャプチャ画像に含まれるすべてのマーカらしき部分を取得し その情報を構造体である ARMarkerInfo 型に格納している marker_num は検出したマーカらしき部分の数を示している 以下に表示するメンバをもとに一致度を比較することになる typedef struct{ int area; // マーカのピクセル数 int id; // マーカID int dir; // マーカの回転方向 (3:, 2:, 1:, 0: ) double cf; // 相関係数 double pos[2]; // マーカの中心 double line[4][3]; // 枠線 double vertex[4][2]; // マーカの頂点座標 ARMarkerInfo; (4) 次の画像のキャプチャ指示取得した画像について 画像の描画とマーカの検出処理が終わったら 次の画像を出す必要があるので 次フレームのキャプチャを指示するために arvideocapnext() という関数を使う これは arvideoimage() 関数を実行してから arvideocapnext() 関数を実行するまで取得したデータが維持されるので それまでにマーカの検出処理を終了させる必要がある 12

13 (5) マーカの信頼度の比較マーカとして検出される領域の中にはマーカではない領域 ( 誤検出 ) も含まれる マーカごとに対応したオブジェクトを正しく表示するためには 検出されたマーカの中から 指定のパターン ID を持ち かつ最も高い信頼度を持つものを探し出す必要がある ここでは 検出したマーカらしき部分と以下に予め宣言してあるパターンファイルとの比較を行う char *patt_name = "Data\\patt.hiro"; // パターンファイル名 int patt_id; // パターンID double width = 80; // パターンの幅 (mm 単位 ) double center[2] = { 0.0, 0.0 ; // パターンの中心座標 double trans[3][4]; // 座標変換行列 (6) マーカの位置 姿勢の計算 ARToolKit 最大の仕掛けが argettransmat() という関数である この関数では 検出されたマーカの情報からマーカ カメラ間の座標変換行列を求めている patt_center はマーカ上のどこに原点を置くかを決めるパラメータの役割をする 値はミリメートル単位で指定し マーカの中央に原点を置きたい場合は 以下のように指定する double center[2] = {0.0,0.0; 原点をずらして右上を原点にして3DCG を表示させたい場合はそれぞれの座標を- 4.0 にパラメータを設定することで座標をずらして原点を置くことが可能である patt_width はマーカのサイズで マーカの一辺の長さをミリメートル単位で設定する この値を正しく設定しないと 実世界における長さの単位と 表示させた3DCG の長さの単位が一致しないので注意が必要である patt_trans[3][4] ではマーカ座標系からカメラ座標系への座標変換行列で計算された結果を格納している これらのマーカやカメラの位置 姿勢を計算してから3D オブジェクトを表示している 図 4-4 座標変換行列 [9] (Xc, Yc, Zc, 1) はカメラ座標系を (Xm, Ym, Zm, 1) にはマーカ座標系 R3*3 に回転要素 T3*1 に平行移動要素を示している ( 図 4-4 参照 ) これらのように ARToolKit で求められた座標変換行列を用いてマーカ座標にカメラ座標を変換 ( 図 13

14 4-5 参照 ) して マーカの上に仮想物体を現実世界の映像に融合させて表示させることが可能になるのである 図 4-5 カメラ座標とマーカ座標の関係 (7) バッファの内容を画面に表示 ARToolKit のグラフィックス処理系ではダブルバッファが使われており 画像や CG を連続で描画する際にちらつきが起きないようにするための仕組みがある 表画面と裏画面という2つのバッファを用意して表画面を表示している間に裏画面に描画し 表と裏を入れ替えることにより 描画の過程を表にださないようにするという考え方がダブルバッファである argswapbuffers() 関数が表画面と裏画面を入れ替える役割をしている 第 3 節オブジェクト描画関数 DrawObject() 以下にプログラムを示し 内容を説明する void DrawObject(void) { double gl_para[16]; // 3D オブジェクトを描画するための準備 (1) argdrawmode3d(); argdraw3dcamera( 0, 0 ); // 座標変換行列の適用 (2) argconvglpara( patt_trans, gl_para ); glmatrixmode( GL_MODELVIEW ); glloadmatrixd( gl_para ); // 3D オブジェクトの描画 (3) gltranslatef( dx, dy, dz ); // オブジェクトの移動 glrotatef( rot, 0.0, 0.0, 1.0 ); glrotatef( 90.0, 1.0, 0.0, 0.0 ); gltranslatef( 0.0, 0.0, 20.0 ); glcolor3f( 0.0, 1.0, 0.0 ); gllinewidth( 3.0 ); glutwireteapot( 40.0 ); (1) 3D オブジェクトを描画するための準備 14

15 3 D オブジェクトを描画する前に argdrawmode3d() 関数と argdraw3dcamera() 関数を実行する必要がある argdrawmode3d() は 3 次元空間における座標系の状態を保存している OpenGL の行列を初期化する関数である argdraw3dcamera() は カメラパラメータに基づいて仮想空間における視野の範囲を決めて撮影する仮想カメラの射影変換の設定を行う関数である (2) 座標変換行列の適用 AR アプリケーションでは 座標変換行列を ARToolKit 形式から OpenGL 形式にフォーマットさせる必要があるので argettransmat() によって得られた座標変換行列をモデルビュー行列に適応させて 以後の作業をマーカ座標系の上で行えるようにします argconvglpara( patt_trans, gl_para ) は ARToolKit 形式である argettransmat(&marker_info[k], patt_center, patt_width, patt_trans) で求めた座標変換行列を OpenGL 形式に変換し gl_para に格納する役割をしている glmatrixmode( GL_MODELVIEW ) 関数は 現在の座標変換行列をモデルビューに変換してから glloadmatrixd( gl_para ) 関数でマーカの中心を原点とする座標系にすることで 以後の 3D オブジェクトの描画と操作は OpenGL の関数によって行います OpenGL の特徴は長さの単位を 実世界と同じミリメートル単位で扱えることである ただし これを実現するためには 座標変換行列を計算する際にマーカの大きさが正しく設定されていることが前提である (3)3D オブジェクト描画ここでは オブジェクトの色や描画する図形の種類 線の太さなど様々な設定を OpenGL の命令を用いて行う glcolor3f( 1.0, 0.0, 0.0) では赤色の 3D オブジェクトを描画する色を指定する命令である パラメータは赤 緑 青の順に並んでいる gllinewidth() 関数は線の太さをピクセル単位で指定するものである また 初期値は 1.0 になっている これらの設定はオブジェクトを描画する前にあらかじめ行っておく必要がある OpenGL の補助ライブラリである GLUT には 立方体や球体 ティーポットやそれらのワイヤーフレームなどの3D オブジェクトがあらかじめ関数として用意されており その関数を用いることで簡単にオブジェクトを表示することが可能である 立方体の描画関数 (glutsolidcube() 球体の描画関数(glutSolidSphere()) ティーポットの描画関数 (glutsolidteapot()) など様々な関数が用意されている ( 図 4-6 参照 ) 他に平行移動関数(glTranslatef()) 回転関数(glRotatef()) 拡大 縮小 (glscalef()) などを使って 3D オブジェクトに動きや変化を付加することが可能である 15

16 図 4-6 3D オブジェクトの球体 第 4 節キーボード入力処理関数 KeyEvent() void KeyEvent( unsigned char key, int x, int y ) { // ESC キーを入力したらアプリケーション終了 if( key == 0x1b ){ Cleanup(); exit(0); // 初期値へ キーボード入力処理関数はプログラムの初期化時に argmainloop() 関数で登録している関数である 本プログラムでは ESC キーを押すとプログラムを終了するように設定している 第 5 節マウス入力処理関数 MouseEvent() void MouseEvent(int button, int state, int x, int y) { // 入力状態を表示 printf(" ボタン :%d 状態 :%d 座標 :(x,y)=(%d,%d) \n", button, state, x, y); マウス入力処理関数は画像を表示しているウィンドウをクリックしたときにこの関数が呼ば れる 引数 button には押されたボタンの種類 state にはボタンの状態 x,y にはマウスポインタの座標値が渡される クリック時のマウスポインタの x 座標と y 座標を表示させている例を図 4-7 に示す 16

17 第 6 節終了処理関数 Cleanup() void Cleanup(void) { arvideocapstop(); arvideoclose(); argcleanup(); 図 4-7 マウスポインタの座標 // ビデオキャプチャの停止 // ビデオデバイスの終了 // グラフィック処理の終了 終了処理関数では ビデオキャプチャを停止 終了させ グラフィック処理系の終了処理を行う arvideocapstop() 関数は arvideocapstart() 関数と対になっていてビデオキャプチャ処理はスタートさせたら必ずストップさせる必要がある また 同様に arvideoclse() 関数も arvideoopen() 関数と対になっており Open したビデオデバイスは必ず Close させる 17

18 第 5 章作成した 3DCG モデルの応用 ARToolKit では OpenGL の補助ライブラリである GLUT で用意されている 3D オブジェクトだけでなく 自ら作成した 3DCG モデルを表示することも可能である これを利用することにより 3DCG モデルに動きをつけてアニメーション表示させる 第 1 節 3D モデル描画 Metasequoia( メタセコイア ) でモデリングした MQO 形式の3DCG を ARToolKit 上で表示する まず Metasequoia とは Osamu Mizuno が開発した 3D ポリゴンモデラー ( 図 5-1 参照 ) である [10] ポリゴンメッシュによる3DCG 作成に特化したソフトウェアである データの可変性を重視しており 様々なファイル形式で出力することが特徴である ただし ARToolKit で利用するためには メタセコイアオブジェクト (*mqo) で保存する 図 5-1 メタセコイアの起動画面 第 2 節 GLMetaseq 関数 Metasequoia で作成した MQO 形式の 3D モデルを ARToolKit のプログラムで表示 ( 図 5-2 参照 ) させるために用いるのが GLMetaseq 関数である この GLMetaseq 関数は工学ナビ [11] で配布している OpenGL で MQO ファイルを表示するための C/C++ 言語用のライブラリである これを用いることで自作の 3DCG モデルを簡単に拡張現実世界で表示させることが可能である 18

19 図 5-2 ARToolKit で表示させた自作 3DCG モデル (1)GLMetaseq の初期化 mqoinit(); これはプログラム開始時に行なう必要がある 初期化を行なう関数は mqoinit() である また mqoinit() 関数はかならずウィンドウ設定の arginit() 関数より後に行なう (2) モデルの読み込み if ((model = mqocreatemodel( mqo_name, 1.0)) == NULL ){ printf(" モデル読み込み失敗 \n"); mqocreatemodel() 関数を使って MQO ファイルからモデルデータの読み込みを行なう モデル情報を読み込みメモリに格納し MQO_MODEL 型という GLMetaseq で定義されているオリジナルの型に値を返す この中にはモデル情報を格納している領域を保持しているのである 以後はこの値を使ってモデルの描画と削除を行なっている この関数の引数はモデルのファイル名と大きさを指しており 1.0 で当倍である (3) モデルの描画 glpushmatrix(); glrotatef( 90.0, 1.0, 0.0, 0.0 ); mqocallmodel( model ); glpopmatrix(); mqocallmodel() は読み込んだモデルを画面に描画する関数である 引数に MQO_MODEL 型の変数を指定している Metasequoia の作成画面とは異なっており Y 軸が上を向いているものを ARToolKit ではマーカが Z 軸が上を向いているため この関数を呼ぶ前に座標を X 軸まわりに90 度回転させる必要がある これは glrotatef() で軸を調整している (4) モデルの削除 19

20 mqodeletemodel( model ); 不要になったモデルを mqodeletemodel() 関数によって削除する プログラムの終了時に ファイル読み込みを行なった全ての変数に対してモデルの削除を行なう必要がある また モデルの削除を行なった変数に対して mqocreatemodel() 関数で新しいモデルを読み込むことも出来る (5) GLMetaseq の終了処理 mqocleanup(); プログラムの終了時に GLMetaseq の終了処理も行なう必要があり これを行なう関数が mqocleanup() である これは mqodeletemodel() でモデルの削除した後に実行する 第 3 節モーションの連番 MQO 出力 Metasequoia で作成した3D モデルをアニメーションにして ARToolKit で表示する まず3D モデルに動きをつけて連番にして出力するために RokDeBone2 () というモーション作成ソフト ( 図 5-3 参照 ) で生成する このソフトウェアは MQO ファイルに動きを付けてパラパラ漫画の要領でフレームごとに連番ファイルとして出力する 連番 MQO 出力 機能を利用してアニメーションを作ることが出来る GLMetaseq では MQO_SEQUENCE 型を使ってアニメーションを ARToolKit で表示出来る この型は モデルとフレーム数を格納している これは 1 節で作成した 3DCG の人形にモーションをつけて表示させる 人形にはその場で手足を交互に動かさせて歩行をしているように見せるモーションを付加することにする 図 5-3 RokDeBorn の起動画面 (1) シーケンスの作成 MQO_SEQUENCE mqo_seq mqo_seq = mqocreatesequence( seq_name, n_frame, 0.05 ); if( mqo_seq.n_frame <= 0 ){ printf(" シーケンス読み込み失敗 \n"); return -1; 20

21 mqo_seq.now_frame = 0; printf(" シーケンス作成完了 \n"); 連番 MQO アニメーションを作るために MQO ファイルから生成したアニメーションをシーケンスとして扱い mqocreatesequence() 関数を使って連番 MQO ファイルからシーケンスを作成する seq_name には連番アニメーションのファイル n_frame にはアニメーションのフレーム数がそれぞれ格納されている 0.05 は 3DCG モデルの大きさを表している (2) シーケンスの描画 Static int j = 0; mqocallsequence(mqo_seq,j); j++; if( j >= n_frame ) j = 0; mqocallsequence() 関数を使ってアニメーションを描画させます jには連番アニメーションのシーケンスから表示させたいフレーム番号を表しており順に描画させている フレームの上限に達した場合 jを0に戻して繰り返して 順番に描画する (3) シーケンスの削除 mqodeletsequence( mqo_seq ); MQO_MODEL の時とどうように MQO_SEQUENCE でも削除用の関数があり シーケンスを終了する場合には mqodeletesequence() 関数によってシーケンスの削除を行う 21

22 第 6 章マルチマーカの考察 本章では前述したプログラムを応用して複数の模様の違うマーカを使ってそれぞれのマーカに別々のコマンドとしての役割を与えて実験することが目的である まず 3DCG は前章で使用したものを使うこととする パターンファイルは図 6-1 から図 6-4 に示す 4 種類を使うこととする 図 6-1 hiro 図 6-2 kanji 図 6-3 sample1 図 6-4 sample2 これら4つにマーカには以下のコマンドを設定することにする 1 [hiro]: マーカの上に 3DCG を表示させる 2 [hito]: 表示している 3DCG をキューブに変える 3 [sample1]: 表示している 3D オブジェクトを回転させる 4 [sample2]:[hiro] マーカから [sample2] マーカ上まで 3D オブジェクトを移動させる 第 1 節構造体 これまでのマーカを1つだけ使う場合は 以下に記述してある5つの変数でパターンファイルを管理している [13] char *patt_name = "Data/patt.hiro"; int patt_id; // パターンID double patt_trans[3][4]; // 座標変換行列 double patt_center[2] ={ 0.0, 0.0 ; // パターン中心座標 double patt_width =80.0; // パターンサイズ しかし 複数のマーカを個別に識別して管理する必要があるため これらを 1 つにまとめて以下に記述する構造体として管理する define PTT_NUM 4 // マーカの数 define PTT1_MARK_ID 0 define PTT1_PATT_NAME "Data\\patt.hiro" define PTT1_SIZE 80.0 define PTT2_MARK_ID 1 define PTT2_PATT_NAME "Data\\patt.kanji define PTT2_SIZE 60.0 define PTT3_MARK_ID 2 define PTT3_PATT_NAME "Data\\patt.sample1" define PTT3_SIZE 60.0 // パターン.hiro // パターン.kanji // パターン sample1 22

23 define PTT4_MARK_ID 3 define PTT4_PATT_NAME "Data\\patt.sample2" define PTT4_SIZE 60.0 // パターン sample2 typedef struct { char *patt_name; // パターンファイル名 int patt_id; // パターンID int mark_id; // マーカID int visible; // 検出 double width; // パターンの幅 double center[2]; // パターンの中心座標 double trans[3][4]; // 座標変換行列 PTT_T; PTT_T object[ptt_num] = { {PTT1_PATT_NAME, -1, PTT1_MARK_ID, 0, PTT1_SIZE, {0.0,0.0, {PTT2_PATT_NAME, -1, PTT2_MARK_ID, 0, PTT2_SIZE, {0.0,0.0, {PTT3_PATT_NAME, -1, PTT3_MARK_ID, 0, PTT3_SIZE, {0.0,0.0, {PTT4_PATT_NAME, -1, PTT4_MARK_ID, 0, PTT4_SIZE, {0.0,0.0 ; 1つのマーカで処理していた5つの変数で管理していたものに mark_id と visible を追加した mark_id にはパターンファイルを識別するために PTT1_MARK_ID などに格納した番号をそれぞれに与えるためのものである visible は パターンファイルごとに見つかったマーカが一致するか一致しないかを表すために使う 第 2 節パターンファイルのロード マーカを複数個使うのでそれぞれのパターンファイルを PTT_NUM に登録された数だけ arloadpatt() を実行するように書き換える また パターンファイルのロードに失敗した場合はどのパターンファイルか特定するために読み込みに失敗したパターンファイルを表示させる for (i = 0; i < PTT_NUM; i++){ if ( (object[i].patt_id = arloadpatt(object[i].patt_name)) < 0 ) { printf(" パターンファイルの読み込みに失敗しました : %s\n",object[i].patt_name); return -1; 第 3 節マーカの信頼度の比較 これもパターンファイルのロードと同じで PTT_NUMの値だけ繰り返す Webカメラでキャプチャした画像に一致するパターンファイルが検出されなかった場合にはパターンファイルごとに用意されているobject[i].visibleに 0 を入れて前の処理を繰り返す for (i = 0; i < PTT_NUM; i++){ k = -1; for( j = 0; j < marker_num; j++ ) { if ( object[i].patt_id == marker_info[j].id ) { if ( k == -1 ) k = j; else if ( marker_info[k].cf < marker_info[j].cf ) k = j; 23

24 if ( k == -1 ) { // 3D オブジェクトの描画 object[i].visible = 0; continue; 第 4 節 3Dオブジェクトとマーカの役割本節では マーカにそれぞれの役割を与えることでマーカにコマンドとしての意味を持たせる 一致するパターンファイルがあった場合 argettransmat() が実行され object[i].visibleに1を入れる // 座標変換行列取得 else{ argettransmat(&marker_info[k], object[i].center, object[i].width, object[i].trans); object[i].visible = 1; if(object[1].visible == 1) cube = 1; else cube = 0; if(object[2].visible == 1) exrz = exrz + 5.0; if (object[3].visible == 1){ // マーカ 1 の座標でカメラの位置を取得 arutilmatinv(object[0].trans, wmat1); // マーカ 2 の座標でカメラの位置を取得 arutilmatmul(wmat1, object[3].trans, wmat2); extx = extx + (wmat2[0][3] * 0.01); exty = exty + (wmat2[1][3] * 0.01); else{ if(wmat2[0][3] > 0){ if(extx >= wmat2[0][3]){ extx = wmat2[0][3]; exty = wmat2[1][3]; else{ if(extx <= wmat2[0][3]){ extx = wmat2[0][3]; exty = wmat2[1][3]; extx = 0.0; exty = 0.0; // オブジェクトを描画 if (object[0].visible == 1){ draw(object[0].trans); 24

25 if (object[0].visible > 0 && object[3].visible > 0){ arutilmatinv(object[0].trans, wmat1); arutilmatmul(wmat1, object[3].trans, wmat2); printf("%5.3f %5.3f %5.3f\n", wmat2[0][3], wmat2[1][3], wmat2[2][3]); ここでは以下の処理を行っている object[0].visible == 1 [hiro] を検出した時 マーカが一つの時と同じようにマーカの上に 3DCGを表示する ( 図 6-5 参照 ) 図 6-5 object[0] visible == 1 object[1].visible == 1 [kanji] を検出した時 3DCGをキューブに切り替える もし visibleに 0 が入っていたら 3DCGを表示する ( 図 6-6 参照 ) 図 6-6 object[0] [1] visible == 1 object[2].visible == 1 [sample1] を検出した時 3DCG を回転させる ( 図 6-7 参照 ) 25

26 図 6-7 object[0] [2] visible == 1 object[3].visible == 1 [sample2] を検出した時 object[0].visibleでマーカの上に表示された 3DCGをobject[3] のマーカに移動させる マーカの上に着くと 3DCGはその位置で停止する ( 図 6-8 参照 ) 図 6-8 object[0] [3] visible == 1 また [sample2] マーカが表示されている間 [hiro] マーカから見た [sample2] マーカの位置情報 ( 図 6-9 参照 ) を表示する これは 3DCGの移動する向きと距離を出すために wmatの配列を利用する wmatから得た座標に近づけるための計算をしている 26

27 図 つのマーカ間の距離 上記 object[1] から [3] の動作は object[0] の [hiro] マーカを検出して 3DCG を表示させているときに限る また 役割を設定した全てのマーカを検出した場合には全ての動作を組み合わせた状態を表示する つまり object[0] で 3DCG が表示され object[1] で 3DCG がキューブとして表示され object[2] で 3DCG を回転 object[3] で sample2 マーカの位置まで 3DCG を平行移動させる ( 図 6-10 参照 ) 図 6-10 object[0] [1] [2] [3] visible == 1 27

28 第 7 章まとめ ARToolKit のライブラリを利用して AR アプリケーションの開発を行ってきた 3DCG やマーカを工夫して利用することで様々な複雑な動きや改良が可能であることが分かった 本論文では複数マーカを利用した AR アプリケーションの開発において構造体を使うことで簡単にマーカごとのコマンドを設定することが出来た また コマンドを設定するにあたって2つのマーカ間の位置関係を取得することで マーカからマーカへの 3DCG の平行移動を可能にした これを利用して マーカ間の位置関係を記録させて相対的な位置関係にある複数のマーカを1つのマーカとして扱うマルチマーカにすることも可能だと思われる また もっと多くのコマンドとマーカ 3DCG モデルを用いることでカードゲームなどへの利用も可能である これからの AR アプリケーションの開発において パソコンと Web カメラでは利用出来る場所が限られてしまうことで改良する幅が狭められてしまうことが問題である 今後の課題としては 利用する場所が限定されない iphone などのネットワークを利用した携帯端末用の AR アプリケーション開発を目指す 28

29 参考文献 [1] [2] [3] [4] [5] [6] [7] xmission.com/~nate/glut.html [8] 橋本直 : ARToolKit 拡張現実感プログラミング入門 発行所 : 株式会社アスキー メディアワークス,2008. [9] [10] [11] [12] [13] 谷尻豊寿 : ARToolKit プログラミングテクニック 発行所 : 株式会社カットシステム,2008. 謝辞 研究を進めるにあたりプログラムの作成や開発環境の設定などで助言をいただいた花川ゼミの高橋一氏に感謝します 本論文を作成するにあたりご指導をいただいた 花川典子先生に感謝します 29

ARToolKit プログラムの仕組み 1: ヘッダファイルのインクルード 2: Main 関数 3: Main Loop 関数 4: マウス入力処理関数 5: キーボード入力処理関数 6: 終了処理関数 3: Main Loop 関数 1カメラ画像の取得 2カメラ画像の描画 3マーカの検出と認識

ARToolKit プログラムの仕組み 1: ヘッダファイルのインクルード 2: Main 関数 3: Main Loop 関数 4: マウス入力処理関数 5: キーボード入力処理関数 6: 終了処理関数 3: Main Loop 関数 1カメラ画像の取得 2カメラ画像の描画 3マーカの検出と認識 ARToolKit プログラムの仕組み 1: ヘッダファイルのインクルード 2: Main 関数 3: Main Loop 関数 4: マウス入力処理関数 5: キーボード入力処理関数 6: 終了処理関数 3: Main Loop 関数 1カメラ画像の取得 2カメラ画像の描画 3マーカの検出と認識 4 次の画像のキャプチャ指示 5マーカの信頼度の比較 6マーカの位置 姿勢の計算 7バッファの内容を画面に表示

More information

Microsoft Word - 上善_卒論最終版.doc

Microsoft Word - 上善_卒論最終版.doc 現実拡張 (Augment Reality) の ARToolkit による学習 2009 年 2 月 2 日 経営情報学部経営情報学科 gi05126 上善紀明 目次 はじめに 1 現実拡張とは (Augment Reality) 2 ARToolkit 2-1. ARToolkit の概要 2-2. ARToolkit プログラム 2-3. ARToolkit を使用した応用プログラム 3 3DCG

More information

課題情報シート テーマ名 : AR を利用した高知県内 PR アプリの制作 担当指導員名 : 岡本真一実施年度 : 25 年度施設名 : 四国職業能力開発大学校附属高知職業能力開発短期大学校課程名 : 専門課程訓練科名 : 電子情報技術科課題の区分 : 総合制作実習課題学生数 : 2 時間 : 12

課題情報シート テーマ名 : AR を利用した高知県内 PR アプリの制作 担当指導員名 : 岡本真一実施年度 : 25 年度施設名 : 四国職業能力開発大学校附属高知職業能力開発短期大学校課程名 : 専門課程訓練科名 : 電子情報技術科課題の区分 : 総合制作実習課題学生数 : 2 時間 : 12 課題情報シート テーマ名 : 担当指導員名 : 岡本真一実施年度 : 25 年度施設名 : 四国職業能力開発大学校附属高知職業能力開発短期大学校課程名 : 専門課程訓練科名 : 電子情報技術科課題の区分 : 総合制作実習課題学生数 : 2 時間 : 12 単位 (216h) 課題制作 開発のポイント 開発( 制作 ) のポイント AR アプリケーションの制作には C 言語が利用できる開発環境が必要となります

More information

Tekutama AR ~ 拡張現実感によるオーバーレイ表示と動作 ~ 情報物理研究室 渡部 修平 1

Tekutama AR ~ 拡張現実感によるオーバーレイ表示と動作 ~ 情報物理研究室 渡部 修平 1 Tekutama AR ~ 拡張現実感によるオーバーレイ表示と動作 ~ 情報物理研究室 渡部 修平 1 目次 項 1. はじめに 3 2. 開発環境 4 2-1. ARToolkit 4 2-2. OpenGL GLUT 5 2-3. Metasequoia 6 2-4. GLMetaseq 6 3. 3DCG モデルの作成 7 4. AR プログラムの構成 9 4-1. main 関数 10 4-2.

More information

2 2 2 OpenGL Linux Linux Video for Linux(Video4Linux, v4l ) API Video4Linux USB IEEE1394 API Linux Video for Linux 2(Video4Linux2, v4l2 ) OpenCV API U

2 2 2 OpenGL Linux Linux Video for Linux(Video4Linux, v4l ) API Video4Linux USB IEEE1394 API Linux Video for Linux 2(Video4Linux2, v4l2 ) OpenCV API U 1 26 (2) 3DCG TA 2014 10 17 1 OpenGL USB (3DCG) OpenCV CG Augmented Reality ARToolKit 3DCG 1.1 http://www.cyber.t.u-tokyo.ac.jp/~tani/class/mech_enshu/ 1.2 TA 1.3 ( ) USB (2014/11/10( ),11( ),13( )) (2012/11/17(

More information

卒業研究報告書 題目 3DCG と Web カメラの合成を表現するプログラムの制作 指導教員 綿森道夫准教授 報告者 学籍番号 : 氏名 : 尾川景子 平成 23 年 2 月 8 日 高知工科大学電子 光システム工学科 1

卒業研究報告書 題目 3DCG と Web カメラの合成を表現するプログラムの制作 指導教員 綿森道夫准教授 報告者 学籍番号 : 氏名 : 尾川景子 平成 23 年 2 月 8 日 高知工科大学電子 光システム工学科 1 卒業研究報告書 題目 3DCG と Web カメラの合成を表現するプログラムの制作 指導教員 綿森道夫准教授 報告者 学籍番号 :1110157 氏名 : 尾川景子 平成 23 年 2 月 8 日 高知工科大学電子 光システム工学科 1 第 1 章序論... 4 1-1 研究の背景... 4 1-2 研究の概要... 4 1-3 研究の新規性... 4 第 2 章 2 次元イラストの習作... 5

More information

コンピュータグラフィックスS 演習資料

コンピュータグラフィックスS 演習資料 コンピュータグラフィックス S 演習資料 第 4 回シェーディング マッピング 九州工業大学情報工学部システム創成情報工学科講義担当 : 尾下真樹 1. 演習準備 今回の演習も 前回までの演習で作成したプログラムに続けて変更を行う まずは シェーディングの演習のため 描画処理で 回転する一つの四角すいを描画するように変更する 画面をクリア ( ピクセルデータと Z バッファの両方をクリア ) glclear(

More information

AR技術を用いたグリーティングカード作成ソフトの開発

AR技術を用いたグリーティングカード作成ソフトの開発 平成 25 年度卒業研究中間発表 所属大隈研究室指導教員大隈ひとみ発表者渡邉賢明 目次 1. はじめに 2. テーマ変更について 3. 使用ソフトについて 4. 現在までにできていることについて 5. CG 映し出しのプログラムの説明と問題点 6. 音声再生のプログラムと改良点 7. 今後の課題 8. 開発環境 9. 参考文献 IKEA の事例 1. はじめに 筒井浩平氏 Android 端末での

More information

memo

memo 数理情報工学演習第一 C プログラミング演習 ( 第 5 回 ) 2015/05/11 DEPARTMENT OF MATHEMATICAL INFORMATICS 1 今日の内容 : プロトタイプ宣言 ヘッダーファイル, プログラムの分割 課題 : 疎行列 2 プロトタイプ宣言 3 C 言語では, 関数や変数は使用する前 ( ソースの上のほう ) に定義されている必要がある. double sub(int

More information

[課題案]

[課題案] デザイン情報演習 Ⅴ 課題その 2 テーマ : 実世界指向インタラクション ディスプレイを覗くと世界が変わる 私たちの実世界での活動を支援する新しいインタラクションシステムを構築する. KEYWORD: 実世界指向インターフェース, タンジブルインターフェース (tangible interface) ミックスドリアリティ (Mixed Reality; 複合現実感 ) オーグメンティドリアリティ

More information

2006年10月5日(木)実施

2006年10月5日(木)実施 2010 年 7 月 2 日 ( 金 ) 実施 ファイル処理ファイルとはファイル (file) は日常用語では紙などを綴じたものを表すが, コンピュータ用語ではデータの集合体を指す言葉である ファイルは例えば, 文書ファイルやプログラムファイルのように, 用途によって分類されることもあれば, また, テキストファイルやバイナリファイルのように, ファイルの作り方によって分類されることもある なお,

More information

プログラミングI第10回

プログラミングI第10回 プログラミング 1 第 10 回 構造体 (3) 応用 リスト操作 この資料にあるサンプルプログラムは /home/course/prog1/public_html/2007/hw/lec/sources/ 下に置いてありますから 各自自分のディレクトリにコピーして コンパイル 実行してみてください Prog1 2007 Lec 101 Programming1 Group 19992007 データ構造

More information

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 今回のプログラミングの課題 次のステップによって 徐々に難易度の高いプログラムを作成する ( 参照用の番号は よくわかる C 言語 のページ番号 ) 1. キーボード入力された整数 10 個の中から最大のものを答える 2. 整数を要素とする配列 (p.57-59) に初期値を与えておき

More information

画像ファイルを扱う これまでに学んだ条件分岐, 繰り返し, 配列, ファイル入出力を使って, 画像を扱うプログラムにチャレンジしてみよう

画像ファイルを扱う これまでに学んだ条件分岐, 繰り返し, 配列, ファイル入出力を使って, 画像を扱うプログラムにチャレンジしてみよう 第 14 回 応用 情報処理演習 ( テキスト : 第 10 章 ) 画像ファイルを扱う これまでに学んだ条件分岐, 繰り返し, 配列, ファイル入出力を使って, 画像を扱うプログラムにチャレンジしてみよう 特定色の画素の検出 ( テキスト 134 ページ ) 画像データが保存されているファイルを読み込んで, 特定色の画素の位置を検出するプログラムを作成しなさい 元画像生成画像 ( 結果の画像 )

More information

Prog1_12th

Prog1_12th 2013 年 7 月 4 日 ( 木 ) 実施 ファイル処理ファイルとはファイル (file) は日常用語では紙などを綴じたものを表すが, コンピュータ用語ではデータの集合体を指す言葉である ファイルは例えば, 文書ファイルやプログラムファイルのように, 用途によって分類されることもあれば, また, テキストファイルやバイナリファイルのように, ファイルの作り方によって分類されることもある なお,

More information

演算増幅器

演算増幅器 コンピュータグラフィックス 2 前回は GLUT を使った簡単な 2 次元グラフィックスについて習った 今週は以下の項目について 補足していく イベント駆動型プログラムの動作について コンピュータグラフィックスの座標系 イベント駆動型プログラム従来のプログラムとの違いこれまでに学習してきたプログラムは上から下に順次実行され 条件分岐や繰り返し処理によって プログラムの流れ (flow: フロー )

More information

スライド 1

スライド 1 グラフィックスの世界第 3 回 サイバーメディアセンター サイバーコミュニティ研究部門安福健祐 Processing によるアニメーション setup と draw void setup() size(400, 400); void draw() ellipse( mousex,mousey,100,100); void とか setup とか draw とかはじめて見る が出てきてややこしい ellipseは円描く関数でした

More information

ic3_cf_p1-70_1018.indd

ic3_cf_p1-70_1018.indd 章オペレーティングシステム()の基いソフトウェアで 基本ソフトウェア とも呼ばれます 第礎第 章 オペレーティングシステム () の基礎 - の役割と動作 ここでは コンピューターの基本的な構成やオペレーティングシステムの基本的な役割と操作を学習します -- コンピューターの基本構成 現代社会では さまざまな種類のコンピューター機器が各分野で利用されています 身近なものでは パソコン タブレット スマートフォンなどがありますが

More information

Microsoft Word - no11.docx

Microsoft Word - no11.docx 3. 関数 3.1 関数関数は数学の関数と同じようなイメージを持つと良いでしょう 例えば三角関数の様に一つの実数値 ( 角度 ) から値を求めますし 対数関数の様に二つの値から一つの値を出すものもあるでしょう これをイメージしてもらえば結構です つまり 何らかの値を渡し それをもとに何かの作業や計算を行い その結果を返すのが関数です C 言語の関数も基本は同じです 0 cos 1 cos(0) =

More information

問 1 図 1 の図形を作るプログラムを作成せよ 但し ウィンドウの大きさは と し 座標の関係は図 2 に示すものとする 図 1 作成する図形 原点 (0,0) (280,0) (80,0) (180,0) (260,0) (380,0) (0,160) 図 2 座標関係 問 2

問 1 図 1 の図形を作るプログラムを作成せよ 但し ウィンドウの大きさは と し 座標の関係は図 2 に示すものとする 図 1 作成する図形 原点 (0,0) (280,0) (80,0) (180,0) (260,0) (380,0) (0,160) 図 2 座標関係 問 2 問 1 図 1 の図形を作るプログラムを作成せよ 但し ウィンドウの大きさは 400 200 と し 座標の関係は図 2 に示すものとする 図 1 作成する図形 原点 (0,0) (280,0) (80,0) (180,0) (260,0) (380,0) (0,160) 図 2 座標関係 問 2 for 文を用いて図 3 の様な図形を描くプログラムを作成せよ 但し ウィンドウのサイズは 300 300

More information

Microsoft PowerPoint - kougi9.ppt

Microsoft PowerPoint - kougi9.ppt C プログラミング演習 第 9 回ポインタとリンクドリストデータ構造 1 今まで説明してきた変数 #include "stdafx.h" #include int _tmain(int argc, _TCHAR* argv[]) { double x; double y; char buf[256]; int i; double start_x; double step_x; FILE*

More information

pp2018-pp9base

pp2018-pp9base プログラミング入門 Processing プログラミング第 9 回 九州産業大学理工学部情報科学科神屋郁子 ( pp@is.kyusan-u.ac.jp ) 時限 クラス 水 1 機械 ( クラス 3) 水 2 機械 ( クラス 1) 水 4 電気 (B1 B2) 後ろ 5 列は着席禁止 3 人掛けの中央は着席禁止 今後の予定 第 9 回 : 複数の図形 (2) 繰り返しと座標変換第 回 : 画像の表示と音の再生

More information

プログラミング基礎

プログラミング基礎 C プログラミング Ⅱ 演習 2-1(a) BMI による判定 文字列, 身長 height(double 型 ), 体重 weight (double 型 ) をメンバとする構造体 Data を定義し, それぞれのメンバの値をキーボードから入力した後, BMI を計算するプログラムを作成しなさい BMI の計算は関数化すること ( ) [ ] [ ] [ ] BMI = 体重 kg 身長 m 身長

More information

/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){

/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){ ソフトゼミ A 第 6 回 関数 プログラムは関数の組み合わせでできています 今までのゼミAでも printf や scanf など様々な関数を使ってきましたが なんと関数は自分で作ることもできるのです!! 今日は自作関数を中心に扱っていきます ゲーム制作でも自作関数は避けては通れないので頑張りましょう そもそもまず 関数とは 基本的には 受け取った値に関数によって定められた操作をして その結果の値を返す

More information

Microsoft PowerPoint - kougi2.ppt

Microsoft PowerPoint - kougi2.ppt C プログラミング演習 第 2 回 Microsoft Visual Studio.NET を使ってみよう 説明 例題 1. プログラム実行の体験 コンピュータを役に立つ道具として実感する 次ページのプログラムを使って, Microsoft Visual Studio.NETでの C++ ソースファイル編集, ビルド, テスト実行の一連の過程を体験する 例題 1 のプログラムの機能 計算の繰り返し

More information

Microsoft Word - 3new.doc

Microsoft Word - 3new.doc プログラミング演習 II 講義資料 3 ポインタ I - ポインタの基礎 1 ポインタとは ポインタとはポインタは, アドレス ( データが格納されている場所 ) を扱うデータ型です つまり, アドレスを通してデータを間接的に処理します ポインタを使用する場合の, 処理の手順は以下のようになります 1 ポインタ変数を宣言する 2 ポインタ変数へアドレスを割り当てる 3 ポインタ変数を用いて処理 (

More information

Microsoft PowerPoint - 11.pptx

Microsoft PowerPoint - 11.pptx ポインタと配列 ポインタと配列 配列を関数に渡す 法 課題 : 配列によるスタックの実現 ポインタと配列 (1/2) a が配列であるとき, 変数の場合と同様に, &a[0] [] の値は配列要素 a[0] のアドレス. C 言語では, 配列は主記憶上の連続領域に割り当てられるようになっていて, 配列名 a はその配列に割り当てられた領域の先頭番地となる. したがって,&a[0] と a は同じ値.

More information

memo

memo 計数工学プログラミング演習 ( 第 4 回 ) 2016/05/10 DEPARTMENT OF MATHEMATICA INFORMATICS 1 内容 リスト 疎行列 2 連結リスト (inked ists) オブジェクトをある線形順序に並べて格納するデータ構造 単方向連結リスト (signly linked list) の要素 x キーフィールド key ポインタフィールド next x->next:

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション プログラミング応用演習 第 5 回演習 前回までのお話 ポインタ ポインタを用いた文字列処理 構造体 ファイル 再帰的構造体 リスト構造 動的メモリ管理 今日のお題 ポインタやファイルなど これまでの内容の練習 教材 以前 以下に単語を収録したファイルがあることを紹介した : /usr/share/dict/words この中からランダムに単語を取り出したファイルを用意した http://sun.ac.jp/prof/yamagu/2019app/

More information

C#の基本

C#の基本 C# の基本 ~ 開発環境の使い方 ~ C# とは プログラミング言語のひとつであり C C++ Java 等に並ぶ代表的な言語の一つである 容易に GUI( グラフィックやボタンとの連携ができる ) プログラミングが可能である メモリ管理等の煩雑な操作が必要なく 比較的初心者向きの言語である C# の利点 C C++ に比べて メモリ管理が必要ない GUIが作りやすい Javaに比べて コードの制限が少ない

More information

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード] 第 3 回 Java 基本技術講義 クラス構造と生成 33 クラスの概念 前回の基本文法でも少し出てきたが, オブジェクト指向プログラミングは という概念をうまく活用した手法である. C 言語で言う関数に似ている オブジェクト指向プログラミングはこれら状態と振る舞いを持つオブジェクトの概念をソフトウェア開発の中に適用し 様々な機能を実現する クラス= = いろんなプログラムで使いまわせる 34 クラスの概念

More information

memo

memo 計数工学プログラミング演習 ( 第 3 回 ) 2016/04/26 DEPARTMENT OF MATHEMATICAL INFORMATICS 1 内容 ポインタ malloc 構造体 2 ポインタ あるメモリ領域 ( アドレス ) を代入できる変数 型は一致している必要がある 定義時には値は不定 ( 何も指していない ) 実際にはどこかのメモリを指しているので, #include

More information

Prog1_10th

Prog1_10th 2012 年 6 月 20 日 ( 木 ) 実施ポインタ変数と文字列前回は, ポインタ演算が用いられる典型的な例として, ポインタ変数が 1 次元配列を指す場合を挙げたが, 特に,char 型の配列に格納された文字列に対し, ポインタ変数に配列の 0 番の要素の先頭アドレスを代入して文字列を指すことで, 配列そのものを操作するよりも便利な利用法が存在する なお, 文字列リテラルは, その文字列が格納されている領域の先頭アドレスを表すので,

More information

もう少し詳しい説明 1. アルゴリズムを構築するための 4 枚のサンプル画像を次々と読み込むここで重要なことは画像を順番に読み込むための文字列操作 for 文の番号 i を画像の番号として使用している strcpy は文字列のコピー,sprinf は整数を文字列に変換,strcat は文字列を繋げる

もう少し詳しい説明 1. アルゴリズムを構築するための 4 枚のサンプル画像を次々と読み込むここで重要なことは画像を順番に読み込むための文字列操作 for 文の番号 i を画像の番号として使用している strcpy は文字列のコピー,sprinf は整数を文字列に変換,strcat は文字列を繋げる サンプルプログラムの概要 1. アルゴリズムを構築するための 4 枚のサンプル画像を次々と読み込む 2. RGB 分離を行い,R 画像を用いて閾値 40 で 2 値化 3. ラベリングを行う ( ここで対象物の数を数えることになる ) 4. ラベル付された対象の重心を計算 5. ラベル値と重心位置を 2 値画像に表示 ( 赤い数字がラベル値, 緑色の点が重心位置を表している ) 6. テキストファイルに結果を書き出し

More information

Microsoft PowerPoint - [150421] CMP実習Ⅰ(2015) 橋本 CG編 第1回 幾何変換.pptx

Microsoft PowerPoint - [150421] CMP実習Ⅰ(2015) 橋本 CG編 第1回 幾何変換.pptx コンテンツ メディア プログラミング実習 Ⅰ コンピュータグラフィックス編 1 幾何変換 橋本直 今日大事なのは プログラムをじっくり読んで なぜそうなるか? を考えよう 命令によって起きていることを頭の中でイメージしよう 2 本題の前に確認 Processingでは画面の 左上隅 が原点 (0,0) x 軸の正の向きは 右 y 軸の正の向きは 下 x y : (0,0) 3 幾何変換の基本 4 幾何変換とは

More information

(2) 構造体変数の宣言 文法は次のとおり. struct 構造体タグ名構造体変数名 ; (1) と (2) は同時に行える. struct 構造体タグ名 { データ型変数 1; データ型変数 2;... 構造体変数名 ; 例 : struct STUDENT{ stdata; int id; do

(2) 構造体変数の宣言 文法は次のとおり. struct 構造体タグ名構造体変数名 ; (1) と (2) は同時に行える. struct 構造体タグ名 { データ型変数 1; データ型変数 2;... 構造体変数名 ; 例 : struct STUDENT{ stdata; int id; do 8 構造体と供用体 ( 教科書 P.71) 構造体は様々なデータ型,int 型,float 型や char 型などが混在したデータを一つのまとまり, 単位として扱える.( 配列は一つのデータ型しか扱えない.) 構造体は柔軟なデータ構造を扱えるので, プログラムを効率よく開発できる. つまり構造体を使用すると, コード量を抑え, バグを少なくし, 開発時間を短くし, 簡潔なプログラムが作れる. 共用体は,

More information

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科 バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科 ポインタ変数の扱い方 1 ポインタ変数の宣言 int *p; double *q; 2 ポインタ変数へのアドレスの代入 int *p; と宣言した時,p がポインタ変数 int x; と普通に宣言した変数に対して, p = &x; は x のアドレスのポインタ変数 p への代入 ポインタ変数の扱い方 3 間接参照 (

More information

演算増幅器

演算増幅器 ファイルこれまでにデータの入力方法として キーボードからの入力を用いてきた 構造体を習った際に実感してもらえたと思うが 入力データ量が多いときにはその作業は大変なものとなり 入力するデータを間違えた場合には最初からやり直しになる そこで今回はこれらの問題を解決するため あらかじめ入力データをテキストエディタなどで編集し ファイルとして保存したものを入力データとして用いる方法を習っていく さらにプログラムで作成したデータをファイルに出力する方法も併せて習っていく

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション プログラマー勉強会 1 回 basic.h 補足 [ 修飾子 ] const 付けた変数は初期化以外で値を設定することができなくなる 定数宣言に使う unsigned 付けた変数は符号がなくなり 正の値しか設定できない [ 条件コンパイル ] #ifdef M ここ以前に M がマクロとして定義されていれば ここ以下をコンパイルする #ifndef M ここ以前に M というマクロが定義されていなければ

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション プログラミング応用演習 第 4 回再帰的構造体 プログラミングを 余談 : 教えることの難しさ 丁寧に説明しないと分かってもらえない 説明すると 小難しくなる学生が目指すべきところプログラム例を説明されて理解できる違うやり方でも良いので自力で解決できる おっけー 動けば良い という意識でプログラミング 正しく動くことのチェックは必要 解答例と自分のやり方との比較が勉強になる 今日のお題 再帰的構造体

More information

コンピューターグラフィックスS

コンピューターグラフィックスS 今日の内容 コンピューターグラフィックス S 第 8 回 () システム創成情報工学科尾下真樹 28 年度 Q2 前回の復習 演習 (2): ポリゴンモデルの描画 変換行列 の概要 座標系 視野変換 射影変換 のまとめ 教科書 ( 参考書 ) コンピュータグラフィックス CG-ATS 協会編集 出版 2 章 ビジュアル情報処理 -CG 画像処理入門 - CG-ATS 協会編集 出版 章 (-2~-3

More information

CubePDF ユーザーズマニュアル

CubePDF ユーザーズマニュアル CubePDF ユーザーズマニュアル 2018.11.22 第 13 版 1 1. PDF への変換手順 CubePDF は仮想プリンターとしてインストールされます そのため Web ブラウザや Microsoft Word, Excel, PowerPoint など印刷ボタンのあるアプリケーションであればどれでも 次の 3 ステップで PDF へ変換することができます 1. PDF 化したいものを適当なアプリケーションで表示し

More information

コンピュータグラフィックス演習 I 2012 年 5 月 21 日 ( 月 )5 限 担当 : 桐村喬 第 7 回モデリングの仕上げ 1 カメラワークとアニメーション 今日の内容 1. カメラワーク 2. シーンの設定 3. アニメーション 前回のテクスチャの紹介 1 / 10

コンピュータグラフィックス演習 I 2012 年 5 月 21 日 ( 月 )5 限 担当 : 桐村喬 第 7 回モデリングの仕上げ 1 カメラワークとアニメーション 今日の内容 1. カメラワーク 2. シーンの設定 3. アニメーション 前回のテクスチャの紹介 1 / 10 コンピュータグラフィックス演習 I 2012 年 5 月 21 日 ( 月 )5 限 担当 : 桐村喬 第 7 回モデリングの仕上げ 1 カメラワークとアニメーション 今日の内容 1. カメラワーク 2. シーンの設定 3. アニメーション 前回のテクスチャの紹介 1 / 10 モデリングの仕上げモデルをどう見せるか? 作成した 3DCG モデルは 最終的には 作品 として 2 次元の画像あるいは

More information

Microsoft PowerPoint - kougi7.ppt

Microsoft PowerPoint - kougi7.ppt C プログラミング演習 第 7 回メモリ内でのデータの配置 例題 1. 棒グラフを描く 整数の配列から, その棒グラフを表示する ループの入れ子で, 棒グラフの表示を行う ( 参考 : 第 6 回授業の例題 3) 棒グラフの1 本の棒を画面に表示する機能を持った関数を補助関数として作る #include "stdafx.h" #include void draw_bar( int

More information

アクション講座 第1回目

アクション講座 第1回目 アクション講座第 1 回目 講師 : ウェンディアーサー (WENDY ARTHUR) 講座資料のプロジェクトファイル (zip ファイル ) はソフメ wiki にアップしてますので予めダウンロードしておいてください 講座資料のプロジェクトファイル (zip ファイル ) は解凍してソリューションファイルを開く URL は下記 http://softmedia.sakura.ne.jp/wiki/2017%e5%b9%b4%e5%ba%a6_%e3%82%a2%e3

More information

02: 変数と標準入出力

02: 変数と標準入出力 C プログラミング入門 基幹 7 ( 水 5) 13: 構造体 Linux にログインし 以下の講義ページを開いておくこと http://www-it.sci.waseda.ac.jp/ teachers/w483692/cpr1/ 2016-07-06 1 例題 : 多角形の面積 n = 5 (5 角形 ) の例 n 1 n 1 1 p 1 T 0 S = i=0 p 0 T i = i=0 2

More information

演算増幅器

演算増幅器 構造体 ここまでに char int doulbe などの基本的なデータ型に加えて 同じデータ型が連続している 配列についてのデータ構造について習った これ以外にも もっと複雑なデータ型をユーザが定義 することが可能である それが構造体と呼ばれるもので 異なる型のデータをひとかたまりのデー タとして扱うことができる 異なるデータをまとめて扱いたい時とはどんな場合だろうか 例えば 住民データを管理したい

More information

ファイル入出力

ファイル入出力 C プログラミング Ⅱ の基礎 とは ファイルへデータを書き込んだり ( 出力 ), ファイルからデータを読み込んだり ( 入力 ) する C 言語では キーボードからの入力 画面への出力と同じようなコードで 処理を実現できる プログラム 入力 出力 ファイル 出力 入力 2 入出力の基本 ストリーム プログラム上で様々な装置への入出力を行う機構様々な入出力装置を統一的な方法で扱うことができる ハードディスクなどではファイルデータによって入出力が行われる

More information

独立行政法人産業技術総合研究所 PMID-Extractor ユーザ利用マニュアル バイオメディシナル情報研究センター 2009/03/09 第 1.0 版

独立行政法人産業技術総合研究所 PMID-Extractor ユーザ利用マニュアル バイオメディシナル情報研究センター 2009/03/09 第 1.0 版 独立行政法人産業技術総合研究所 PMID-Extractor ユーザ利用マニュアル バイオメディシナル情報研究センター 2009/03/09 第 1.0 版 目次 1. はじめに... 3 2. インストール方法... 4 3. プログラムの実行... 5 4. プログラムの終了... 5 5. 操作方法... 6 6. 画面の説明... 8 付録 A:Java のインストール方法について... 11

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 講座準備 講座資料は次の URL から DL 可能 https://goo.gl/jnrfth 1 ポインタ講座 2017/01/06,09 fumi 2 はじめに ポインタはC 言語において理解が難しいとされる そのポインタを理解することを目的とする 講座は1 日で行うので 詳しいことは調べること 3 はじめに みなさん復習はしましたか? 4 & 演算子 & 演算子を使うと 変数のアドレスが得られる

More information

Microsoft PowerPoint - 04.pptx

Microsoft PowerPoint - 04.pptx 初期化 コールバック関数の登録 glutmainloop() 描画関数 マウス処理関数 キーボード処理関数などの関数ポインタを登録する イベント待ちの無限ループ 再描画? no マウス入力? no キーボード入力? no yes yes yes 描画関数の呼び出し マウス処理関数の呼び出し キーボード処理関数の呼び出し void keyboard(unsigned char key, int x,

More information

Microsoft Word - Training10_プリプロセッサ.docx

Microsoft Word - Training10_プリプロセッサ.docx Training 10 プリプロセッサ 株式会社イーシーエス出版事業推進委員会 1 Lesson1 マクロ置換 Point マクロ置換を理解しよう!! マクロ置換の機能により 文字列の置き換えをすることが出来ます プログラムの可読性と保守性 ( メンテナンス性 ) を高めることができるため よく用いられます マクロ置換で値を定義しておけば マクロの値を変更するだけで 同じマクロを使用したすべての箇所が変更ができるので便利です

More information

Microsoft PowerPoint - handout07.ppt [互換モード]

Microsoft PowerPoint - handout07.ppt [互換モード] Outline プログラミング演習第 7 回構造体 on 2012.12.06 電気通信大学情報理工学部知能機械工学科長井隆行 今日の主眼 構造体 構造体の配列 構造体とポインタ 演習課題 2 今日の主眼 配列を使うと 複数の ( 異なる型を含む ) データを扱いたい 例えば 成績データの管理 複数のデータを扱う 配列を使う! 名前学籍番号点数 ( 英語 ) 点数 ( 数学 ) Aomori 1 59.4

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション プログラミング応用演習 第 4 回再帰的構造体 前回の出席確認演習 #include int main() { FILE *fp; int c, linecount, length, maxlength; fp=fopen("/usr/share/dict/words","r"); if (fp == NULL) return 1; linecount=0; length=0;

More information

Microsoft PowerPoint - CproNt02.ppt [互換モード]

Microsoft PowerPoint - CproNt02.ppt [互換モード] 第 2 章 C プログラムの書き方 CPro:02-01 概要 C プログラムの構成要素は関数 ( プログラム = 関数の集まり ) 関数は, ヘッダと本体からなる 使用する関数は, プログラムの先頭 ( 厳密には, 使用場所より前 ) で型宣言 ( プロトタイプ宣言 ) する 関数は仮引数を用いることができる ( なくてもよい ) 関数には戻り値がある ( なくてもよい void 型 ) コメント

More information

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード]

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード] 情報工学実験 II 実験 2 アルゴリズム ( リスト構造とハッシュ ) 実験を始める前に... C 言語を復習しよう 0. プログラム書ける? 1. アドレスとポインタ 2. 構造体 3. 構造体とポインタ 0. プログラム書ける? 講義を聴いているだけで OK? 言語の要素技術を覚えれば OK? 目的のプログラム? 要素技術 データ型 配列 文字列 関数 オブジェクト クラス ポインタ 2 0.

More information

コンピュータ中級B ~Javaプログラミング~ 第3回 コンピュータと情報をやりとりするには?

コンピュータ中級B ~Javaプログラミング~  第3回 コンピュータと情報をやりとりするには? コンピュータ 3C ~ マルチメディア ~ 第 7 回 Flash で簡単なアニメーション 人間科学科コミュニケーション専攻 白銀純子 Copyright (C) Junko Shirogane, Tokyo Woman's Christian University 2011, All rights reserved. 1 Copyright (C) Junko Shirogane, Tokyo Woman's

More information

Microsoft PowerPoint - OOP.pptx

Microsoft PowerPoint - OOP.pptx 第 14 回 第 12 章アプレット 28 8 アプレットとは アプレット : ウェブ上で HTML のソースコードから参照されるプログラム.Web サーバや Web ブラウザ ( アプレットビューア ) から動的にアプレットはダウンロードされる. 289 HelloAp.java アプレットの基本事項 public class HelloAp extends Applet{ public void

More information

コンピュータグラフィックス第6回

コンピュータグラフィックス第6回 コンピュータグラフィックス 第 6 回 モデリング技法 1 ~3 次元形状表現 ~ 理工学部 兼任講師藤堂英樹 本日の講義内容 モデリング技法 1 様々な形状モデル 曲線 曲面 2014/11/10 コンピュータグラフィックス 2 CG 制作の主なワークフロー 3DCG ソフトウェアの場合 モデリング カメラ シーン アニメーション テクスチャ 質感 ライティング 画像生成 2014/11/10 コンピュータグラフィックス

More information

コンピューターグラフィックスS

コンピューターグラフィックスS 前回の演習の復習 今日の内容 コンピューターグラフィックス S 第 7 回演習 (2): ポリゴンモデルの描画 システム創成情報工学科尾下真樹 前回の復習 ポリゴンの描画方法 ( 復習 ) 基本オブジェクトの描画 ポリゴンモデルの描画 演習課題 サンプルプログラム 前回の演習の復習 opengl_sample.c 地面と 枚の青い三角形が表示される マウスの右ボタンドラッグで 視点を上下に回転 前回の演習課題.

More information

02: 変数と標準入出力

02: 変数と標準入出力 C プログラミング入門 総機 1 ( 月 1) 13: 構造体 Linux にログインし 以下の講義ページを開いておくこと http://www-it.sci.waseda.ac.jp/ teachers/w483692/cpr1/ 2015-07-06 1 例題 : 多角形の面積 n = 5 (5 角形 ) の例 n 1 n 1 p 1 S = T i = 1 2 p i p i+1 i=0 i=0

More information

第2回

第2回 第 4 回基本データ構造 1 明星大学情報学科 2 3 年前期 アルゴリズムとデータ構造 Ⅰ 第 4 回 Page 1 配列 スタック キューとその操作 4-1. 配列とその操作 配列型 同じ型の変数を並べたもの 配列にする型は 基本型 配列型 構造体 ポインタいずれでもよい 要素の並べ方を 次元 という 1 次元配列 ( 直線状 ) 2 次元配列 ( 平面状 ) 3 次元配列 ( 立体状 ) a[5]

More information

PowerPoint Template

PowerPoint Template プログラミング演習 Ⅲ Linked List P. Ravindra S. De Silva e-mail: ravi@cs.tut.ac.jp, Room F-413 URL: www.icd.cs.tut.ac.jp/~ravi/prog3/index_j.html 連結リストとは? 一つひとつの要素がその前後の要素との参照関係をもつデータ構造 A B C D 連結リストを使用する利点 - 通常の配列はサイズが固定されている

More information

円筒面で利用可能なARマーカ

円筒面で利用可能なARマーカ 円筒面で利用可能な AR マーカ AR Marker for Cylindrical Surface 2014 年 11 月 14 日 ( 金 ) 眞鍋佳嗣千葉大学大学院融合科学研究科 マーカベース AR 二次元マーカはカメラ姿勢の推定, 拡張現実等広い研究分野で利用されている 現実の風景 表示される画像 デジタル情報を付加 カメラで撮影し, ディスプレイに表示 使用方法の単純性, 認識の安定性からマーカベース

More information

Microsoft PowerPoint - prog03.ppt

Microsoft PowerPoint - prog03.ppt プログラミング言語 3 第 03 回 (2007 年 10 月 08 日 ) 1 今日の配布物 片面の用紙 1 枚 今日の課題が書かれています 本日の出欠を兼ねています 2/33 今日やること http://www.tnlab.ice.uec.ac.jp/~s-okubo/class/java06/ にアクセスすると 教材があります 2007 年 10 月 08 日分と書いてある部分が 本日の教材です

More information

Microsoft PowerPoint - kougi6.ppt

Microsoft PowerPoint - kougi6.ppt C プログラミング演習 第 6 回ファイル処理と配列 1 ファイル処理 2 ファイル読み込み ファイル プログラム ファイルの中身は変わらない 3 ファイル書き出し ファイル プログラム ファイルの中身が変わる ファイルは伸び縮みすることがある 4 例題 1. テキストファイル形式の ファイルからのデータ読み込み 次のような名簿ファイル ( テキストファイル形式 ) を読み込んで,1 列目の氏名と,3

More information

7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 1

7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 1 7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 10001 番地とすると, そこから int 型のサイズ, つまり 4 バイト分の領域が確保される.1

More information

Mapmakerfor の手順下絵を準備 作者の設定した大きさで作成する場合 下絵にする地図を挿入 トリミングと大きさの調整 大きさを調整した画像を保存 下絵を背景に設定 作成画面の大きさを調整 1 自分で用意した下絵を背景にする場合 下絵を背景に設定 作成画面の大きさを調整 画像が大きい場合シート

Mapmakerfor の手順下絵を準備 作者の設定した大きさで作成する場合 下絵にする地図を挿入 トリミングと大きさの調整 大きさを調整した画像を保存 下絵を背景に設定 作成画面の大きさを調整 1 自分で用意した下絵を背景にする場合 下絵を背景に設定 作成画面の大きさを調整 画像が大きい場合シート Mapmakerfor の手順下絵を準備 作者の設定した大きさで作成する場合 下絵にする地図を挿入 トリミングと大きさの調整 大きさを調整した画像を保存 下絵を背景に設定 作成画面の大きさを調整 1 自分で用意した下絵を背景にする場合 下絵を背景に設定 作成画面の大きさを調整 画像が大きい場合シートのズームを 100% に設定するとよいです 2 道路を描く 次ページから説明書きがありますのでよく読んで操作してください

More information

コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include <stdio.h> 2. #include <ctype.h> /*troupper,islower,isupper,tol

コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include <stdio.h> 2. #include <ctype.h> /*troupper,islower,isupper,tol コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include 2. #include /*troupper,islower,isupper,tolowerを使うため宣言*/ 3. 4. int get_n(char *); 5. void replace(char

More information

第 8 回の内容 クライアントサイド処理 JavaScript の基礎

第 8 回の内容 クライアントサイド処理 JavaScript の基礎 第 8 回の内容 クライアントサイド処理 JavaScript の基礎 クライアントサイド処理 クライアントサイド / サーバサイド クライアントサイド サーバサイド Web ブラウザ Web サーバ 動的な Web ページ Web ブラウザ Web サーバ Web ブラウザ Web サーバ リソース生成 描画 描画 リソース生成 再描画 描画 再描画 描画 リソース生成 再描画 動的な Web ページとページ遷移

More information

cp-7. 配列

cp-7. 配列 cp-7. 配列 (C プログラムの書き方を, パソコン演習で学ぶシリーズ ) https://www.kkaneko.jp/cc/adp/index.html 金子邦彦 1 本日の内容 例題 1. 月の日数配列とは. 配列の宣言. 配列の添え字. 例題 2. ベクトルの内積例題 3. 合計点と平均点例題 4. 棒グラフを描く配列と繰り返し計算の関係例題 5. 行列の和 2 次元配列 2 今日の到達目標

More information

コンピュータグラフィックス第8回

コンピュータグラフィックス第8回 コンピュータグラフィックス 第 8 回 レンダリング技法 1 ~ 基礎と概要, 隠面消去 ~ 理工学部 兼任講師藤堂英樹 レポート提出状況 課題 1 の選択が多い (STAND BY ME ドラえもん ) 体験演習型 ( 課題 3, 課題 4) の選択も多い 内訳 課題 1 課題 2 課題 3 課題 4 課題 5 2014/11/24 コンピュータグラフィックス 2 次回レポートの体験演習型 メタセコイア,

More information

HP Primeバーチャル電卓

HP Primeバーチャル電卓 HP Prime バーチャル電卓 Windows は 米国 Microsoft Corporation およびその関連会社の米国およびその他の国における商標または登録商標です 本書の内容は 将来予告なしに変更されることがあります HP 製品およびサービスに関する保証は 当該製品およびサービスに付属の保証規定に明示的に記載されているものに限られます 本書のいかなる内容も 当該保証に新たに保証を追加するものではありません

More information

ファイル入出力

ファイル入出力 C プログラミング Ⅱ の基礎 とは ファイルへデータを書き込んだり ( 出力 ), ファイルからデータを読み込んだり ( 入力 ) する C 言語では キーボードからの入力 画面への出力と同じようなコードで 処理を実現できる プログラム 入力 出力 ファイル 出力 入力 2 入出力の基本 ストリーム プログラム上で様々な装置への入出力を行う機構様々な入出力装置を統一的な方法で扱うことができる ハードディスクなどではファイルデータによって入出力が行われる

More information

slide5.pptx

slide5.pptx ソフトウェア工学入門 第 5 回コマンド作成 1 head コマンド作成 1 早速ですが 次のプログラムを head.c という名前で作成してください #include #include static void do_head(file *f, long nlines); int main(int argc, char *argv[]) { if (argc!=

More information

コンピュータグラフィックス基礎              No

コンピュータグラフィックス基礎               No 課題 6: モデリング (1) OBJView の動作確認 ( レポートには含めなくてよい ) 次ページ以降の 課題用メモ を参考にして OBJ ファイルを 3D 表示する OBJView を実行し 画面に立体が表示されることを確認するとともに 以下の機能を確認しなさい 左ドラッグによる立体の回転 右ドラッグによる拡大/ 縮小 [v] キーによる頂点の表示 非表示 サンプルに含まれる bunny_3k.obj

More information

※ ポイント ※

※ ポイント ※ 4S-RO ロボティクス実験 参考資料 ファイル入出力 : ファイルの読み込み 1 周目に計測した生体情報データを読み込み プログラムにより信号処理を行うが その際にファイルの 入出力が必要となる 実験前半ですでに学習しているが必要に応じて本資料を参考にすること 以下のようにすると指定したファイルを読み込むことができる ( 詳細は後から記述 ) int i; double --------; char

More information

Field Logic, Inc. 標準モード 3D モデル作成 配置編 Field Logic, Inc. 第 1 版

Field Logic, Inc. 標準モード 3D モデル作成 配置編 Field Logic, Inc. 第 1 版 Field Logic, Inc. 標準モード 3D モデル作成 配置編 Field Logic, Inc. 第 1 版 目次 1. 初めに... 1 本書の概要 ( 学習のポイント )... 1 2. Google SketchUp の起動... 2 3. 単純な形状をした工場の 3D モデルを作成... 3 3D モデルの作成... 3 工場の 3D モデルを STL 形式のファイルとして出力...

More information

Prog1_6th

Prog1_6th 2012 年 5 月 24 日 ( 木 ) 実施 多分岐のプログラム 前回は多段階の 2 分岐を組み合わせて 3 種類以上の場合分けを実現したが, 式の値の評価によって, 一度に多種類の場合分けを行う多分岐の利用によって見通しのよいプログラムを作成できる場合がある ( 流れ図は右図 ) 式の評価 : 値 1 : 値 2 : 値 n : 該当値無し 処理 1 処理 2 処理 n 既定の処理 switch

More information

2. 印刷対象のサイズの確認 大判印刷を行う場合 まず 印刷をする文書のサイズを確認する必要があります サイズの確認の方法はアプリケーションによって異なるので ここでは PowerPoint(2010/2013) と Adobe Acrobat を例に説明します PowerPoint2010 の場合

2. 印刷対象のサイズの確認 大判印刷を行う場合 まず 印刷をする文書のサイズを確認する必要があります サイズの確認の方法はアプリケーションによって異なるので ここでは PowerPoint(2010/2013) と Adobe Acrobat を例に説明します PowerPoint2010 の場合 大判プリンターの利用方法 2014 年 9 月 ( 更新 :2016 年 5 月 31 日 ) 情報基盤センター SC 1. 印刷前のファイルの確認 ( 大判プリンターを初めて利用する際には必ずお読みください ) 大判印刷は印刷するサイズが大きい関係でたくさんのポイントを使用します (A1/ コートで 600 ポイント A1/ 光沢フォトで 1400 ポイント ) 印刷に失敗すると損害も大きいので

More information

プログラミング基礎I(再)

プログラミング基礎I(再) 山元進 クラスとは クラスの宣言 オブジェクトの作成 クラスのメンバー フィールド 変数 配列 メソッド メソッドとは メソッドの引数 戻り値 変数の型を拡張したもの 例えば車のデータベース 車のメーカー 車種 登録番号などのデータ データベースの操作 ( 新規データのボタンなど ) プログラムで使う部品の仕様書 そのクラスのオブジェクトを作ると初めて部品になる 継承 などの仕組みにより カスタマイズが安全

More information

プログラミング実習I

プログラミング実習I プログラミング実習 I 05 関数 (1) 人間システム工学科井村誠孝 m.imura@kwansei.ac.jp 関数とは p.162 数学的には入力に対して出力が決まるもの C 言語では入出力が定まったひとまとまりの処理 入力や出力はあるときもないときもある main() も関数の一種 何かの仕事をこなしてくれる魔法のブラックボックス 例 : printf() 関数中で行われている処理の詳細を使う側は知らないが,

More information

Microsoft PowerPoint - 12.ppt [互換モード]

Microsoft PowerPoint - 12.ppt [互換モード] 第 12 回構造体 1 今回の目標 構造体を理解する 構造体の定義の仕方を理解する 構造体型を理解する 構造体型の変数 引数 戻り値を理解する 複素数同士を足し算する関数を作成し その関数を利用するプログラムを作成する 2 複素数の足し算 複素数は実部と虚部の2つの実数で 表現される 表現される z = a+ bi 2 つの複素数 z 1 = a 1+ bi 1 と z2 = a2 + b2i の和

More information

プログラミング方法論 II 第 14,15 回 ( 担当 : 鈴木伸夫 ) 問題 17. x 座標と y 座標をメンバに持つ構造体 Point を作成せよ 但し座標 は double 型とする typedef struct{ (a) x; (b) y; } Point; 問題 18. 問題 17 の

プログラミング方法論 II 第 14,15 回 ( 担当 : 鈴木伸夫 ) 問題 17. x 座標と y 座標をメンバに持つ構造体 Point を作成せよ 但し座標 は double 型とする typedef struct{ (a) x; (b) y; } Point; 問題 18. 問題 17 の プログラミング方法論 II 第 14,15 回 ( 担当 : 鈴木伸夫 ) 問題 17. x 座標と y 座標をメンバに持つ構造体 Point を作成せよ 但し座標 は double 型とする typedef struct{ (a) x; (b) y; Point; 問題 18. 問題 17 の Point を用いて 2 点の座標を入力するとその 2 点間の距 離を表示するプログラムを作成せよ 平方根は

More information

関数の定義域を制限する 関数のコマンドを入力バーに打つことにより 関数の定義域を制限することが出来ます Function[ < 関数 >, <x の開始値 >, <x の終了値 > ] 例えば f(x) = x 2 2x + 1 ( 1 < x < 4) のグラフを描くには Function[ x^

関数の定義域を制限する 関数のコマンドを入力バーに打つことにより 関数の定義域を制限することが出来ます Function[ < 関数 >, <x の開始値 >, <x の終了値 > ] 例えば f(x) = x 2 2x + 1 ( 1 < x < 4) のグラフを描くには Function[ x^ この節では GeoGebra を用いて関数のグラフを描画する基本事項を扱います 画面下部にある入力バーから式を入力し 後から書式設定により色や名前を整えることが出来ます グラフィックスビューによる作図は 後の章で扱います 1.1 グラフの挿入関数のグラフは 関数 y = f(x) を満たす (x, y) を座標とする全ての点を描くことです 入力バーを用いれば 関数を直接入力することが出来 その関数のグラフを作図することが出来ます

More information

Wordの学習

Wordの学習 Windows10 の基本操作 第 1 章パソコンを学ぶこととは パソコンの動作概要 本体装置 平成 28 年 4 月 NPO 法人六樹会パソコンサロン 2 パソコンの構成 平成 28 年 4 月 NPO 法人六樹会パソコンサロン 3 パソコンの構成 平成 28 年 4 月 NPO 法人六樹会パソコンサロン 4 GUI とは テキスト =2 ページ GUI の要素 Window ( ウィンドウ )

More information

プログラミング基礎

プログラミング基礎 C プログラミング 演習 アルゴリズム基礎論 演習 第 10 回 今後の予定 12/22( 月 ) 期末試験 (60 分間 ) 場所 :A1611 時間 :16:20~17:20 課題の最終提出締切 :12/19( 金 ) これ以降の新規提出は評価されない 12/22までに最終状況を提示するので, 提出したのに や になってる人は自分の提出内容や提出先を再確認した上で12/26までに問い合わせること

More information

program7app.ppt

program7app.ppt プログラム理論と言語第 7 回 ポインタと配列, 高階関数, まとめ 有村博紀 吉岡真治 公開スライド PDF( 情報知識ネットワーク研 HP/ 授業 ) http://www-ikn.ist.hokudai.ac.jp/~arim/pub/proriron/ 本スライドは,2015 北海道大学吉岡真治 プログラム理論と言語, に基づいて, 現著者の承諾のもとに, 改訂者 ( 有村 ) が加筆修正しています.

More information

PowerPoint2003基礎編

PowerPoint2003基礎編 はじめに 1 PowerPoint の概要 2 1 PowerPoint とは 2 2 プレゼンテーションとは 2 3 PowerPoint でできること 3 4 プレゼンテーション作成の流れ 4 5 PowerPoint の起動 5 6 PowerPoint の画面 6 7 作業ウィンドウを閉じる 8 8 ツールバーを 2 行にしたい時は 9 第 1 章新しいプレゼンテーションを作ろう 1 レッスン

More information

Microsoft PowerPoint ppt

Microsoft PowerPoint ppt 基礎演習 3 C 言語の基礎 (5) 第 05 回 (20 年 07 月 07 日 ) メモリとポインタの概念 ビットとバイト 計算機内部では データは2 進数で保存している 計算機は メモリにデータを蓄えている bit 1bit 0 もしくは 1 のどちらかを保存 byte 1byte 1bitが8つ集まっている byte が メモリの基本単位として使用される メモリとアドレス メモリは 1byte

More information

メソッドのまとめ

メソッドのまとめ 配列 (2) 2 次元配列, String http://jv2005.cis.k.hosei.c.jp/ 授業の前に自己点検 配列変数に格納される配列の ID と配列の実体の区別ができていますか 配列変数の宣言と配列の実体の生成の区別ができていますか メソッドの引数に配列が渡されるとき 実際に渡されるものは何ですか このことの重要な帰結は何ですか 引数の値渡しと参照渡しということばを例を挙げて説明できますか

More information

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く 変数 入出力 演算子ここまでに C 言語プログラミングの様子を知ってもらうため printf 文 変数 scanf 文 if 文を使った簡単なプログラムを紹介した 今回は変数の詳細について習い それに併せて使い方が増える入出力処理の方法を習う また 演算子についての復習と供に新しい演算子を紹介する 変数の宣言プログラムでデータを取り扱う場合には対象となるデータを保存する必要がでてくる このデータを保存する場所のことを

More information

演算増幅器

演算増幅器 スペースインベーダーもどき 1000 行プログラムの参考として スペースインベーダーもどきのプログラムを配布する いくつか習って いないものもあるので 補足の説明を加えていく 文字列の描画 文字の描画は glutbitmapcharacter() を用いる これは以下のようにして利用する int i; char *str = "Display String"; glcolor3f(0.0, 0.0,

More information

Prog1_6th

Prog1_6th 2019 年 10 月 31 日 ( 木 ) 実施配列同種のデータ型を有する複数のデータ ( 要素 ) を番号付けして, ひとまとまりの対象として扱うものを配列と呼ぶ 要素 point[0] point[1] point[2] point[3] point[4] 配列 配列の取り扱いに関して, 次のような特徴がある 1. プログラム中で用いる配列変数 ( 配列の本体を参照する参照型の変数 ) は必ず宣言しておく

More information

ファクス送信用変換ソフト 操作説明書_UA

ファクス送信用変換ソフト 操作説明書_UA ファクス送信用変換ソフト操作説明書 ファクス送信用変換ソフトのインストールから操作までを説明します 本書では ファクス送信用変換ソフトを 本ソフト と表記している場合があります ファクス送信用変換ソフトについて...2 ファクス送信用変換ソフトをインストールする...3 ファクス送信用変換ソフトを再インストールする...5 ファクス送信用変換ソフトをアンインストールする...5 Windows 10

More information

Microsoft Word - SKY操作マニュアル.doc

Microsoft Word - SKY操作マニュアル.doc 2. 使用方法 SKY の使用方法について説明する前に 画面構成について説明する SKY は図 c-2 に示すようにシングルインターフェースドキュメント (SDI) で作成しており 図 3 に示すメニュバーに機能拡張処理を実行可能な項目を作成している また メニューの構成を図 4 に示すとおり 1ファイル 2イメージ 3 設定 4フィルタの4つの大きな項目に分かれる 1 図 2 SKY のメイン画面

More information

謗域・ュ逕ィppt

謗域・ュ逕ィppt 情報工学 2017 年度後期第 5 回 [11 月 1 日 ] 静岡大学 工学研究科機械工学専攻ロボット 計測情報講座創造科学技術大学院情報科学専攻 三浦憲二郎 講義日程 第 6 回 11 月 8 日画像処理パート第 1 回 第 7 回 11 月 15 日 CGパート第 6 回 第 8 回 11 月 22 日 CGパート第 7 回 第 9 回 11 月 29 日 CGパート試験 講義アウトライン [11

More information

基本作図・編集

基本作図・編集 基本作図パターン 基本作図 編集 ) 線の作図 ) 補助線の作図 ) 連続線の作図 ) 平行線の作図 ) 拡大表示 縮小表示 6) 座標の入力 7) 矩形の作図 8) 円の作図 9) 距離の計測 0) 寸法線の作図 ) 連続寸法線の作図 ) 文字の作図 6 ) ラベルの作図 6 ) バルーンの作図 6 ) 回路番号の作図 7 基本編集パターン ) コマンドキャンセル ピックキャンセル 8 ) 領域選択

More information

Microsoft PowerPoint - kougi8.ppt

Microsoft PowerPoint - kougi8.ppt C プログラミング演習 第 8 回構造体とレコードデータファイル 1 例題 1. バイナリファイル形式のファイル からのデータ読み込み 次のような名簿ファイル ( バイナリファイル形式 ) を読み込んで, 画面に表示するプログラムを作る name Ken Bill Mike age 20 32 35 address NewYork HongKong Paris 名簿ファイル 2 #include "stdafx.h"

More information

UMLプロファイル 機能ガイド

UMLプロファイル 機能ガイド UML Profile guide by SparxSystems Japan Enterprise Architect 日本語版 UML プロファイル機能ガイド (2016/10/07 最終更新 ) 1. はじめに UML では ステレオタイプを利用することで既存の要素に意味を追加し 拡張して利用することができます このステレオタイプは個々の要素に対して個別に指定することもできますが ステレオタイプの意味と適用する

More information