i edited BronzeWing's code and made it faster so it still has a cool update effect(as long as line 72 is not commeted). it's faster than Aristotle's code when line 72 is commeted out and almost as fast when its not commeted out
#!/usr/bin/perl -w
use strict;
use Tk;
############
# Settings #
############
my $Epsilon = 8;
my @Lines = ([200, 300, 600, 300]);
my @Points = map $_/90, (
#my design best with 90 for @Points
(-20,20),
(20,10),
(90,-10),
(120,20),
#original design best with 96 for @Points
#( 0, 0),
#( 10, 20),
#( 90, -20),
#(100, 0),
);
#you can put your own colors here
sub randomc {
my $i = rand(2);
if ($i>=0 && $i<1) {return '#b10000';}
if ($i>=1 && $i<2) {return '#b15128';}
}
###########
# Widgets #
###########
my $Main = new Tk::MainWindow;
$Main->Label('-textvariable'=>\(my $Status="Initializing..."))->pack;
my $Canvas = $Main->Canvas(
'-width'=>900,
'-height'=>700,
'-background'=>'#000000'
)->pack;
my @LineItems = @Lines;
#############
# Main Loop #
#############
$Main->update;
while (++our $i<10) { # change 10 if u need more
$Status = "Iteration $i...";
for (my $Line=0;$Line<=@Lines-1;$Line++) {
my @Line = @{$Lines[$Line]};
if (abs($Line[2]-$Line[0])>$Epsilon or abs($Line[3]-$Line[1])>
+$Epsilon) {
my @NewLines;
my @NewItems;
for (my $Point=0;$Point<$#Points-1;$Point+=2) {
my ($X1, $Y1, $X2, $Y2) = @Line;
push @NewLines, my $NewLine = [
$Line[0]+($Line[2]-$Line[0])*$Points[$Point+0] +
($Line[3]-$Line[1])*$Points[$Point+1],
$Line[1]+($Line[3]-$Line[1])*$Points[$Point+0] -
($Line[2]-$Line[0])*$Points[$Point+1],
$Line[0]+($Line[2]-$Line[0])*$Points[$Point+2] +
($Line[3]-$Line[1])*$Points[$Point+3],
$Line[1]+($Line[3]-$Line[1])*$Points[$Point+2] -
($Line[2]-$Line[0])*$Points[$Point+3]
];
push @NewItems, $Canvas->createLine(@$NewLine, '-fill'
+ => randomc());
}
splice(@Lines,$Line,1,@NewLines);
#$Line += $#NewLines;#good for some fractals not for others wi
+thout commet you need more iterations and update effect isnt as good
}
$Main->Exists ? $Main->update : exit; #with this line commeted
+ out its like Aristotle's Code
}
$Main->Exists ? $Main->update : exit;
last unless 2;
}
$Status = "Done.";
MainLoop;
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
Outside of code tags, you may need to use entities for some characters:
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.
|
|