Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Подскажите фрактальный алгоритм для генерации множества точек в заданном пространстве (http://www.flasher.ru/forum/showthread.php?t=185087)

Jitakuzu 04.10.2012 18:28

Подскажите фрактальный алгоритм для генерации множества точек в заданном пространстве
 
Доброго времени суток.

Подскажите фрактальный алгоритм для генерации множества точек в заданном пространстве.
Входящие данные: ширина области, высота области, кол-во генерируемых точек, некий коэффициент/ты[, прочее, если потребуется]
На выходе хотелось бы получить множество точек, внешне напоминающих хаотичность.
Идеально подошел бы фрактал "Дракон" Хартера-Хейтуэя. Теории нашел много, применить на деле не смог :(

Заранее спасибо.

NikolyA 04.10.2012 18:38

а какого ответа ожидаете? написание готового алгоритма с реализацией его на AS3?

alatar 04.10.2012 18:51

На той же википедии есть реализации на php и Delphi.

Jitakuzu 04.10.2012 18:53

Цитата:

Сообщение от NikolyA (Сообщение 1098511)
а какого ответа ожидаете? написание готового алгоритма с реализацией его на AS3?

Да он легкий, я просто въехать не могу)

alatar, спасибо )

NikolyA 04.10.2012 18:55

Цитата:

Сообщение от Jitakuzu (Сообщение 1098514)
Да он легкий, я просто въехать не могу)

так показывай что не получается, давай въезжать вместе

alatar 04.10.2012 18:57

На wonderfl куча реализаций фракталов.

Добавлено через 2 минуты
В том числе и Дракон.

Jitakuzu 04.10.2012 19:00

ну вот тот же алгоритм, который на википедии
PHP код:

<?php
function st($x1,$y1,$x2,$y2,$k,$image,$pcolor)
{
  if (
$k 0)
  {
    
$xn = ($x1 $x2) / + ($y2 $y1) / 2;
    
$yn = ($y1 $y2) / - ($x2 $x1) / 2;
    
st($x2,$y2,$xn,$yn,$k 1,$image,$pcolor);
    
st($x1,$y1,$xn,$yn,$k 1,$image,$pcolor);
  } 
  else
  {
    
imageline($image,$x1,$y1,$x2,$y2,$pcolor);
  }
}
$dragon imagecreatetruecolor(640,480);
$bcolor imagecolorallocate($dragon,255,255,255);
imagecolortransparent($dragon,$bcolor);
imagefill($dragon,1,1,$bcolor);
$dcolor imagecolorallocate($dragon,255,0,0);
st(200,200,500,300,20,$dragon,$dcolor);
header("Content-type: image/png");
imagepng($dragon);
imagedestroy($dragon);
?>

тут во входящих данных 2 точки, то есть, отрезок некий, а мне нужны не отрезки, а точки. Соответственно, входящим параметром должна быть тоже точка (0, 0 например)

alatar 04.10.2012 19:08

Точки это только один из способов отрисовки не влияющий на алгоритм.

Jitakuzu 04.10.2012 19:19

Я сделал так:
Код AS3:

var x1:Number = 0;
var z1:Number = 0;
var x2:Number = 1000;
var z2:Number = 1000;
for (var i:int = 0; i < 100; i++)
{
        var xn:Number = (x1 + x2) / 2 + (z2 - z1) / 2;
        var zn:Number = (z1 + z2) / 2 - (x2 - x1) / 2;
 
        x1 = x2;
        z1 = z2;
        x2 = xn;
        z2 = zn;
 
        trace(xn, zn)
}

Ничего хорошего не вышло - массовые скопления в определенных точках...

alatar 04.10.2012 20:05

Код AS3:

package 
{
        import flash.display.Graphics;       
        import flash.display.Sprite;
        import flash.display.StageAlign;
        import flash.display.StageScaleMode;
        import flash.events.MouseEvent;
 
        public class Main extends Sprite
        {
                public function Main():void
                {
                        stage.align = StageAlign.TOP_LEFT;
                        stage.scaleMode = StageScaleMode.NO_SCALE;
 
                        stage.addEventListener(MouseEvent.CLICK, onClick);
                }
 
                private function onClick(e:MouseEvent):void
                {
                        var g:Graphics = this.graphics;
                        g.lineStyle(1, 0);
                        fractal(200, 200, 500, 300, 10);
                }
 
                private function fractal(x1:int, y1:int, x2:int, y2:int, depth:int):void
                {
 
                        var tx:int;
                        var ty:int;
 
                        if (depth == 0)
                        {
                                var g:Graphics = this.graphics;
                                g.drawCircle(x1, y1, 2);
                                g.drawCircle(x2, y2, 2);
                                return;
                        }
 
                        tx = (x1 + x2) / 2 + (y2 - y1) / 2;
                        ty = (y1 + y2) / 2 - (x2 - x1) / 2;
 
                        fractal(x2, y2, tx, ty, depth - 1);
                        fractal(x1, y1, tx, ty, depth - 1);
                }
        }
}



Часовой пояс GMT +4, время: 01:49.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.