Delaunay三角形分割

  • POSTS
Delaunay三角形分割アルゴリズム このプログラムは、Delaunay三角形分割アルゴリズムを使用して線を引いています。このアルゴリズムは、与えられた点の集合を三角形の集合に分割するもので、三角形の外接円に対する空洞の最大化を行います。このアルゴリズムは、三角形網の形成に役立ちます。プログラムは、指定された点を動かすことで、時間が経つにつれて三角形網がどのように変化するかを示しています。また、描画には Processing 言語が使用されています。 ドロネー図 - Wikipedia import megamu.mesh.*; final int NUM_POINTS = 200; float[][] points = new float[NUM_POINTS][2]; float[][] velocities = new float[NUM_POINTS][2]; Delaunay delaunay; // 設定定数 final color BG_COLOR = color(0, 76, 96); final color DOT_COLOR = color(0, 176, 196, 255); final color LINE_COLOR = color(0, 176, 196, 255); final float DOT_SIZE = 12; final float LINE_WIDTH = 1; final float DOT_SPEED_MIN = -1; final float DOT_SPEED_MAX = 1; void setup() { //fullScreen(); size(700,300); smooth(); initPoints(); } void draw() { background(BG_COLOR); updatePoints(); drawTriangles(); drawDots(); } // 初期化関数 void initPoints() { for (int i = 0; i < NUM_POINTS; i++) { points[i][0] = random(width); points[i][1] = random(height); velocities[i][0] = random(DOT_SPEED_MIN, DOT_SPEED_MAX); velocities[i][1] = random(DOT_SPEED_MIN, DOT_SPEED_MAX); } delaunay = new Delaunay(points); } // ポイント更新関数 void updatePoints() { for (int i = 0; i < NUM_POINTS; i++) { points[i][0] += velocities[i][0]; points[i][1] += velocities[i][1]; if (points[i][0] < 0 || points[i][0] > width) { velocities[i][0] *= -1; } if (points[i][1] < 0 || points[i][1] > height) { velocities[i][1] *= -1; } } delaunay = new Delaunay(points); } // 三角形描画関数 void drawTriangles() { stroke(LINE_COLOR); strokeWeight(LINE_WIDTH); int[][] links = delaunay.

Processing Lissajous

  • POSTS
ステレオオーディオからリサジュー図形を描画する ステレオオーディオから音声信号を取得します。 取得した信号を左右のチャンネルに分離します。 左右のチャンネルの信号に対して、異なる周波数の正弦波を加えます。このとき、周波数の比率は、描画するリサジュー図形の形状を決定します。 加えた正弦波の波形を、x軸に左チャンネルの波形、y軸に右チャンネルの波形をとり、2次元平面上にプロットします。 プロットした点を順番につなぎ、リサジュー図形を描画します。 以上が、ステレオオーディオからリサジュー図形を描画する方法の簡単な手順です。これらの手順を実行することで、ステレオオーディオから美しいリサジュー図形を描画することができます。 リサジュー図形 - Wikipedia import processing.sound.*; Waveform monitorWave; final int SAMPLES = 2048; final float MIN_STD = 16.0; final int X_FACTOR = 20; final int Y_FACTOR = 20; int lineWeight = 1; color lineColor = color(0, 224, 255); color backgroundColor = color(0,63,73); void setup() { size(720, 300); //fullScreen(); frameRate(120); background(backgroundColor); strokeWeight(lineWeight); stroke(lineColor); initializeAudio(); } void initializeAudio() { AudioIn audioInput = new AudioIn(this, 0); audioInput.start(); monitorWave = new Waveform(this, SAMPLES); monitorWave.