Merge branch 'main' into release

This commit is contained in:
Scott Richmond 2025-07-11 15:08:21 -04:00
commit c0b00356a7
2 changed files with 23 additions and 6 deletions

View File

@ -1,11 +1,22 @@
import {eq_vect, eq_color, resolve_color, get_turtle_color, set_turtle_color, turtle_radius, turtle_angle, turn_to_rad, turtle_init, command_to_state, background_color, rotate, last} from "./turtle_geometry.js"
import {eq_vect, eq_color, resolve_color, get_turtle_color, set_turtle_color, turtle_radius, turtle_angle, turn_to_rad, turtle_init, command_to_state, background_color, rotate, last, sub} from "./turtle_geometry.js"
function states_to_call (prev, curr) {
function states_to_call (prev, curr, call_stack) {
// console.log(prev)
// console.log(curr)
let calls = []
if (prev.pendown && !eq_vect(prev.position, curr.position)) {
calls.push(["line", prev.position[0], prev.position[1], curr.position[0], curr.position[1]])
console.log("headings", prev.heading, curr.heading)
console.log("forward?", curr.forward)
console.log("#calls", call_stack.length)
if (prev.heading == curr.heading && curr.forward && call_stack.length > 0) {
console.log("extending line!")
const [x, y] = sub(curr.position, prev.position)
const last_call = call_stack.pop();
const new_call = ["line", last_call[1], last_call[2], x + last_call[3], y + last_call[4]]
calls.push(new_call)
} else {
calls.push(["line", prev.position[0], prev.position[1], curr.position[0], curr.position[1]])
}
}
if (!eq_color(curr.pencolor, prev.pencolor)) {
calls.push(["stroke", ...resolve_color(curr.pencolor)])
@ -80,7 +91,7 @@ export function p5 (commands) {
for (let i = 1; i < states.length; ++i) {
const prev = states[i - 1]
const curr = states[i]
const calls = states_to_call(prev, curr)
const calls = states_to_call(prev, curr, my_calls)
for (const call of calls) {
// console.log(call)
if (call === "clear") {

View File

@ -56,6 +56,12 @@ export function add (v1, v2) {
return [x1 + x2, y1 + y2]
}
export function sub (v1, v2) {
const [x1, y1] = v1
const [x2, y2] = v2
return [x1 - x2, y1 - y2]
}
export function mult (vector, scalar) {
const [x, y] = vector
return [x * scalar, y * scalar]
@ -92,14 +98,14 @@ export function command_to_state (prev_state, curr_command) {
const {heading, position} = prev_state
const unit = unit_of(heading)
const move = mult(unit, steps)
return {...prev_state, position: add(position, move), clear: false}
return {...prev_state, position: add(position, move), clear: false, forward: true}
}
case "back": {
const [_, steps] = curr_command
const {heading, position} = prev_state
const unit = unit_of(heading)
const move = mult(unit, -steps)
return {...prev_state, position: add(position, move), clear: false}
return {...prev_state, position: add(position, move), clear: false, forward: false}
}
case "penup": {
return {...prev_state, pendown: false, clear: false}