CGプログラミング論 平成28年6月8日 森田 彦
基礎課題6-1 y0-y[i] void DrawGraphics(Graphics g) { int[] x={0,30,30,0,-30,-30}; //多角形のx座標の定義 int[] y={0,30,90,60,90,30}; //多角形のy座標の定義 int N=6; //データ数(多角形の頂点の数) int x0=100; //原点のx座標(コンピュータ上) int y0=200; //原点のy座標(コンピュータ上) int[] xp=new int[N]; //コンピュータ上のx座標を格納する配列 int[] yp=new int[N]; //コンピュータ上のy座標を格納する配列 g.setColor(Color.BLUE); //描画色を青に設定 for(int i=0; i<N; i++) { xp[i]= x0+x[i] ; yp[i]= y0-y[i] ; } g.drawPolygon(xp,yp,N); //多角形を描画 y0-y[i] ①
基礎課題6-2 追加部分 y0+y[i] void DrawGraphics(Graphics g) { int[] x={0,30,30,0,-30,-30}; //多角形のx座標の定義 ・・・ for(int i=0; i<N; i++) { xp[i]= x0+x[i] ; yp[i]= y0-y[i] ; } g.drawPolygon(xp,yp,N); //多角形を描画 //x軸対称な図形の描画 yp[i]= y0-y[i] ; 追加部分 ① y0+y[i]
基礎課題6-3 今の場合、図形の対称性から「y0+y[i]」でも同じ結果になるが、一般には「y0-y[i]」が正しい。 void DrawGraphics(Graphics g) { int[] x={0,30,90,60,90,30}; //多角形のx座標の定義 int[] y={0,-30,-30,0,30,30}; //多角形のy座標の定義 int N=6; //データ数(多角形の頂点の数) ・・・ //図形(多角形)の描画 for(int i=0; i<N; i++) { xp[i]= x0+x[i] ; yp[i]= y0-y[i] ; } g.drawPolygon(xp,yp,N); //多角形を描画 //y軸対称な図形の描画 xp[i]= x0-x[i] ; 今の場合、図形の対称性から「y0+y[i]」でも同じ結果になるが、一般には「y0-y[i]」が正しい。 x0-x[i] ① y0-y[i] ②
基礎課題6-4 void DrawGraphics(Graphics g) { int[] x={0,30,30,0}; //多角形のx座標の定義 int[] y={0,30,90,60}; //多角形のy座標の定義 int N=4; //データ数(多角形の頂点の数) ・・・ //図形(多角形)の描画 for(int i=0; i<N; i++) { xp[i]=x0+x[i]; yp[i]=y0-y[i]; } g.drawPolygon(xp,yp,N); //多角形を描画 //原点対称な図形の描画 xp[i]= x0-x[i] ; yp[i]= y0+y[i] ; x0-x[i] ① y0+y[i] ②
基礎課題6-5 void DrawGraphics(Graphics g) { ・・・ //x軸対称な図形の描画 for(int i=0; i<N; i++) { xp[i]= x0+x[i] ; yp[i]= y0+y[i] ; } g.drawPolygon(xp,yp,N); //多角形を描画 //y軸対称な図形の描画 xp[i]= x0-x[i] ; yp[i]= y0-y[i] ; //原点対称な図形の描画 x0+x[i] ① y0+y[i] ② x0-x[i] ③ y0-y[i] ④ x0-x[i] ⑤ y0+y[i] ⑥
基礎課題6-6 void DrawGraphics(Graphics g) { ・・・ //図形(多角形)の描画 double x_rot,y_rot,theta,d_theta; d_theta= 2*Math.PI/4 ; //角度θの刻み幅 for(int j=0;j<4;j++) { //4つの三角形を繰り返し処理で描画 theta=d_theta*j; //角度θ for(int i=0; i<N; i++) { ・・・ } g.drawPolygon(xp,yp,N); //多角形を描画 2*Math.PI/4 ①
応用課題6-A(その1) ② void DrawGraphics(Graphics g) { ・・・ //図形(多角形)の描画 double x_rot,y_rot,theta,d_theta; d_theta= 2*Math.PI/12 ; //角度θの刻み幅 for(int j=0;j<12;j++) { theta=d_theta*j; //角度θ for(int i=0; i<N; i++) { x_rot=x[i]*Math.cos(theta)-y[i]*Math.sin(theta); y_rot=x[i]*Math.sin(theta)+y[i]*Math.cos(theta); xp[i]=x0+(int) (x_rot); yp[i]=y0-(int) (y_rot); } g.drawPolygon(xp,yp,N); //多角形を描画 2*Math.PI/12 ① ②
応用課題6-A(その2) ② void DrawGraphics(Graphics g) { ・・・ //図形(多角形)の描画 double x_rot,y_rot,theta,d_theta; d_theta= 2*Math.PI/12 ; //角度θの刻み幅 for(int j=0;j<12;j++) { theta=d_theta*j; //角度θ for(int i=0; i<N; i++) { } g.setColor(Color.blue); //塗る色を青に設定 g.fillPolygon(xp,yp,N); //多角形を描画(塗りつぶし) g.setColor(Color.black); //輪郭を描く色を黒に設定 g.drawPolygon(xp,yp,N); //多角形を描画 ②
本日の学習内容 グラデーション 提出課題 【基礎課題7-1】~【基礎課題7-3】および【応用課題7-A】の4題です。
演習課題の受け取りについて 原則として講義時間内に提出してもらいます。提出が遅れた場合は以下のように減点とします。 基礎課題 応用課題 100% 終了後1時間以内 90% 1時間超~当日中 70% 翌日の17:00まで 0% それ以上の遅れ 課題内容によっては、上の基準を緩和します。その際は講義時にアナウンスします。