謗域・ュ逕ィppt

Similar documents
謗域・ュ逕ィppt

謗域・ュ逕ィppt

3D グラフィックス処理の一般過程 1. 3D グラフィックス処理の一般過程

スライド 1

演算増幅器

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

JavaプログラミングⅠ

プログラミング実習I

PowerPoint プレゼンテーション

Microsoft Word - 18環設演付録0508.doc

PowerPoint プレゼンテーション

ゲームエンジンの構成要素

情報システム設計論II ユーザインタフェース(1)

gengo1-2

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

Microsoft Word - 3new.doc

Fair Curve and Surface Design System Using Tangent Control

untitled

1. 関数 scanf() 関数 printf() は変数の値を画面に表示しますが それに対し関数 scanf() はキーボードで入力した値を変数に代入します この関数を活用することで対話式 ( ユーザーの操作に応じて処理を行う ) プログラムを作ることができるようになります 整数の和

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

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

プログラミング実習I

2 3 OpenGL 2 OpenGL OpenGL(Open Graphics Library) Silicon Graphics (SGI) 3D OpenGL SGI HP, SUN, IBM UNIX Linux, FreeBSD PC UNIX Windows, Mac OS API PD

情報処理Ⅰ演習

講習No.1

スライド 1

Microsoft PowerPoint - 計算機言語 第7回.ppt

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

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

Microsoft PowerPoint - 説明2_演算と型(C_guide2)【2015新教材対応確認済み】.pptx

PowerPoint プレゼンテーション

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

スライド 1

講習No.12

プログラミングI 第2回 数理物理,総合理学等向け

解答編 第 7 章実数型の計算と標準数学関数 演習問題 7.1 文法事項 1 ) 暗黙の型変換とは何か答えなさい 代入演算子 (=) や算術演算子 (+,-,*,/,%) では 2 つの演算項のデータ型が揃っている事が必要です 2 つの演算項のデータ型が異なる場合 可能ならば 演算項のデータ型を変換

2 2 OpenGL OpenGL OpenGL(Open Graphics Library) Silicon Graphics (SGI) 3D OpenGL SGI HP, SUN,

JavaプログラミングⅠ

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

相関係数と偏差ベクトル

System.out.println("char : " + (int)character.min_value + "~" + (int)character.max_value); System.out.println("float : " + Float.MIN_VALUE + "~" + Flo

libaux.dvi

memo

Microsoft PowerPoint - 04.pptx

Microsoft PowerPoint - VBA解説1.ppt [互換モード]

OpenGL & GLUTの基本関数の説明

スライド 1

Microsoft Word - no02.doc

Processingをはじめよう

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

CプログラミングI

準備 計算結果を可視化するために OpenGL を 利用する. 2

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

Microsoft PowerPoint - 3.pptx

Java講座

講習No.10

2018年度 東京大・理系数学

Microsoft PowerPoint - prog08.ppt

PowerPoint Presentation

Microsoft Word - no11.docx

2 2 OpenGL ( ) OpenGL ( ) glclearcolor(glclampf red, GLclampf green, GLclampf

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問

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

kiso2-06.key

プログラミング基礎

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

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

Microsoft Word - 92.doc

Microsoft Word - Cプログラミング演習(3)

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

Microsoft PowerPoint - chap10_OOP.ppt

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

Microsoft PowerPoint - 11.pptx

ポインタ変数

memo

Javaプログラムの実行手順

JavaプログラミングⅠ

PowerPoint プレゼンテーション - 物理学情報処理演習

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

情報工学実験 Ⅱ グラフィックプログラミング基礎 担当教員名 : 赤嶺有平 提出日 :2010 年 12 月 9 日 学籍番号 : B 氏名 : 大城佳明 - 1 -

数値計算

マークアップ言語

Taro-ポインタ変数Ⅰ(公開版).j

Microsoft Word - Cプログラミング演習(1)_2012

PowerPoint プレゼンテーション

Prog1_6th

演習課題No12

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

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

PowerPoint Presentation

第二回独習 Java ゼミ 第二章クラスとメソッド 2.1 メソッドの構造 2.2 静的メソッドと静的変数の概要 2.3 インスタンスメソッドとインスタンス変数の概要 2.4 Integerクラス 2006/04/19 神津健太

関数の中で宣言された変数の有効範囲はその関数の中だけです さっきの rectangle _s で宣言されている変数 s は他の関数では使用できません ( 別の関数で同じ名前の変数を宣言することはできますが 全く別の変数として扱われます このように ある関数の中で宣言されている変数のことをその関数の

C.1 GLSL ES 言語リファレンス この付録は WebGL 用のシェーダをプログラムするために使われるGLSL ES 言語のリファレンスである GLSL ESの詳細は GLSL_ES_Specifi

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

memo

沼津工業高等専門学校

問 2 ( 型変換 ) 次のプログラムを実行しても正しい結果が得られない 何が間違いかを指摘し 正しく修正せよ ただし int サイズが 2 バイト long サイズが 4 バイトの処理系での演算を仮定する #include <stdio.h> int main( void ) { int a =

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

gengo1-11

Microsoft PowerPoint - C1(演算と変数).ppt

Transcription:

情報工学 217 年度後期第 4 回 [1 月 25 日 ] 静岡大学 工学研究科機械工学専攻ロボット 計測情報講座創造科学技術大学院情報科学専攻 三浦憲二郎

ローカル座標系による移動

講義アウトライン [1 月 25 日 ] ビジュアル情報処理 1.3.4 投影変換 1.3.5 いろいろな座標系と変換 OpenGL 投影変換 曲線の描画 トロコイド ( 外トロコイドと内トロコイド )

頂点変換の手順

射影変換の種類 3D 図形をそのままの形で 2D ディスプレイに表示することはできない. 3D 図形を 2D 図形に変換射影変換 正射影変換 (orthographic projection) 透視変換 (perspective projection)

正射影変換と透視変換 正射影変換 (orthographic projection) 1. 無限の位置から立体を見た場合に相当する射影変換 2. 視点と図形との相対的な位置関係とは無関係 透視変換 (perspective projection) 1. 視点から図形が離れれば離れるほど小さく変換 2. 見える領域 ( 視体積 ) がピラミッド型

正射影変換を表す行列簡単な例として, xy 平面への正射影する. この場合, 視点は z 軸上のどの位置にあっても ( どの位置から図形を見ても ) 同じように射影され ( 見れ ) る. 変換行列 T 1 1 1 T

正射影変換 :glortho() コマンド glortho() void glortho(gldouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far )

透視変換の計算 視点 V=(,,k) x' x k z k x x' z 1 k y y' z 1 k

透視変換を表す行列視点 V=(,,k) k z y y k z x x k z x k x 1 ' 1 ' ' 1 1 1 1 k T

透視変換 :glfrustum() コマンド glfrustum() void glfrustum(gldouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far )

透視変換 :gluperspective() コマンド gluperspective() void gluperspective(gldouble fovy, GLdouble aspect, GLdouble near, GLdouble far)

視界変換 :glulookat() コマンド glulookat() void glulookat(gldouble eyex, GLdouble eyey, GLdouble eyez, GLdouble centerx, GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy, GLdouble upz) 注意 : モデルビュー行列 を変更する.

コマンド glviewport() ビューポート変換 void glviewport(glint x, GLint y, GLsizei width, GLsizei height)

ウインドウサイズの変更 int void ourreshape(int width, int height) { glviewport(,, width, height); glmatrixmode(gl_projection); glloadidentity(); gluperspective(3., (GLfloat)width/(GLfloat)height, 1., 1.); }

C 言語の基本的な知識と用語 #defineとは? 説明 defineは文字列の置き換えを行う 次のような書式になる #define 文字列 1 文字列 2 たとえば 次のように定義する #define SIZE 5 こうするとプログラム中の SIZE という文字はコンパイルの時に 5 という数値に置き換わる たとえば以下のように用いる #define SIZE 5 int a; a = SIZE + 5; こうすると a には 55 が入る 一般に define で定義される名前 ( 上の例では SIZE) は普通の変数と区別するために大文字で書くのが慣例である

C 言語の解説 変数 - その 2 ( 小数 ) 変数 - その 3 ( グローバル変数 ) 算術演算子 - その 1( + - * / % ) 数学関数 ( sin, cos ) 算術演算子 - その 2 ( 優先順位と結合規則 )

変数 - その 2( 小数 ) 説明 データ ( 数値 ) を記憶しておく箱を変数と言う 変数は使用する前に保持するデータの型を指定して宣言しなければならない すでに整数を保存するデータ型として int を学んだが 小数を保存するデータ型として float double というデータ型がある C 言語では小数のデータ型のことを 浮動小数点型 と呼んでいる floatとdoubleの違いは小数を保存するサイズで doubleの方がより多くの桁数を保持できる 絶対的なサイズ ( 何桁までデータを保持するか ) は処理系に依存する 用例 double x; /* double 型の変数 x を宣言する */ x =.5; /* 変数に値を代入する */

変数 - その 3( グローバル変数 ) 説明 Cでは関数の内部で宣言した変数は その関数の中だけで有効である 逆に言えばある関数から 別の関数の内部で宣言されている変数をつかうことはできない このような変数の機能はローカル ( 局所的 ) なのでこれを ローカル変数 と呼んでいる それに対してどの関数からでも使うことのできる変数を グローバル変数 と呼んでいる グローバル変数は関数の外で定義される

変数その 3( グローバル変数 ) ローカル変数は特定関数の内部でしか使うことができない このことは逆に言うと 他の関数の内部で同じ名前の変数を使っても衝突が起きない 下の例では functionという関数とmain 関数の中で変数 a を定義しているが この2つの変数 a は全く関係のない独立した変数として働く #include<stdio.h> int g; function() { int a; /* g も有効 */ } main() { int a, b; /* g も有効 */ }

算術演算子 その 1(+ -*/) 説明 演算子 説明 例 + 正符号 a = +b; - 負符号 a = -b; + 加算 ( 足し算 ) a = b + c; - 減算 ( 引き算 ) a = b c; * 乗算 ( かけ算 ) a = b * c; / 除算 ( 割り算 ) a = b / c; % 余り a = b % c; 算術演算子は数値を計算する 結果として数値を得る 整数除算を行うと 余りは切り捨てられる また整数に対して % 演算子を使うと余りを求める ことができる で除算すると結果は不定になる

算術演算子 その 1(+ -*/) 用例 int a, b, c; double d, e, f; b = 5; c = 3; e = 5.; f = 3.; a = b + c; /* a = 8 */ a = b - c; /* a = 2 */ a = b * c; /* a = 15 */ a = b / c; /* a = 1 */ d = e / f; /* d = 1.6666 */ a = b % c; /* a = 2 */

数学関数 (cos sin) 説明 C にはさまざまな数学関数が用意されているが ここでは sin と cos に ついて説明する sin は引数にラジアン値を与えると サイン値 ( 正弦値 ) を返す cos は同様にコサイン値 ( 余弦値 ) を返す 引数が度数ではなくラジアン値であることに注意する ラジアン sin cos については高校の数学の教科書を参照して思い出す 簡単に書くと 18 度は 3.14159 (π) ラジアン 36 度は 6.28318 (2π) ラジアン

数学関数 (cos sin)

数学関数 (cos sin) 用例 #define P 3.141592 /* P は π */ main() { double a, b, c; a = 75.; /* a に角度 75 度 */ b = sin(a/18*p); /* sinの計算 */ c = cos(a/18*p); /* cosの計算 */ } 注意 : a/18*p によって角度 (degree) からラジアンに変換

算術演算子 その 2( 優先順位と結合規則 ) 説明 これまでに説明した算術演算子 ( 他にも演算子はあるが ) には 優先順位が ある これはたとえば 1+2*3 では 2*3 が先に計算されて 結果は 7 になる といったことである もし 1+2 を優先して演算したいときは 優先順位が もっとも高い ( ) を用いて 順位を切り替える すなわち (1+2)*3 とす る

結合規則 もうひとつ演算子には結合規則というものがある 一つの式の中に同順位の演算子が存在した場合 結合法則に基づいて優先評価される たとえば a = 1; b = 2; a = b = 3; では変数 a と b の値は共に 3 になる これは演算子 ' = ' の結合規則が右結合的 ( 右から左に結合する ) となっているからである このため式はまず右側の b = 3 が実行され そのあと a = b が実行される

算術演算子 その 2( 優先順位と結合法則 ) また 8 / 4 * 2 という式では '/' と '*' の優先順位は等しいけれど左結合的であるため ( 8 / 4 ) * 2 として働き 結果は 4 となる

算術演算子 その 2( 優先順位と結合法則 ) 種類 演算子結合法則カッコ ( ) 乗除 * / % 加減 + - 比較 < <= > >= 等値 ==!= 論理積 && 論理和 代入 = += -= *= /= %= コンマ,

第 4 回課題 #include <GL/glut.h> #include <math.h> #define PI 3.141592653589793 /* 円周率 π */ void display(void) { double x, y, x1, y1, t; glclear(gl_color_buffer_bit); /* 背景のクリア */ glbegin(gl_lines); /* 線分を描画する */ for(t =.; t < PI; t +=.3){ x = cos(t); /* x 座標を計算する */ y = sin(t); /* y 座標を計算する */ if(t!=.){ glvertex2f(x, y); glvertex2f(x1, y1); /* 始点 終点の指定 */ } x1 = x; y1 = y; /* 座標を保存しておく */ } glend(); /* 線分の描画終了 */ glflush(); /* 画面を再描画する */ }

課題 A (a) きれいな一周の円をかけ 始点, 終点の一致, 線分の細かさ (b) 半径を指定し 円をかけ EX. 半径? float r; double s; scanf("%f", &r); scanf("%lf", &s); (c) n 重の円をえがけ Ex. 半径, n? (d) 楕円を n 重にえがけ Ex. 半径, a, b, n? (x, y) = (a * cos(t), b * sin(t))

課題 B (a) エピトロコイド (epitrochoid: 外トロコイド ) をかけ Ex. a b c? x=(a+b)*cos(t)-c*cos((a/b+1.)*t) y=(a+b)*sin(t)-c*sin((a/b+1.)*t) Ex. a=1., b=.2, c=.3 (b) c の値をかえて重ね書きをおこなえ

課題 B x=(a+b)*cos(t)-c*cos((a/b+1.)*t) y=(a+b)*sin(t)-c*sin((a/b+1.)*t)

課題 C (a) ハイポトロコイド (hypotrochoid: 内トロコイド ) をかけ Ex. a b c? x=(a-b)*cos(t)+c*cos((a/b-1.)*t) y=(a-b)*sin(t)-c*sin((a/b-1.)*t) (b) cの値をかえて重ね書きをおこなえ

課題 C x=(a-b)*cos(t)+c*cos((a/b-1.)*t) y=(a-b)*sin(t)-c*sin((a/b-1.)*t)

まとめ ビジュアル情報処理 1.3.4 投影変換 1.3.5 いろいろな座標系と変換 OpenGL 投影変換 曲線の描画 トロコイド ( 外トロコイドと内トロコイド )