02 線を描いてみようー複数の線

繰り返して直線を描く

LINE-0200 繰り返し文を使用して直線を複数描いてみましょう。繰り返しにはfor文を使用します。この場合 i は1から始まって7まで変化します。その変化した値をY座標に掛けて、下方向へ移動して線を描いていきます。コード内の//はコメントです。

繰り返し
構文for (init; test; update) {
statements
}
繰り返し処理に使用します。 (init; test; update)内の ;(セミコロン)は3つの部分の区切りを意味しています。
パラメータinit(初期化)変数の宣言、初期値の代入
test(条件式)条件式がtrue(真)の間だけ、ブロック内( 中括弧 { } )の文が実行されます。条件式には関係演算子(2つの値の大小等を比較する)が使われます。
update(更新)変数を変化させる
statements繰り返し実行する文

ブロック文( 中括弧 { } )を含む関数や繰り返し、条件分岐の式の最後には ;(セミコロン)は付きません。ブロック自体、文が完結していることを明白に示しているためかと思います。

関係演算子

二つの値や文字の関係を比較してそれが成り立っていたらtrue(真)、そうでなければfalse(偽)を返します。

構文value1 == value2 (等価) 2つの値が等価かどうかを判定
パラメータvalue1、value2int、float、char、byte、boolean
構文value1 != value2(不等価) 2つの値が等価でないかを判定
パラメータvalue1、value2int、float、char、byte、boolean
構文value1 < value2 (未満) 左の値が右の値より小さいかどうかを判定 value2を含まない
パラメータvalue1、value2int、float、char、byte
構文value1 <= value2 (以下) 左の値が右の値より小さいか、または値が等価かどうかを判定 value2を含む
パラメータvalue1、value2int、float、char、byte
構文value1 > value2 (超える) 左の値が右の値より大きいかどうかを判定  value2を含まない
パラメータvalue1、value2int、float、char、byte
構文value1 >= value2 (以上) 左の値が右の値より大きいか、または値が等価かどうかを判定 value2を含む
パラメータvalue1、value2int、float、char、byte
コメント

コメントはプログラム内に書けるメモです。プログラムの内容や処理など、後から見ても分かるように書いておきます。コメント内では日本語が使用できます。この他に長文が書ける構文もあります。

構文// comment1行コメント
パラメータcomment任意の文字列

上記のコードを以下のように変数を使わなくてもコンパクトに書けますが、少し分かりにくいです。

LINE-0201 上下の線の間に、任意の分割数で直線を引いてみましょう。このとき、Y座標値や分割幅の変数をfloat型にしているのは、分割数によっては計算結果が整数にならない場合があるからです。もしint型(整数型)を使うと、誤差が発生する可能性があります。

やってみよう 分割数を変えてみよう 数値を全てintにしたらどうなるか

yt+=range は yt=yt+rangeをコンパクトな書式にしたものです。

算術演算子
構文value1 + value2加算する。
パラメータvalue1、value2string、int、float、char、byte、boolean
構文var += value加算代入 var = var + valueと同じ
パラメータvarintまたはfloat
valuevarと同じデータ型の任意の数値
構文value++整数変数の値を1増やす。 var = var + 1と同じ
パラメータvalueint
構文value1 value2
value1
減算する。または負の値にする。
パラメータvalue1、value2intまたはfloat
構文var -= value減算代入  var = var – valueと同じ
パラメータvarintまたはfloat
valuevarと同じデータ型の任意の数値
構文var整数変数の値を1だけ減じる。 var = var – 1と同じ
パラメータvarint
構文value1 * value2乗算する。
パラメータvalue1、value2int、float、byte、またはchar
構文var *= value乗算代入 var = var * valueと同じ
パラメータvarintまたはfloat
valuevarと同じデータ型の任意の数値
構文value1 / value2除算する。
パラメータvalue1intまたはfloat
value2intまたはfloat、ただしゼロではない(ゼロで割ろうとするとエラーになる)
構文var /= value除算代入 var = var / valueと同じ
パラメータvarintまたはfloat
valuevarと同じデータ型の任意の数値

LINE-0202 このプログラムを基に交互に線幅を変えてみましょう。%は余りを求める演算子(式で実行する計算の種類を指定する記号やシンボル)です。if else 文を使用して分岐させます。i を2で割った時の余りが0の時(割り切れる)線幅2を、そうでなければ線幅10で描きます。

やってみよう 割る値を2以外の数値にしてみる 余りを0以外にしてみる

条件により分岐する
構文if (expression)  {
statements1
 } else {
statements2
}
条件によりプログラムを分岐させます。
条件式がtrue(真/トゥルー)ならstatements1を実行する。false(偽/フォールス)ならstatements2を実行する。
※ステートメント:プログラムを構成する手続きや命令、宣言などの文
パラメータexpression条件式 trueまたはfalseを評価する有効な式
statements1trueによって実行される1つ以上のステートメント
statements2falseによって実行される1つ以上のステートメント
余りを求める 算術演算子
構文value1 % value2value1を value2で除算した時の余りを求める。
パラメータvalue1intまたはfloatの数値
value2intまたはfloatの数値
戻り値剰余(余りの数値)intまたはfloatの数値

方眼を描く

LINE-0203 %を使わなくてもON/OFFできるトグルスイッチのようなこともできます。
最初に変数swに1(ON)を代入。もし1なら線幅2を実行し、swを0(OFF)にする。そうでなければ線幅10を実行、swを1(ON)にします。これでON/OFFが繰り返されます。

遠近感を表現する

LINE-0204 線間は同じで線幅を漸次小さくして遠近感を表現します。初期線幅 w から i に0.5掛けたものを引いていき、線幅を小さくしていきます。

LINE-0205 次は線と線の間を漸次大きくして遠近感を表現してみましょう。for文内の更新部分でY座標にzenji 1.07を掛けて少しづつ距離を拡大していきます。

やってみよう 線間の距離zenjiを色々変えてみよう

LINE-0206 次はY座標の値が下限に達するまでwhile文で繰り返し描画します。

式が true である間繰り返す
構文while (expression) {
statements
}
式が true(真)である間、一連のステートメントを連続して実行する。
パラメータexpression有効な式 繰り返しの間アップデートされなければならない。必ずfalseになるような式でループを抜け出せるようにする。
statements1つ以上のステートメント

LINE-0207 自然対数を計算するlog()関数を使ったやり方です。対数は大きくなるにつれて間隔が狭くなる性質があります。

数値の自然対数を計算
構文log(n)数値の自然対数(底e対数*)を計算する。分かりにくいので特別な増え方を計算すると思ってください。*ネイピア数
(例)
log(0.9)= -0.105360545
log(1)=0.0
log(2)=0.6931472
log(3)=1.0986123
パラメータnfloat 0.0より大きい数
戻り値float

LINE-0208 次はフィボナッチ数列を使った方法です。1、2、3、5、8、13、21… のように前の2つの数値を足した数が連続するものです。この公式はそのままではプログラムできませんので各パートをA、B、Cの変数に代入します。ルートはsqrt()関数、べき乗はpow()関数を使用します。

,

ビネの公式
平方根を計算する
構文sqrt(n)数値の平方根を計算する。
パラメータnfloat 負でない数値
戻り値float
べき乗を計算する
構文pow(n, e)nをe乗する
パラメータnfloat 底
efloat 指数
戻り値float nのe乗した値

LINE-0209 正方形の各辺から中間まで描いていきます。for文の条件式の195はなだらかに繋がるように任意で選んだ数値です。下からと右からで50を足しているのはfor文の初期設定が50で始まっているので、それを補正するためです。そうしないとX座標終点とY座標 Botomの値が300から描画が始まるためです。

LINE-0210 これまでの応用で正方形の頂点から対辺に線を引いてみましょう。

LINE-0211 四隅の頂点から対辺へ線を引いてみましょう。

ヘッダー画像はChatGTPで作成しました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


This site uses Akismet to reduce spam. Learn how your comment data is processed.

目次