Files
blackroad/scripts/pendulum.sh
Alexa Amundson 78fbe80f2a Initial monorepo — everything BlackRoad in one place
bin/       230 CLI tools (ask-*, br-*, agent-*, roadid, carpool)
scripts/   99 automation scripts
fleet/     Node configs and deployment
workers/   Cloudflare Worker sources (roadpay, road-search, squad webhooks)
roadc/     RoadC programming language
roadnet/   Mesh network (5 APs, WireGuard)
operator/  Memory system scripts
config/    System configs
dotfiles/  Shell configs
docs/      Documentation

BlackRoad OS — Pave Tomorrow.

RoadChain-SHA2048: d1a24f55318d338b
RoadChain-Identity: alexa@sovereign
RoadChain-Full: d1a24f55318d338b24b60bad7be39286379c76ae5470817482100cb0ddbbcb97e147d07ac7243da0a9f0363e4e5c833d612b9c0df3a3cd20802465420278ef74875a5b77f55af6fe42a931b8b635b3d0d0b6bde9abf33dc42eea52bc03c951406d8cbe49f1a3d29b26a94dade05e9477f34a7d4d4c6ec4005c3c2ac54e73a68440c512c8e83fd9b1fe234750b898ef8f4032c23db173961fe225e67a0432b5293a9714f76c5c57ed5fdf35b9fb40fd73c03ebf88b7253c6a0575f5afb6a6b49b3bda310602fb1ef676859962dad2aebbb2875814b30eee0a8ba195e482d4cbc91d8819e7f38f6db53e8063401649c77bb994371473cabfb917fb53e8cbe73d60
2026-03-14 17:08:41 -05:00

58 lines
2.0 KiB
Bash
Executable File

#!/bin/bash
# BR-Pendulum - Double pendulum simulation
clear
trap 'printf "\033[?25h\033[0m"; clear; exit' INT TERM EXIT
printf '\033[?25l'
COLS=$(tput cols) LINES=$(tput lines)
CX=$((COLS/2)) CY=4
L1=8 L2=8
A1=314 A2=200 V1=0 V2=0
G=1 DT=3
while true; do
printf '\033[2J\033[H'
# Physics (simplified, integer-ish with bc)
SA1=$(echo "s($A1/100)" | bc -l)
CA1=$(echo "c($A1/100)" | bc -l)
SA2=$(echo "s($A2/100)" | bc -l)
CA2=$(echo "c($A2/100)" | bc -l)
DA=$(echo "$A1/100 - $A2/100" | bc -l)
SDA=$(echo "s($DA)" | bc -l)
CDA=$(echo "c($DA)" | bc -l)
ACC1=$(echo "scale=6; (-$G * 2 * $SA1 - $G * $SA2 * $CDA - $V2*$V2*$L2*$SDA - $V1*$V1*$L1*$SDA*$CDA) / ($L1 * (2 - $CDA*$CDA))" | bc -l 2>/dev/null || echo "0")
ACC2=$(echo "scale=6; (2 * ($V1*$V1*$L1*$SDA + $G*$SA1*$CDA - $V2*$V2*$L2*$SDA*$CDA + $G*2*$SA2)) / ($L2 * (2 - $CDA*$CDA))" | bc -l 2>/dev/null || echo "0")
V1=$(echo "$V1 + $ACC1 * $DT / 100" | bc -l)
V2=$(echo "$V2 + $ACC2 * $DT / 100" | bc -l)
A1=$(echo "scale=0; $A1 + $V1 * $DT" | bc)
A2=$(echo "scale=0; $A2 + $V2 * $DT" | bc)
# Positions
X1=$(echo "scale=0; $CX + $L1 * 2 * $SA1" | bc)
Y1=$(echo "scale=0; $CY + $L1 * $CA1" | bc)
X2=$(echo "scale=0; $X1 + $L2 * 2 * $SA2" | bc)
Y2=$(echo "scale=0; $Y1 + $L2 * $CA2" | bc)
# Draw pivot
printf '\033[%d;%dH\033[38;5;240m●\033[0m' "$CY" "$CX"
# Draw arm 1
[[ -n "$X1" && -n "$Y1" ]] && (( X1>0 && X1<COLS && Y1>0 && Y1<LINES )) && \
printf '\033[%d;%dH\033[38;5;205m◉\033[0m' "$Y1" "$X1"
# Draw arm 2
[[ -n "$X2" && -n "$Y2" ]] && (( X2>0 && X2<COLS && Y2>0 && Y2<LINES )) && \
printf '\033[%d;%dH\033[38;5;214m◉\033[0m' "$Y2" "$X2"
# Draw lines (simple)
printf '\033[%d;%dH\033[38;5;240m─\033[0m' "$(( (CY+Y1)/2 ))" "$(( (CX+X1)/2 ))"
[[ -n "$X1" && -n "$Y1" && -n "$X2" && -n "$Y2" ]] && \
printf '\033[%d;%dH\033[38;5;240m─\033[0m' "$(( (Y1+Y2)/2 ))" "$(( (X1+X2)/2 ))"
printf '\033[1;1H\033[38;5;135m◎ BR-Pendulum \033[38;5;69m[q=quit]\033[0m'
sleep 0.05
read -rsn1 -t 0.01 K && [[ "$K" == "q" ]] && exit
done