Microsoft Word - 92.doc

Similar documents
応力とひずみ.ppt

PowerPoint プレゼンテーション

Microsoft Word - BouncingBall.doc

のようにする 上の例では GeneralPath を new するときに コンストラクタに何も指定していないが 直線を表す Line, 四角形を表す Rectangle などを引数に与えてもよい 矢印を作成するメソッドの引数矢印を表す GeneralPath を生成するために getarrowpat

0 21 カラー反射率 slope aspect 図 2.9: 復元結果例 2.4 画像生成技術としての計算フォトグラフィ 3 次元情報を復元することにより, 画像生成 ( レンダリング ) に応用することが可能である. 近年, コンピュータにより, カメラで直接得られない画像を生成する技術分野が生

Processingをはじめよう

Javaプログラムの実行手順

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

JavaプログラミングⅠ

C#の基本2 ~プログラムの制御構造~

アプリケーション

Microsoft PowerPoint - 講義資料-mlib

Microsoft PowerPoint 電子情報理工学特論.pptx

断面の諸量

PowerPoint プレゼンテーション

プロシード

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


10/31 Java AWTの基本構造(Frameクラスの継承) 演習課題資料

Prog2_12th

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

手書認識 グラフ描画 Step2-2 手書認識 : 認識結果を PaintPanel で描画する < 属性付き文字列 AttributedString> 標準出力では分かりにくいうえに認識結果を使えないので 認識するごとに PaintPanel に文字を描画することにする ここで 数式はただの文字列

Visual Studio2008 C# で JAN13 バーコードイメージを作成 xbase 言語をご利用の現場でバーコードの出力が必要なことが多々あります xbase 言語製品によっては 標準でバーコード描画機能が付加されているものもあるようで す C# では バーコードフォントを利用したりバー

<4D F736F F D2094F795AA8C608EAE8E478B4C92A08250>

ドッグファイト

07年1級_CG記述解答-3.indd

Microsoft PowerPoint - lec06 [互換モード]

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

レコード class Point attr_accessor("x", "y") インスタンス変数の宣言 point.rb

// ステージを設定します stage.setscene(scene); stage.settitle(" キャンバス "); // ステージを表示します stage.show(); public static void main(string[] args) launch(args); キャンバス

スライド 1

vecrot

PowerPoint Presentation

Taro-twokansu3.jtd

Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文

JavaプログラミングⅠ

program7app.ppt

JavaプログラミングⅠ

Java講座

Microsoft Word - Grspes…~…j…}…j…–…A…‰6.0.doc

謗域・ュ逕ィppt

謗域・ュ逕ィppt

スライド 1

平成 年 月 7 日 ( 土 第 75 回数学教育実践研究会アスティ 45 ビル F セミナールーム A 札幌医科大学 年 P ab, を正の定数とする 平面上において ( a, を中心とする円 Q 4 C と (, b を中心とする円 C が 原点 O で外接している また P を円 C 上の点と

Microsoft PowerPoint - ロボットの運動学forUpload'C5Q [互換モード]

デジタル表現論・第6回

2 図微小要素の流体の流入出 方向の断面の流体の流入出の収支断面 Ⅰ から微小要素に流入出する流体の流量 Q 断面 Ⅰ は 以下のように定式化できる Q 断面 Ⅰ 流量 密度 流速 断面 Ⅰ の面積 微小要素の断面 Ⅰ から だけ移動した断面 Ⅱ を流入出する流体の流量 Q 断面 Ⅱ は以下のように

Assignment_.java 課題 : 転置行列 / class Assignment_ public static void main(string[] args) int i,j; int[][] array = 1,,,,,,,,,,,,,1,1,; 行 列行列 i

Windows (L): D:\jyugyou\ D:\jyugyou\ D:\jyugyou\ (N): en2 OK 2

Microsoft Word - gnuplot

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

課題

A

2017年度 信州大・医系数学

19 3!! (+) (>) (++) (+=) for while 3.1!! (20, 20) (1)(Blocks1.java) import javax.swing.japplet; import java.awt.graphics;

演算増幅器

PowerPoint プレゼンテーション

レコードとオブジェクト

レコード class Point attr_accessor("x", "y") インスタンス変数の宣言 point.rb

連続講座 断層映像法の基礎第 34 回 : 篠原 広行 他 放射状に 線を照射し 対面に検出器の列を置いておき 一度に 1 つの角度データを取得する 後は全体を 1 回転しながら次々と角度データを取得することで計測を終了する この計測で得られる投影はとなる ここで l はファンビームのファンに沿った

Microsoft PowerPoint P演習 第10回 関数.ppt [互換モード]

情報処理Ⅰ

スライド 1

f(x,y) (x,y) x (x,y), y (x,y) f(x,y) x y f x (x,y),f y (x,y) B p.1/14

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

バスケットボール

2018年度 東京大・理系数学

6 2 2 x y x y t P P = P t P = I P P P ( ) ( ) ,, ( ) ( ) cos θ sin θ cos θ sin θ, sin θ cos θ sin θ cos θ y x θ x θ P

パソコンシミュレータの現状

TOEIC

ープのロープ長以下であれば実現可能である ケース 3: 3 本のロープの杭の位置を点 P 1 = (x 1, y 1, 0), 点 P 2 = (x 2, y 2, 0), 点 P 3 = (x 3, y 3, 0) とする 点 P 1 = (x 1, y 1, 0), 点 P 2 = (x 2,

スライド 1

02: 変数と標準入出力

4 4 θ X θ P θ 4. 0, 405 P 0 X 405 X P 4. () 60 () 45 () 40 (4) 765 (5) 40 B 60 0 P = 90, = ( ) = X

< F2D82518E9F8AD CC834F CC8CFC82AB82C68D4C>

Microsoft Word - 3new.doc

8 / 0 1 i++ i 1 i-- i C !!! C 2

02: 変数と標準入出力

IT プロジェクト

さくらの個別指導 ( さくら教育研究所 ) A 2 2 Q ABC 2 1 BC AB, AC AB, BC AC 1 B BC AB = QR PQ = 1 2 AC AB = PR 3 PQ = 2 BC AC = QR PR = 1

r3.dvi

Quick Sort 計算機アルゴリズム特論 :2017 年度 只木進一


PowerPoint プレゼンテーション

しずおかアプリ部 Unity はじめるよ すごいよサウンド機能 実践編 統合開発環境を内蔵したゲームエンジン いろんな職業の が る資料なので説明を簡単にしてある部分があります 正確には本来の意味と違いますが上記理由のためです ご了承ください この

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

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

Java演習(4) -- 変数と型 --

コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n

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

教材ドットコムオリジナル教材 0から始めるiアフ リ リファレンス i アプリ簡易リファレンス ver i アプリ Java 独自のメソッド (1)iアプリの命令を使えるようにする import com.nttdocomo.ui.*; (2) 乱数を使う import java.u

2

Prog2_15th

Math-Aquarium 例題 図形と計量 図形と計量 1 直角三角形と三角比 P 木の先端を P, 根元を Q とする A 地点の目の位置 A' から 木の先端への仰角が 30,A から 7m 離れた AQB=90 と なる B 地点の目の位置 B' から木の先端への仰角が 45 であ るとき,

複素数平面への誘い

dy = sin cos y cos () y () 1 y = sin 1 + c 1 e sin (3) y() () y() y( 0 ) = y 0 y 1 1. (1) d (1) y = f(, y) (4) i y y i+1 y i+1 = y( i + ) = y i

CプログラミングI

Microsoft PowerPoint - 14Gnuplot.ppt

: : : TSTank 2

モデリングとは

Transcription:

208 9.2 陰線消去 (1) 考え方 9.2 陰線消去 等高線は,3 次元形状を数値的に正確に表示するという意味では有効ですが, 直感的に図形を把握するのが困難です そこで, 普段, 見慣れた見取り図で表示することを試みましょう 曲線の XYZ 座標を 2 次元に平行投影するのが, 最も簡単に見取り図を表示する方法です 図 9-3 に示す式が平行投影における変換式です z,y X Y j j j x cos k y cos j x sin k y sin y x X y x 図 9-3 平行投影の変換式 図 9-4 平行投影の例

第 9 章色々なアルゴリズム 209 たとえば, 図 9-4 は, 以下の式で得られた z = f (x, y) を平行投影した図です f x, y 2 sin x y 2 2 x y しかし, 隠れた線まで表示されています そこで, 見えない線を消すと, より見やすくなるはずです この見えない線を消すことを陰線消去と呼びます 図 9-5 は, 図 9-4 に対して陰線消去を行った結果です 2 図 9-5 陰線消去の例 (2) 浮動水平線アルゴリズム ここで示す方法は, 浮動水平線アルゴリズムまたは最大最小法と呼ばれる方法です その手順の概略は, 以下のとおりです (a) 一番, 手前から描く (b) 現在描いている曲線の 1 点の Y 座標が, それ以前に描かれた曲線の最大 Y 座標値より大きければ ( 水平線より上に位置すれば ), その点が見えるものとして描く すなわち, 図 9-6 のように, 実線部分は, 先に描かれた 2 次元変換後の Y 座標より大きいので描かれ, 点線の部分は小さいので描きません

210 9.2 陰線消去 この手法では, 描画の進行に伴って, 水平線が Y の正の方向に上がっていきますので, 浮動水平線アルゴリズムと呼ばれます y z 曲線を描く順序 x (3) プログラムの説明 図 9-6 浮動水平線アルゴリズム 2 次元の絵を描きますので, 以下の using を追加します using System.Drawing.Drawing2D; データ領域の宣言 1 public double Hidden_dlx; // 表示刻み幅 (dl) public double Hidden_alpha; // x 軸と水平軸との角度 (α) public double Hidden_beta; // y 軸と水平軸との角度 (β) public double Hidden_dx; // x 軸方向の単位メッシュの長さ (dx) public double Hidden_dy; // y 軸方向の単位メッシュの長さ (dy) public double[,] 高さ = new double[51,51];// 高さ (z 値 ) public double[] YMax= new double[2000] ;// Y 座標値最大値 ( 上浮動水平線 ) public double[] YMin= new double[2000] ;// Y 座標値最小値 ( 下浮動水平線 ) public double Hidden_Xlen; // 表示上の X 方向長さ = (numx-1)*dx*cos(α) public double Hidden_Ylen; // 表示上の X 方向長さ = (numy-1)*dx*cos(β) public int Hidden_NR; // 浮動水平線用配列の長さ public double beforx; // 現在ペン位置 X public double befory; // 現在ペン位置 Y public int numx=51; // x 方向メッシュ数 public int numy=51; // y 方向メッシュ数

第 9 章色々なアルゴリズム 211 データ領域の宣言 2 public double Hidden_dxCosA; // dx*cos(α) public double Hidden_dyCosB; // dy*cos(β) public double Hidden_dxSinA; // dx*sin(α) public double Hidden_dySinB; // dy*sin(β) public double Hidden_dlxTanA; // dl*tan(α) public double Hidden_dlxTanB; // dl*tan(β) public Matrix matrix= new Matrix(); // グローバル座標系への変換マトリックス 陰線消去の処理 public bool Hidden_Draw(PaintEventArgs e,pen pen, double px,double py, int p, bool Visible, bool Update) { // 陰線かどうかを判断し, 陰線でない場合, 線を描く // // 関数値 : 表示後の可視フラグ // e : 描画用引数 // pen : ペン属性 // px : 補間された X 座標値 ( 平面座標系 ) // py : 補間された Y 座標値 ( 平面座標系 ) // p : 比較する浮動水平線の位置 // Visible: 現ペン位置が見えているかどうかを示す ( 可視フラグ ) // Update : 陰線でないとき, 浮動水平線を更新するかどうかを示すフラグ if((py>=ymax[p]) (py<=ymin[p])) { if(update && py >=YMax[p])YMax[p]=py; if(update && py <=YMin[p])YMin[p]=py; if(visible) { float fx1=(float)beforx; float fy1=(float)befory; float fx2=(float)px ; float fy2=(float)py; e.graphics.drawline(pen,fx1,fy1,fx2,fy2); beforx=px;befory=py; return true; else{ beforx=px;befory=py; return false; X0=Y0=0 の 2 次元座標値 private double Hidden_GroundX(int j, int k) // X0=Y0=0 のときの X 座標 { return (double)j * Hidden_dxCosA - (double) k * Hidden_dyCosB; private double Hidden_GroundY(int j, int k)// X0=Y0=0 のときの Y 座標 { return (double)j * Hidden_dxSinA + (double) k * Hidden_dySinB;

212 9.2 陰線消去 OnPaint のオーバライド ここでは,OnPaint で直接表示しています private int setdrawpos(int j,int k) { return (int)((0.5+(hidden_ylen+hidden_groundx(j,k)) /Hidden_dlx)); private double setpx(int j, int k, double X0, double PH) { return (PH * Hidden_dlx + Hidden_GroundX(j,k) + X0); private double setpy(int j, int k, double Y0, double PH, double fp) { return (PH * Hidden_dlxTanA + Hidden_GroundY(j,k) + fp + Y0); protected override void OnPaint(PaintEventArgs e ) { bool 可視フラグ =true; base.onpaint(e); e.graphics.clear(color.white); Pen pen = new Pen(Color.Black,0.02F); e.graphics.transform = matrix; // 浮動水平線の初期化 for (int j = 0;j < Hidden_NR; j++){ YMax[j] = -1E20; YMin[j] = 1E20; double X0=80; double Y0=100; // 表示始点位置 for(int k=0;k<numy;k++) { 可視フラグ =false; for(int j=0;j<numx-1;j++) // X 軸方向描画 { int p1 = setdrawpos(j, k); int p2 = setdrawpos(j + 1, k); double H = 高さ [j,k]; double DH = ( 高さ [j + 1,k] - 高さ [j, k]) * Hidden_dlx / Hidden_dxCosA; for(int p = p1; p <= p2; p++) // 補間 { double PH = (double)(p-p1); double fp = H + DH * PH; double px = setpx(j, k, X0, PH); double py = setpy(j, k, Y0, PH, fp); if((j<numx-2 && p<p2) (j == numx-2)) 可視フラグ =Hidden_Draw(e, pen, px, py, p, 可視フラグ, true); for(int j=0;j<numx && k<numy-1;j++) // Y 軸方向描画 { 可視フラグ =false; int p1 = setdrawpos(j, k); int p2 = setdrawpos(j, k + 1); double H = 高さ [j,k]; double DH = ( 高さ [j, k + 1] - 高さ [j,k]) * Hidden_dlx / Hidden_dyCosB; for(int p = p1; p >= p2; p--) // 補間 { double PH = (double)(p - p1); double fp = H DH * PH; double px = setpx(j, k, X0, PH); double py = setpy(j, k, Y0, PH, fp); 可視フラグ =Hidden_Draw(e, pen, px, py, p, 可視フラグ, p!=p2)

第 9 章色々なアルゴリズム 213 変換マトリックス設定 private void window(double X1, double Y1, double X2, double Y2) { float W = this.clientsize.width; float H = this.clientsize.height; float SX = W / ((float)(x2 - X1)); float SY = H / ((float)(y2 - Y1)); matrix.scale(sx,sy); matrix.translate(-(float)x1, -(float)y1); 各変数の初期化 高さ [j,k] の設定値を変えて, 色々な 3 次元データを表示してみましょう private void Form1_Load(object sender, System.EventArgs e) { double DNX2 = ((double)numx) / 2; double DNY2 = ((double)numy) / 2; double X,Y,R,fxy; // 高さデータの設定 for(int j = 0; j < numx; j++) { X = 0.3 * ((double)j - DNX2); for(int k = 0; k < numy; k++) { Y = 0.3 * ((double)k - DNY2); R = Math.Sqrt(X * X + Y * Y); if(r == 0.0) fxy = 1.0; else fxy = Math.Sin(R) / R; 高さ [j,k] = 40.0 * fxy; // 表示用パラメータの設定 Hidden_dlx = 0.1; Hidden_alpha = Math.PI/12; Hidden_beta = Math.PI/8; Hidden_dx = 2; Hidden_dy = 1.4 // 計算に用いる値の設定 Hidden_dxCosA = Hidden_dx * Math.Cos(Hidden_alpha); Hidden_dyCosB = Hidden_dx * Math.Cos(Hidden_beta); Hidden_dxSinA = Hidden_dx * Math.Sin(Hidden_alpha); Hidden_dySinB = Hidden_dx * Math.Sin(Hidden_beta); Hidden_Xlen = (numx-1) * Hidden_dxCosA; Hidden_Ylen = (numy-1) * Hidden_dyCosB; Hidden_dlxTanA = Hidden_dlx * Math.Tan(Hidden_alpha); Hidden_dlxTanB = Hidden_dlx * Math.Tan(Hidden_beta); Hidden_NR = (int)((hidden_xlen + Hidden_Ylen)/Hidden_dlx)+1; // 表示座標マトリックスの設定 window(-10, 200, 200, 60);