' This program exported from BASIC Anywhere Machine (Version [5.2.3].[2023.12.16.16.28]) on 2024.01.14 at 01:23 (Coordinated Universal Time)

' QB64 program by vince
' https://qb64phoenix.com/forum/showthread.php?tid=270&pid=22598#pid22598

' ported to BAM by Charlie Veniot

declare sub tri(x1,y1, x2,y2, x3,y3, n)

sw = 520 ' 1024
sh = 240 ' 480

dim m
m = 20

screen _newimage(sw, sh+1, 32)

do
    t = t + 0.02
    m = 25+20*sin(t)
    cls
    tri (0, sh, sw/2, 0, sw, sh, 10)
    _display
loop

end

sub tri(x1,y1, x2,y2, x3,y3, n)

    if n < 1 then exit sub

    cx = (x1 + x3)/2
    cy = (y1 + y3)/2

    a = _atan2(y3-y1, x3-x1)
    d = sqr((cy - y2)^2 + (cx - x2)^2)
    w = d*tan(sqr(n)/m)
    nx = 1*(w)*cos(a)
    ny = 1*(w)*sin(a)
    line (cx, cy)-step(nx, ny),_rgb(255,255,0)
    line -(x2, y2),_rgb(0,255,0)
    line (cx, cy)-step(-nx, -ny),_rgb(255,255,0)
    line -(x2, y2),_rgb(255,255,255)
 '   line (x1,y1)-(x3,y3),_rgb(255,255,0)

    tri (x1,y1, cx - nx, cy - ny, x2, y2, n - 1)
    tri (x3,y3, cx + nx, cy + ny, x2, y2, n - 1)
end sub