私はPerceptronhttp://perceptron.sourceforge.netの開発者の1人です-Javaで書かれたビデオフィードバックフラクタルのユニークなジェネレーターです。このオープンソースプロジェクトに注目して、SourceForgeWebサイトのフォーラムにも参加できるようにしたいと思います。
特に、現在の線形幾何学的変換を改善することに興味があります。
パーセプトロンが生成するのは、常にジュリアフラクタルのフラグメントで構成されるIFSフラクタルです。このような組み合わせは、画像変換の2段階の循環(再帰的、無限)プロセスで作成されます。
z_new = f(z_old)+constant_cおよび線形マッピングに従ってモーフィングします。
DoubleBuffer.javaファイルでは、z_new =(x、y)で指定された座標で「画面」からピクセルの色を読み取ります。
当然、複素数z_newは複素平面のどこにあってもかまいませんが、「画面」には厳密な物理的寸法があります。目的の座標は画面に合わせて適切にスケーリングされています。これは問題ではありません。
ただし、「z_newの絶対値を取る」、「z_newが大きい場合はラップする」など、一見不要なルールを適用します。これらのルールを適用して、存在しない画面外のピクセルが読み取られないようにします。代わりに、いくつかのピクセルを再読み込みします。これは驚くべきIFSフラクタルにつながります。
配列(行列)を興味深い方法でラップし、タイルを作成し、回転し、さまざまな形状のエッジを与えることによってデータを行列に整形する、より類似した「線形幾何学的変換」、ミラーをシミュレートする変換などをどこで学ぶことができるか知りたいです。
説明のために、このコードを参照してください。
public int interface_getColor(int x, int y) {
/**
* Only positive x and y at the screen can be read to obtain
* the color. */
x ^= x >> 31; // absolute values only; no choice but to disregard negative z_new
y ^= y >> 31;
x >>= 8; //divide by 256
y >>= 8;
/**
* The reflection transformation to put the off-screen z_new
* points back within the screen. Although x = x % W and y =
* y % H would suffice, it is more interesting like this... */
x = (x / W & 1) == 0 ? x % W : W_ONE - x % W; // if x/W is even then x =... else x=...
y = (y / H & 1) == 0 ? y % H : H_ONE - y % H;
/**
* Since the screen is a one-dimensional array of length
* W*H, the index of any element is i(x,y) = x + W * y. */
return buffer.getElem(x + W * y);
}
ご覧のとおり、速度にはビット演算子が必要であり、従来の配列ラッピングは、IFSフラクタルから誰もが望んでいたよりも驚異的です。このハードコードされたブロックを定義ファイルの方程式に置き換えるとよいでしょう。テンプレートの提案が必要です。