abs()を使った結晶形

Math.abs()を使って、水晶の結晶のような図形を書きます。
Use Math.abs() to draw a shape that looks like a crystal.

ハッチング、もしくはカケアミを描こう!と思って書き始めたコードです。

ハッチングとは絵画技法で、平行線を組み合わせて影や立体感を表現するものです。

カケアミは漫画でよく使う書き方です。

こういうやつですね。

平行線を、ランダムな角度で回転させ、画面中にランダムに配置したらできそうな気もしますが、

先の端っこ同士が中途半端に重なり合うと、あまりきれいなカケアミになりません。

そこで、基礎の形を、平行線を並べた四角いタイル型から、六角形のような形にしてみたら、どうなるかな、少しいいだろうか?と考えました。

その時見かけたのが下の図でした。

わたしが注目したのは「abs」。tweetの埋め込み、見切れているかもしれないので描くと、こんな図です。

absの関数はp5.jsにもあります。

Calculates the absolute value (magnitude) of a number. Maps to Math.abs(). The absolute value of a number is always positive.

https://p5js.org/reference/#/p5/abs

値を、常に正の値にしてくれます。

↓ abs()を使わずに書くとこのようなラインですが、

function setup() {
  createCanvas(400, 400);
  background("#f4f1de");
  hatching(width / 2, height / 2, width * 0.5);
}

function hatching(x, y, l) {
  let hatching_density = 10;//線の数
  let bold =l *0.3;//線の太さ
  
  translate(x, y);
  stroke(51);
  strokeWeight(1);

  for (let i = -bold / 2; i < bold / 2 + 1; i += bold / hatching_density) {
    
/*
 lは全長なので、
-l/2(マイナス側の半分)から
 l/2(プラス側の半分)まで線を引く
 */
    
     line((-l / 2) +i, i, (l / 2) - i, i);
  }
}

↓ abs()有りだと、こうなります。 abs()を、line()のところで使っています。

function setup() {
  createCanvas(400, 400);
  background("#f4f1de");
  hatching(width / 2, height / 2, width * 0.5);
}

function hatching(x, y, l) {
  let hatching_density = 10;//線の数
  let bold =l *0.3;//線の太さ
  
  translate(x, y);
  stroke(51);
  strokeWeight(1);

  for (let i = -bold / 2; i < bold / 2 + 1; i += bold / hatching_density) {
   
    line(-l / 2 +abs(i), i, l / 2 - abs(i), i);

  }
}

カケアミ的にはうーん、という感じだったのですが、いい形がスッキリ書けました。


この形で遊んでできた絵はこちら。

今回はabs()を使いましたが、他のMath関数をつかったら、別の形になるかもしれない…!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA