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
58 lines
2.0 KiB
Bash
Executable File
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
|