示例#1
0
    def __init__(self, data, iterations):
        """
        Constructor

        :param dict data: JSON data describing the fractal's
            L-System
        :param int iterations: iteration to generate
        """
        if iterations < 0:
            raise ValueError("Iterations cannot be negative")

        try:
            initiator = data['start']
            rules = data['rules']
            self.system = LSystem(initiator, rules)
            self.angle = data['angle']
            self.scale = 1.0 / data['divisor']
            self.initial_size = data['length']
            self.iterations = iterations
        except KeyError as e:
            raise ValueError("Data JSON missing key {0}".format(e))
示例#2
0
					pass
				elif event.type == sdl2.SDL_MOUSEBUTTONDOWN:
					pass
				elif event.type == sdl2.SDL_MOUSEBUTTONUP:
					pass
			#self.draw(renderer,frame_time)
			last_frame = current_frame


if len(sys.argv) < 2:
	print 'Usage: python %s <input file>'%sys.argv[0]
	sys.exit(0)
	
filename = sys.argv[1]
try:
	L = LSystem(filename)
except LSystemParseException:
	print 'Error parsing %s'%filename
	sys.exit(0)

sdl2.ext.init()

window = sdl2.ext.Window("CSC 205 A3", size=(A3Canvas.CANVAS_SIZE_X, A3Canvas.CANVAS_SIZE_Y))
window.show()

renderer = sdl2.SDL_CreateRenderer(window.window, -1,0, sdl2.SDL_RENDERER_PRESENTVSYNC | sdl2.SDL_RENDERER_ACCELERATED);


sdl2.SDL_SetRenderDrawColor(renderer, 0, 255, 0, 255)
sdl2.SDL_RenderClear(renderer)
sdl2.SDL_RenderPresent(renderer)
示例#3
0
from LSystem import LSystem

rule1 = {"a": 'F', "b": 'FF'}

rule2 = {"a": 'L', "b": 'F[L]L'}

system = LSystem(axiom='L',
                 rules=[rule1, rule2],
                 angle=45,
                 start_pos=(500, 0),
                 start_ang=90,
                 iterations=7,
                 line_len=10,
                 screen_size=1000)

system.generate()
from LSystem import LSystem

rule1 = {"a": 'F', "b": 'F-G+F+G-F'}

rule2 = {"a": 'G', "b": 'GG'}

sierpinski_triangle = LSystem(axiom='F-G-G',
                              rules=[rule1, rule2],
                              angle=120,
                              start_pos=(0, 0),
                              start_ang=0,
                              iterations=5,
                              line_len=50,
                              screen_size=1000)

sierpinski_triangle.generate()
from LSystem import LSystem

rule1 = {"a": 'F', "b": 'FF'}

rule2 = {"a": 'X', "b": '+F+F[+Y]-F[+X+F+X]-F-FF[-Y][+X]FF'}

rule3 = {"a": 'Y', "b": 'X'}

system = LSystem(axiom='X',
                 rules=[rule1, rule2, rule3],
                 angle=15,
                 start_pos=(750, 0),
                 start_ang=130,
                 iterations=12,
                 line_len=2,
                 screen_size=2500)

system.generate()
示例#6
0
import sys
sys.path.insert(0, './LindenmayerSystem')
sys.path.insert(1, '.')
from LSystem import LSystem

if __name__ == '__main__':
    rules_dict = {'F': 'F-F++F-F'}
    start_string = 'F'
    measures_dict = {'length': 2, 'angle': 60}
    fn_dict = {
        'F': lambda turtle1: turtle1.forward(measures_dict['length']),
        'B': lambda turtle1: turtle1.backward(measures_dict['length']),
        '-': lambda turtle1: turtle1.left(measures_dict['angle']),
        '+': lambda turtle1: turtle1.right(measures_dict['angle']),
    }

    ls = LSystem(start_string=start_string,
                 rules_dict=rules_dict,
                 iterations=4,
                 fn_dict=fn_dict)
    ls.display()
    ls.end_this()
示例#7
0
from LSystem import LSystem

rule1 = {"a": 'F', "b": '+F--F+'}

system = LSystem(axiom='F+F+F+F+F+F+F+F',
                 rules=[rule1],
                 angle=45,
                 start_pos=(750, 1800),
                 start_ang=0,
                 iterations=13,
                 line_len=8,
                 screen_size=2000)

system.generate()
示例#8
0
from LSystem import LSystem

rule1 = {"a": 'X', "b": 'X+YF+'}

rule2 = {"a": 'Y', "b": '-FX-Y'}

dragon_curve = LSystem(axiom='FX',
                       rules=[rule1, rule2],
                       angle=90,
                       start_pos=(500, 500),
                       start_ang=90,
                       iterations=15,
                       line_len=5,
                       screen_size=1000)

dragon_curve.generate()
示例#9
0
class TurtleCommands(object):
    """
    Generate Turtle commands for any TurtleMachine
    from an LSystem.
    """
    def __init__(self, data, iterations):
        """
        Constructor

        :param dict data: JSON data describing the fractal's
            L-System
        :param int iterations: iteration to generate
        """
        if iterations < 0:
            raise ValueError("Iterations cannot be negative")

        try:
            initiator = data['start']
            rules = data['rules']
            self.system = LSystem(initiator, rules)
            self.angle = data['angle']
            self.scale = 1.0 / data['divisor']
            self.initial_size = data['length']
            self.iterations = iterations
        except KeyError as e:
            raise ValueError("Data JSON missing key {0}".format(e))

    def __iter__(self):
        """
        Generate turtle commands from the underlying
        L-System.

        :rtype: generator of str
        :returns: generator of turtle command strings
            in the form:
            OPCODE param1 param2 ...
        """
        size = self.initial_size * self.scale ** self.iterations
        steps = self.system.nth(self.iterations)
        for command in self.generate_commands(steps, self.angle, size):
            yield command

    def generate_commands(self, steps, angle, size):
        """
        Take an iteration of an LSystem and generate
        corresponding turtle commands

        :param str steps: Iteration string from the L-System.
        :param float angle: Angle for every turn left/right command.
        :param float size: Length of path for forward commands.

        :rtype: generator of str
        :returns: generator of turtle command strings
            in the form:
            OPCODE param1 param2 ...
        """
        for step in steps:
            if step in ["F", "A", "B"]:
                yield "FORWARD {0}".format(size)
            elif step == "+":
                yield "RIGHT {0}".format(angle)
            elif step == "-":
                yield "LEFT {0}".format(angle)
            else:
                pass
示例#10
0
from LSystem import LSystem

Algae = LSystem(variables = "A B".split(), constants =[], axiom="A", rules={"A": "AB", "B":"A"})
FractalTree = LSystem(variables = "0 1".split(), constants ="[ ]".split(), axiom="0", rules={"1": "11", "0":"1[0]0"})
CantorSet = LSystem(variables="A B".split(), constants=[], axiom = "A", rules={"A":"ABA", "B":"BBB"})
KochCurve = LSystem(variables="F".split(), constants="+ -".split(), axiom = "F", rules={"F":"F+F−F−F+F"})
示例#11
0
with open('Lsystems.txt') as text:
    for line in text:
        stringList = re.split(',|\n', line)
        axiom = stringList[1]
        angle = math.radians(int(stringList[2]))
        length = int(stringList[3])
        x, y = int(stringList[4]), int(stringList[5])
        rulesList = stringList[6].split()
        rules = []
        for rule in rulesList:
            rules.append({
                'in': rule.split('->')[0],
                'out': rule.split('->')[1]
            })
        systems.append(LSystem(axiom, rules, x, y, length, angle))

curr = systems[4]

pygame.init()
screen = pygame.display.set_mode([500, 500])

first = True
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.MOUSEBUTTONDOWN:
            screen.fill((255, 255, 255))
            curr.draw(screen)