D3 Gosper Curve using L-System
HTML
<script src="http://d3js.org/d3.v3.min.js"></script>
JavaScript
function mergeArr(arr){
var str = ''
for (position in arr){
str = str.concat(arr[position])
}
return str
}
function vec_rotate(vector, angle, debug){
if (debug){
console.log("Vector Rotation: ")
console.log([(Math.cos(angle)*vector[0]) - (Math.sin(angle)/vector[1]) ,
(Math.sin(angle)*vector[0]) + (Math.cos(angle)*vector[1])])
}
return [(Math.cos(angle)*vector[0]) - (Math.sin(angle)*vector[1]) ,
(Math.sin(angle)*vector[0]) + (Math.cos(angle)*vector[1])]
}
function turtleMapper(axiom, start_level, rules, center, debug){
var inner_rec = function(level, program){
if (level == 0) {
return program
} else {
var copy =[];
for(var position=0; position < program.length; position++) {
var word = program.slice(position, position+1)
if (rules[word]) {
copy.push(rules[word])
} else {
copy.push(word)
}
}
return inner_rec(level-1, mergeArr(copy))
}
}
var finished_program = inner_rec(start_level, axiom)
var position_state = {
direction: [1,0],
position: center
}
var positions = [center]
for(var move = 0; move<finished_program.length; move++){
if (debug){
console.log("___________________")
console.log("On Step: " + move)
console.log("Current symbol: " + finished_program[move])
}
position_state = step(finished_program[move], position_state, debug)
if (position_state.last_move_step){
positions.push(position_state.position)
}
}
return...