日常の進捗

主に自分のための,行為とその習慣化の記録

Coding Challenge

Mod: Coding Challenge #90: Floyd-Steinberg Dithering

チュートリアルではFloyd-Steinbergのディザを生成するアルゴリズムを使っているが,書き換えたプログラムでは便宜上16を4つのランダムな数字をつかって表すやり方でディザを作ってみている. コード import processing.pdf.*; import java.util.Calendar; P…

Mod:Coding Challenge #89: Langton's Ant

ブロックノイズがすごいので実際に実行してみて欲しい. コード int[][] grid; int x; int y; int dir; int ANTUP = 0; int ANTLEFT = 1; int ANTDOWN = 2; int ANTRIGHT = 3; color c1, c2, c3, c4; PImage ant; void setup() { //fullScreen(); size(960, …

Mod: Coding Challenge #86: Cube Wave by Bees and Bombs

Tumblrでアルゴリズミックに作られたGIFアニメーションを公開しているBees and Bombs.今回はその作品の中から一つを再作成するというもの. .@shiffman attempting to recreate my gif in @p5xjs live! https://t.co/tpySsB4Ozi pic.twitter.com/yDQPXR0vlp…

Mod: Coding Challenge #88: Snowfall

Processingで書きながらところどころ自己流で書いた.いわゆるスプライト画像と言われるような,複数の画像がタイル状に配置された1枚の画像を読み込んで適宜使用するようなやり方をやっている.メリークリスマス. コード // img src : https://alca.tv/sta…

Mod: Coding Challenge #87: 3D Knots

ここのところブログにログを残していなかったので(コードは書いてた)、3Dのノット(結び目)に関するチュートリアルをやってみた.球体の面上の点を求める式に似ているのが面白い.コードの中のコメントアウトしている式がそれぞれ,変数betaから半径や角…

Mod: Coding Challenge #81.2: Circle Morphing - Part 2

p5.jsで書かれてたコードを読み解きながらProcessingにポーティングした. コード ArrayList<Point> circlePath = new ArrayList<Point>(); int spacing = 1; float t; void setup() { size(960, 540); colorMode(HSB, 360, 100, 100); setN(); strokeJoin(ROUND); strokeC</point></point>…

Mod:Coding Challenge #81.1: Circle Morphing - Part 1

円から三角形のモーフィング,パート1.円周上の点,三角形の辺上の点をそれぞれ配列として保存して,その間を動く点を描画する. コード ArrayList<PVector> circlePath = new ArrayList<PVector>(); ArrayList<PVector> trianglePath = new ArrayList<PVector>(); int n = (int)random(3,10); i</pvector></pvector></pvector></pvector>…

Mod: Guest Tutorial #6: The Modulo Operator with Golan Levin

朝起きてなんとなくチュートリアルの動画を流しながら朝支度するのが日課ぽくなってる.今日はクリエイティブ・コーディングやメディアアートで著名なGolan Levinが剰余演算について話してる回を観た.剰余演算自体はプログラミングをやっていれば使う便利な…

Mod: Coding Challenge #74: Clock with p5.js

なんか微妙なので昔書きかけだった7セグメントの時計も改めて書いてみた. コード(サークルクロック) float hlen = 130; float mlen = 230; float slen = 230; float lastMillis; void setup() { size(600, 600,P2D); colorMode(HSB, 360, 100, 100, 100);…

Mod:Coding Challenge #59: Steering Behaviors

操舵するような振る舞い,というのが直訳なのかな. 運転中に車でハンドルを切る時を想像して欲しい(免許持ってないひとはゲームでも良い).移動してる物体がいきなり90度進行方向を変えるみたいなことはできない.慣性に引っ張られながら進行方向を変える…

Mod:Coding Challenge #56: Attraction and Repulsion Forces

引力と斥力をシミュレーションする.このへんはNature of Codeに書かれてたのでなんとなく手癖で書ける部分がある.アトラクターがパーティクルを引っ張る力を持っていて,そいつに近づきすぎると今度は斥力を発生させて,これまで引っ張っていた力を反転さ…

Mod: Coding Challenge #50: Animated Circle Packing

Processing.jsだと継承したクラスがスーパークラスのプロパティを呼び出す時,this付けないとエラーが出るようだ. コード(PGraphis版) ArrayList<Circle> circles; ArrayList<PVector> points; PGraphics pg; void setup() { size(960, 540); colorMode(HSB, 360, 100, 100</pvector></circle>…

Mod: Coding Challenge #47: Pixel Sorting in Processing

画像のピクセルごとのソーティング(並び替え).for文で順番にピクセルを見ていって,ピクセルの彩度(Hue)や明度(Brightness)を確認,その値が大きい場合に色を置き換える(スワップする). スワップは2つの値を置き換えるやり方で,巡回セールスパー…

Mod: Coding Challenge #35.1 + 35.2 : Traveling Salesperson

トラベルサラリーマンじゃなくて,巡回セールスパーソン問題ってやつ.イメージはセールスパーソンが幾つかの都市に出張営業する経路を考える時に,移動距離が一番短くなる経路を導き出すというもの.総当りで出すけど経路の組み合わせと計算をシリーズで考…

Mod:Coding Challenge #34: Diffusion-Limited Aggregation

Diffusion-Limited Aggregation,日本語訳すると「拡散律速凝集(かくさんりっそくぎょうしゅう)」.なんのこっちゃという感じであるが,フラクタルやシミュレーション系のアルゴリズムとしてよく使われている. 空間に自由な粒子(パーティクル)が舞って…

Mod:Coding Challenge #33: Poisson-disc Sampling

Poisson-disk Samplingは,ランダムに分布する点の集合をサンプルする方法.普通にランダムを使うと,偏りが生まれる.それに対してPoisson-disk Samplingは,ルールとして一定間隔に分布するように距離を測って置いていく.そのアルゴリズムが幾つかあるよ…

Mod:Coding Challenge #31: Flappy Bird

横スクロールゲーム「Flappy Bird」ライクなものを作る.画面をクリックしてからスペースキーを叩くと,ボール(鳥)が羽ばたく.それで左から流れてくる土管を避ける.スコア機能や色をつけるなど実装した.暇な時にパソコンで遊んでください. コード Bird…

Mod:Coding Challenge #30: Phyllotaxis

29が重すぎたので一旦飛ばした。Phyllotaxis、葉序とか言われる、茎上の葉の配び方の研究のことみたい。やってる事自体は数式があってそのパターンでひまわりの種子の配列のようなものを描くというもの。そこまで難しくなかったというか、式をコードにするの…

Mod:Coding Challenge #77: Recursion

今回は再帰について。 関数のなかで実行される命令に条件を書いて、その条件を満たす範囲において関数が関数自身を実行するというもの。ウロボロスのっぽいイメージ。永遠に実行されてしまうことを防ぐために条件が必要。今回は半径を小さくしつつ中心座標を…

Mod:Coding Challenge #28: Metaballs

いわゆるメタボール。後半Computer Visionを使うパートになっていくんだけどいまいち理解できてないので、CVのチュートリアルを明日以降やって戻ってきたいと思う。OpenProcessingに載せてみたが重くて1fpsくらいでしか動かなかった。 コード int num = 8; A…

Mod: Coding Challenge #27: Fireworks!(2D+3D)

Processingの花火のシミュレータは夏に作ったけど、こちらのほうが爆発時や爆発後の処理が洗練されている。動画視聴しながら2D版を作って、3Dに移植している。 コード(3D) PVector gravity = new PVector(0, 0.1); ArrayList<ParticleSystem> particleSystem; // setup関数</particlesystem>…

Mod:Coding Challenge #76: 10PRINT in p5.js

しばらく古いものをやっていたが、昨日公開されたものが新着で出てきたのと、少し別のものもやってみようと思ったのでこれにした。書籍「10 PRINT CHR$(205.5+RND(1)); : GOTO 10」は、Commodore 64という1980年代のコンピュータのBASICというプログラム言語…

Mod:Coding Challenge #26: 3D Supershapes

スーパーシェイプの3D版。前回の続きを自分なりに書き換えていったが、展開がうまく言ってない気がするというか、登録する頂点と頂点の接続がうまくつながってない。 Supershapes / SuperFormula コード float a = 1; float b = 1; float m = 0.1; float fre…

Mod:Coding Challenge #25: Spherical Geometry

動画は見ていたけど、3Dで球体を計算するというものだったので、既知だったこともあり自分なりに書いてみた。結果見てみると随分書き方は違うけど、配列を使わないで動的に計算している自分のやり方はそれはそれで良いような気もする。2次元で書いた円の半径…

Mod:Coding Challenge #24: Perlin Noise Flow Field

p5.jsで書かれたものをProcessingに移植するときに、ArrayIndexOutOfBoundsExceptionが出てしまって解決する方法を考えて、随分書き換えた。グリッドに力場を作って、動くポイントに近い力場の影響を受ける。力場は2次元のパーリンノイズで動きの方向が変わ…

Mod:Coding Challenge #23: 2D Supershapes

これの続き。 takawo.hatenablog.com パラメーターが6つあるので、コントローラーをControlP5を使って制御してみた。 コード import controlP5.*; float n1; float n2; float n3; float m; float a; float b; float radius = 200; ControlP5 cp5; // setup関…

Mod:Coding Challenge #22: Julia Set in Processing

昨日のマンデルブロ集合とつながるジュリア集合。動画で書かれているコード写しながら動画内で参照されているリファレンスを読んだ。 Julia set fractal Julia set - Wikipedia マンデルブロ集合のコードを改変して一定の数値を与えると形が変わる、その加算…

Mod:Coding Challenge #21: Mandelbrot Set with p5.js

マンデルブロ集合。正直な所、昔からあんまり綺麗だなと思えなかったけど、漸化式の復習と考えたら面白く感じる部分もあった。関数mandelbrot()の中で繰り返し実行している。他のマンデルブロ集合をProcessingで記述する例を幾つかチェックして理解しながら…

Mod:Coding Challenge #20: 3D Cloth with toxiclibs

物理世界のシミュレーションを外部ライブラリtoxiclibsをつかって行う。toxiclibsは知ってたけどぶっちゃけ複雑そうで、なんやかんや手を付けないでいた。書き方を少し覚える必要があって、何度か書き直したり、他のサンプルコードを写経したりサンプルコー…

Mod:Coding Challenge #19: Superellipse

これまでの連続回に比べると相当軽め。Superellipseはなんて呼ぶのかわからないけど、極座標系で様々な図形が描画できる公式。Processingの描画でよく使う float r = 100; for(float angle = 0; angle < 360; angle += 1){ float theta = radians(angle); fl…