|
![]() |
#1 |
Дмитрий Ерин
|
Ну раз такое дело, то вот вам первый критикал апдейт
![]() Первоисточник формулы на арбузе. Джоб: 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). |
![]() |
#2 |
Британский учённый
|
Неплохо, но нужно еще допилить, пока больше смахивает на лист каштана
![]() Во втором релизе было бы неплохо сделать динамическую скрутку в косячек ![]()
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще. |
|