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

CGプログラミング論
平成27年6月3日
森田 彦
基礎課題6-1
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]
y0-y[i]
;
}
g.drawPolygon(xp,yp,N); //多角形を描画
}
基礎課題6-2
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軸対称な図形の描画
for(int i=0; i<N; i++) {
xp[i]= x0+x[i] ;
yp[i]= y0-y[i]
y0+①y[i]
;
}
g.drawPolygon(xp,yp,N); //多角形を描画
}
基礎課題6-3
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軸対称な図形の描画
for(int i=0; i<N; i++) {
xp[i]= x0
x0-x[i]
-①
x[i] ;
yp[i]= y0
y0-y[i]
-②
y[i] ;
今の場合、図形の対称性から
「y0+y[i]」でも同じ結果になるが、
一般には「y0-y[i]」が正しい。
}
g.drawPolygon(xp,yp,N); //多角形を描画
}
基礎課題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); //多角形を描画
//原点対称な図形の描画
for(int i=0; i<N; i++) {
xp[i]= x0
x0-x[i]
-①x[i] ;
yp[i]= y0
y0+y[i]
+②y[i] ;
}
g.drawPolygon(xp,yp,N); //多角形を描画
}
基礎課題6-5
void DrawGraphics(Graphics g) {
・・・
//x軸対称な図形の描画
for(int i=0; i<N; i++) {
xp[i]= x0
x0+x[i]
+①
x[i] ;
yp[i]= y0
y0+y[i]
+②
y[i]
;
}
g.drawPolygon(xp,yp,N); //多角形を描画
//y軸対称な図形の描画
for(int i=0; i<N; i++) {
xp[i]= x0-x[i]
x0-③
x[i] ;
yp[i]= y0-y[i]
y0-④
y[i] ;
}
g.drawPolygon(xp,yp,N); //多角形を描画
//原点対称な図形の描画
for(int i=0; i<N; i++) {
xp[i]= x0-x[i]
x0-⑤
x[i] ;
yp[i]= y0+y[i]
y0+⑥
y[i] ;
}
g.drawPolygon(xp,yp,N); //多角形を描画
}
基礎課題6-6
void DrawGraphics(Graphics g) {
・・・
//図形(多角形)の描画
double x_rot,y_rot,theta,d_theta;
2*Math.PI/4
①
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); //多角形を描画
}
}
応用課題6-A(その1)
void DrawGraphics(Graphics g) {
・・・
//図形(多角形)の描画
double x_rot,y_rot,theta,d_theta;
2*Math.PI/12
①
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); //多角形を描画
}
}
②
応用課題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題です。
演習課題の受け取りについて

原則として講義時間内に提出してもらいます。提出
が遅れた場合は以下のように減点とします。
基礎課題 応用課題
講義時間内
終了後1時間以内
100%
90%
100%
100%
1時間超~当日中
70%
100%
翌日の17:00まで
0%
100%
それ以上の遅れ
0%
0%
課題内容によっては、上の基準を緩和します。その際は講義
時にアナウンスします。