
サンプル・プログラム
CrystalSnow.php | サンプル・プログラム本体 |
解説:再帰図形

再帰図形の描き方は、「PHPで樹木曲線を描く」とほぼ同じである。

ユーザー関数 CrystalSnow では、中心から結晶の角の数(デフォルトでは正六角形)だけ回転させ、tree3 を呼び出す。

tree3 は再帰呼び出しによる樹木曲線で、枝を2本から3本に増やしている。
解説:太さのある直線
解説:各種パラメータ
323: /**
324: * $_GET または $_POST から正規化した数値を取り出す
325: * @param string $type int:整数 float:浮動小数
326: * @param string $key キー
327: * @param mixed $min, $max 最小値、最大値
328: * @param string $errmsg エラーメッセージを格納する
329: * @return mixed 取得値/NULL:エラー
330: */
331: function getParameters(&$items) {
332: static $tbl_val = array(
333: //描画領域(正方形)の1辺の長さ(ピクセル)
334: 'width'=>array('type'=>'float', 'min'=>100, 'max' => 1000, 'def'=>500),
335: //再帰回数
336: 'recur'=>array('type'=>'int', 'min'=>1, 'max'=>8, 'def'=>6),
337: //結晶の角の数(何角形か)
338: 'corner'=>array('type'=>'int', 'min'=>3, 'max'=>12, 'def'=>6),
339: //枝の発生位置(比率)
340: 'fac'=>array('type'=>'float', 'min'=>0.2, 'max'=>0.8, 'def'=>0.55)
341: );
342: static $tbl_str = array(
343: //背景色
344: 'bgcolor'=>array('pat'=>'/^([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})/i', 'def'=>'000000'),
345: //描画色
346: 'color'=>array('pat'=>'/^([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})/i', 'def'=>'CCCCFF')
347: );
348: foreach ($tbl_val as $key=>$arr) {
349: $items[$key] = getValidNumber($key, $arr['type'], $arr['min'], $arr['max'], $arr['def']);
350: }
351: foreach ($tbl_str as $key=>$arr) {
352: $items[$key] = '#' . getValidString($key, $arr['pat'], $arr['def']);
353: }
354: }
参考サイト
- PHPで樹木曲線を描く:ぱふぅ家のホームページ
樹木曲線の枝を3本に増やし、中心から角度を変えて複数生やしてやることで、雪の結晶のような図形ができあがる。
(2022年4月17日)PHP8対応,リファラ・チェック改良。