7/2 まとめ
課題のまとめ
この講義で課した課題は以下の通り,
- 4/16 はいぱーワークブックの課題システムへのクラス登録とタイピング課題
- 4/23 WWW形式によるリテラシ課題
- 4/30はいぱーワークブックの課題システムの電子メールの課題
- 5/7検索エンジンの利用と電子メール
- 5/14WWW文書の作成
- 5/21idraw, gimpを用いたGIFアニメーションの作成
- 6/4 LaTeXによる文書作成
- 6/11 Javaによる青と赤のグラデーション画像の生成
- 6/18 マンデルブロー集合画像の作成
- 6/25 画像ファイルの作成
課題を提出し忘れた人も7月中に提出すれば(減点はするが),採点する.
試験について
- 共通試験
-
- 共通試験の過去問
- 今年度も共通問題は同様の形式(50問マークシート30分)
- 範囲はHWBの「準備」と「基本」のうち,「18 情報の処理」を除く3-17,19,20で,Advanced TopicsやExternalのリンク先は除外される.全ての範囲から少しずつ出題される.
- 19, 20章は講義としてとりあげていないので自習しておくように
- 独自試験
-
- 共通試験の出題範囲に加えて,講義でとりあげた「21.プログラミング」
,「24.描画システム」,「26. 文書清書システム」も含む.
- はいぱーワークブックに加えて,講義のWWWページも読んでおくこと.
今日の目標
前回の課題へのヒント
画像を作成するプログラムとして,Grad,
Mandelをあげたが,図形を描く例をみてみることにする.
class Draw{
/**
*
* Math.sqrtを呼び出して平方根を計算できる
*/
static double distance(int x0,int y0, int x1, int y1){
int dx=x0-x1;
int dy=y0-y1;
return Math.sqrt(dx*dx+dy*dy);
}
/**
* circleX 円の中心のX座標
* circleY 円の中心のY座標
* circleR 円の半径
*/
static boolean inCircle(int x, int y, int circleX, int circleY, int circleR){
if(distance(x,y,circleX,circleY) <= circleR) {
return true;
}
else {
return false;
}
}
/**
* rectangleX 矩形の左上X座標
* rectangleY 矩形の左上Y座標
* rectangleW 矩形の幅
* rectangleH 矩形の高さ
*/
static boolean inRectangle(int x, int y,
int rectangleX, int rectangleY,
int rectangleW, int rectangleH){
if(rectangleX <= x &&
x <= rectangleX+rectangleW &&
rectangleY <= y &&
y <= rectangleY+rectangleH){
return true;
}
else {
return false;
}
}
public static void main(String args[]){
int width=256;
int height=256;
int x,y;
System.out.println("P3 "+width+" "+height+" 255");
for(y=0;y < height;y++){
for(x=0;x < height;x++){
/**
* 赤 r, 緑 g, 青 b をすべて0にすると黒
*/
int r=0, g=0, b=0;
if(inRectangle(x,y,0,50,150,100)){
// 白みがかった暗い黄色
r=200; g=200; b=100;
}
if(inCircle(x,y,200,150,50)){
// 暗いマゼンダに
r=200; g=0; b=200;
}
if(inCircle(x,y,150,200,70)){
// 白を重ねる
r=r+100;
g=g+100;
b=b+100;
// 255までしか色を表現できないので,
// 255と小さい方の値を取ることにより,切り捨てる
// Math.minを呼び出して小さい方の値を取る
r=Math.min(255,r);
g=Math.min(255,g);
b=Math.min(255,b);
}
{
// (200,50)を中心にした緑のフレア効果
double len=distance(x,y,200,50);
g+=200*25/(len+20);
g=Math.min(255,g);
}
System.out.println(r+" "+g+" "+b);
}
}
}
}
このプログラムを実行した結果は,
となる.
class Sin{
public static void main(String args[]){
int width=256;
int height=256;
int x,y;
System.out.println("P3 "+width+" "+height+" 255");
for(y=0;y < height;y++){
for(x=0;x < width;x++){
// Math.sinを呼び出してsinを計算する
double sinY=-Math.sin(x*0.03)*100.0+128.0;
// Math.absを呼び出して絶対値をとる
// (int)で整数型に変換する
int dl=(int)Math.abs(y-sinY);
int r,g,b;
r=200*25/(dl+20);
g=200*25/(dl+20);
b=200*25/(dl+20);
r=Math.min(255,r);
g=Math.min(255,g);
b=Math.min(255,b);
System.out.println(r+" "+g+" "+b);
}
}
}
}
このプログラムを実行した結果は,
となる.