04 線を描いてみようーvertexを使う

直線の方程式

LINE-0400 基本的な直線の方程式を紹介します。まず直交座標を描きます。これは位置関係を分かりやすくするためのものです。その後 translate()で原点をセンターに移動します。そうするとY軸の上の方がマイナスになるのでscale(1, -1)で上下反転させます。
beginShape()で図形の頂点の記録を開始します。直線の方程式で始点と終点を計算しvertex()で頂点を設定します。endShape()で終了し、直線が描画されます。

直線の方程式
方程式y=a*x+b傾きaで座標軸上の交点がbである直線。bが0ならy=a*x
変数a勾配 (a=tan)
b切片 (座標軸上の交点)
シェイプを開始
構文beginShape()
beginShape(kind)
形状の頂点の記録を開始します。
vertex(),endShape() と共に使用します。
beginShape() 内では座標変換、他のシェイプは使用できません。
パラメータkind(int) POINTS, LINES, TRIANGLES, TRIANGLE_FAN, TRIANGLE_STRIP, QUADS, または QUAD_STRIP
戻り値voidなし
シェイプを終了
構文endShape()
endShape(mode)
beginShape() 以降に定義された画像データがイメージ バッファ(一時的に保存しておく領域)に書き込まれ、記録を停止します。
vertex(),beginShape() と共に使用します。
パラメータmode(int) CLOSEを使用して図形を閉じます。(始点と終点を結びます/2点間では不要)
戻り値voidなし
頂点の設定
構文vertex(x, y) 点、線〜多角形の頂点座標を指定するために使用されます。
beginShape() と endShape() 関数内でのみ使用されます。
※他にも3D関係の構文がありますがそれは別ポストで扱います。
パラメータx(float) 頂点のx座標
y(float) 頂点のy座標
戻り値voidなし

beginShape() のパラメータ

LINE-0401 ここからはbeginShape() のパラメータを確認していきます。最初はパラメータなしで四角形を描いています。

デフォルトで黒の境界線1ピクセル、塗りが白となっています。endShapeでCLOSEしないと左下と左上の頂点が繋がりません。(境界線が描かれない)
LINE-0402 四角形内を塗りつぶさない場合はnoFill()を使用します。

塗りつぶさない
構文noFill()図形の塗りつぶしを無効にする。塗りつぶす場合はfill()を使用する。
戻り値
voidなし

LINE-0403 POINTは点を描画します。デフォルトで1ピクセルで、よく見えないので線幅を10ピクセルにしています。塗りつぶしは意味がありません。

LINE-0404 LINESline()関数のような2点間を結ぶ働きをするようです。塗りつぶしは意味がありません。

LINE-0405 TRIANGLESは3頂点が結ばれ、三角形を描画します。3頂点がセットで、それ以下の頂点があっても無視されるようです。

LINE-0406 TRIANGLE_STRIPを確認します。トライアングルストリップとは接続された一連の三角形のことで頂点が共有されています。

矢印の順に座標を書く

LINE-0407 TRIANGLE_FANは1つの中央の頂点を共有する接続された三角形のセットです。

❷と❻は同じ座標

LINE-0408 QUADSは4頂点が結ばれ、四角形を描画します。4頂点がセットで、それ以下は無視されるようです。

LINE-0409 QUAD_STRIPは接続された一連の四角形のことで頂点が共有されています。

多角形を描く

LINE-0410 vertex()を使って多角形を描いてみましょう。円の公式を使います。シェイプの終了でendShape(CLOSE)にしないと線の最後が繋がりません。

五角形
七角形

やってみよう 多角形の角数 pnumの値を変えてみよう

LINE-0411 多角形を3未満にすると多角形にはなりません。エラー処理が必要です。アラートウインドウ等はJAVAを使えばできるそうですが、println()で簡易的にコンソールにメッセージを表示するようにします。

コンソールに書き込む
構文println()
println(what)
println(variables)
プロセッシング環境の下部にある黒い四角形のコンソール領域に書き込みます。
パラメータwhatコンソールにプリントするデータ(文字列の場合は””で囲みます)
byte, boolean, char, int, float, String, Object
variablesコンマで区切られたデータのリスト
Object[]
戻り値voidなし
プログラムを停止/終了する
構文exit()プログラムを停止/終了する
戻り値voidなし

多角形の角数を多くすると、80角以上くらいから円に近づきます。

LINE-0412 多角形の応用で星を描いてみましょう。Switch文を使用して大円と小円の半径の座標を交互に設定します。

pnum=40、小円の半径を150

やってみよう 多角形 pnumの値を変えてみよう。(ただし偶数) 小円の大きさを変えてみよう

選択肢から分岐する
構文switch(expression) {
case name:
statements
break;// Optional
case name: // Optional
statements
  break; // Optional
default:
statements
}
expressionの値と同じ値のcase name:に分岐します。3つ以上の選択肢がある場合はif else文より見やすく使いやすいです。
caseのnameの最後は : コロンです。
default:は省略可能です。
パラメータexpressionbyte, char, または int
例)int num = 1; switch(num)
char letter = ‘N’; switch(letter)
構文case name:switch構造体のパラメータで評価される異なる名前を示します。
パラメータnamebyte, char, または int
例)case 1: case 2: case 3:
case “A”: case “B”: case “C”:
statements実行される1つ以上のステートメント
構文break;switch、for、whileなどの構造体の実行を終了し、次のステートメントにジャンプします。
breakがない場合はswitch内の残りのステートメントはすべて実行されます。
構文default:スイッチのデフォルト条件を定義するキーワード。どのケース名もswitchパラメータと一致しない場合、デフォルト構文の後のステートメントが実行されます。

LINE-0413 正六角形の中に内接する正六角形を描くプログラムです。参考書籍を基にBasicプログラムをプロセシング用にリライトしました。

参考

パソコンによる作図の基礎 著者:福永節夫、柴田 優、千葉睦朗、長江貞彦 発行日:昭和62年1月10日 初版発行 発行所:焙風館

正六角形は正三角形の集まりなので、一辺がR(右図緑の線)とすると正三角形の高さは公式により√3/2*R(青の線)となり、次の正三角形の一辺Rとなる。これを角度をずらして繰り返していくことになります。

塗りつぶし色を設定

色の設定には何種類かの方法があります。デフォルトではfill(R,G,B)です。

構文fill(rgb)rgb(int)16進法の色値 例)#ff0000
fill(rgb, alpha)alpha(float)不透明度
fill(gray)gray 白から黒の間の値 デフォルトの最大値は 255
fill(gray, alpha)白から黒の間の値、不透明度 数値はカラーモードの最大値の指定による
fill(v1, v2, v3)v1, v2, v3(float)はカラーモードが
RGBの場合;R(赤),G(緑),B(青)
HSBの場合;H(色相),S(彩度),B(明度)になる 数値はカラーモードの最大値の指定による
fill(v1, v2, v3, alpha)上記+不透明度
戻り値voidなし

LINE-0414 多角形に内接する多角形を描いてみましょう。参考書籍を基にBasicプログラムをプロセシング用にリライトしました。線の描画にはline()を使用していますので、多角形に色は付けられません。vertex()を使っても同様です。プログラムを変えない限りできません。線に色は付けられます。

参考

数式によるパソコン・グラフィックスのテクニック 著者:依田 谺 発行日:昭和61年8月1日 初版発行発行所:一橋出版株式会社

N=4 M=2 T=80
N=5 M=3 T=80
N=6 M=5 T=50
N=3 M=2 T=30
N=8 M=2 T=30
N=12 M=2 T=30

やってみよう 多角形の角数 N、傾き角度 M、多角形の数 Tを色々変えてみよう

背景色を設定

背景色の設定には何種類かの方法があります。

構文background(rgb)rgb(int)16進法の色値 例)#ff0000
background(rgb, alpha)alpha(float)不透明度
background(gray)gray (float) 白から黒の間の値 デフォルトの最大値は 255
background(gray, alpha)白から黒の間の値、不透明度 数値はカラーモードの最大値の指定による
background(v1, v2, v3)v1, v2, v3(float)はカラーモードが
RGBの場合;R(赤),G(緑),B(青)
HSBの場合;H(色相),S(彩度),B(明度)になる 数値はカラーモードの最大値の指定による
background(v1, v2, v3, alpha)上記+不透明度
background(image)(PImage) 背景として設定するP画像(スケッチウィンドウと同じサイズである必要があります)
戻り値voidなし

ヘッダー画像はChatGTPで作成しました。「ブログ用のアートっぽいイメージのヘッダー画像を作成してください。」と言うプロンプトです。

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

コメント

コメントする

CAPTCHA


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

目次