AXForum  
Вернуться   AXForum > Прочие обсуждения > Курилка
NAV
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.06.2016, 22:26   #1  
Ruff is offline
Ruff
Дмитрий Ерин
Аватар для Ruff
1C
 
475 / 396 (14) ++++++
Регистрация: 18.09.2003
Адрес: Тула
Цитата:
Сообщение от Link Посмотреть сообщение
Ждем интеграции с продуктами Dynamics
Ну раз такое дело, то вот вам первый критикал апдейт
Первоисточник формулы на арбузе.

Джоб:
X++:
static void CannabolaImage(Args _args)
{
    #define.PI(3.1415926535897900)
    
    int W = 500, H = W;       // при таких размерах время построения ~1 минута
    real scale = 1.0;
    
    int x, y, oX, oY;
    real dx, dy, angle, radius;
    int color;
    real bright;
    int start = timenow();

    Image                   image       = new Image();
    ImageList               imageList   = new ImageList(W, H);
    Dialog                  dialog      = new Dialog("Cannabola");
    DialogWindow            dialogWindow= dialog.addWindow();
    FormBuildWindowControl  imageBuildControl;
    FormWindowControl       imageControl;

/****************************************************************
    Формула листа конопли
    Автор: Антон Сухинов
    Подробнее: [url]http://forum.arbuz.uz/index.php?showtopic=998[/url]
*/
    real cannabola(real a, real r)
    {
        real b,c,d,e,f;
        real leafs, contour, barbs, junction, length, vein, petiole ;

        [b, c]      = [ a / 2 * 7,          r * r * r * r ];
        [d, e]      = [ cos(b - c * 0.3),   acos(cos((a + #PI) * 7 - c * 0.3)) ];
        f           = sin(100 * r * cos(a) + 10 * cos(40 * r * sin(a)))
                    + sin(100 * r * sin(a) + 10 * sin(40 * r * cos(a)));
        leafs       = r == 0 ? 0 : 1 / ( abs(d) + (0.005 / r));                             // f1
        contour     = abs(sin(a / 2));                                                      // f5
        barbs       = contour == 0 ? 0
                    : 8 * (((sin(b) * sin(b)) / ((r / contour) * (r / contour) * 10 + 1))
                        / (abs(sin((r - (e + 2 * r * e*e) / 20) * 8 * #PI)) + 0.1 + d*d));  // f2
        junction    = 3 / (10000 * r*r + 0.1);                                              // f3
        length      = contour - r*r;                                                        // f4
        vein        = 1 + 0.01 / (f*f + 0.01);                                              // f6
        petiole     = (r + 0.2) * 0.0002 / ((a - 0.1 * r) * (a - 0.1 * r) + 0.0001);        // f7

        return (((leafs + barbs + junction) * length - contour) * vein) + petiole;
    }
//-------------------------------------------------
    ;
    image.createImage(W, H, 32);
    for (x=0; x < W; x++)
        for (y=0; y < H; y++)
        {
            [oX, oY]    = [W*0.5, H*0.5];
            [dx, dy]    = [x - oX, oY - y];
            angle       = sign(dy) * (dx == 0 ? #PI/2 : (#PI/2 + sign(dx) * (atan(abs(dy/dx)) - #PI/2)));
            radius      = scale * sqrt (dx*dx + dy*dy) / min(oX, oY);
            
            bright      = cannabola(angle, radius);
            color       = (bright  <= 0) ? Image::rgb(255,255,255) 
                                         : Image::rgb(bright, (bright+50)*1.5, bright);
            image.setPixel(y, x, color);
        }
    imageList.add(image);

    dialog.addText(strfmt("ширина %1, высота %2, время построения %3 сек", W, H, timenow() - start));
    imageBuildControl = dialogWindow.control();
    imageBuildControl.width(W);
    imageBuildControl.height(H);
    dialog.doInit();
    imageControl = dialog.formRun().control(imageBuildControl.id());
    imageControl.imageList(imageList);
    dialog.run();
}
И его вывод:
За это сообщение автора поблагодарили: mazzy (2).
Старый 23.06.2016, 01:53   #2  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 523 (19) +++++++
Регистрация: 25.11.2005
Адрес: UK
Записей в блоге: 9
Цитата:
Сообщение от Ruff Посмотреть сообщение
Ну раз такое дело, то вот вам первый критикал апдейт
Неплохо, но нужно еще допилить, пока больше смахивает на лист каштана
Во втором релизе было бы неплохо сделать динамическую скрутку в косячек
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 15:59.