Show approximation of contact zone

This commit is contained in:
Kistaro Windrider 2025-06-01 20:38:56 -07:00
parent a3ac8074ae
commit d2ec1b39df
Signed by: kistaro
SSH Key Fingerprint: SHA256:TBE2ynfmJqsAf0CP6gsflA0q5X5wD5fVKWPsZ7eVUg8

View File

@ -23,7 +23,7 @@ function collides()
-- x -- x
if ldx==0 then if ldx==0 then
local lx=lx0 -- which ==lx1 local lx=lx0 -- which ==lx1
if (lx<bx0 or lx>=bx1) return false if (lx<bx0 or lx>=bx1) return nil
else else
local tx0=(bx0-lx0)/ldx local tx0=(bx0-lx0)/ldx
local tx1=(bx1-lx0)/ldx local tx1=(bx1-lx0)/ldx
@ -34,7 +34,7 @@ function collides()
if ldy==0 then if ldy==0 then
local ly=ly0 -- which ==ly1 local ly=ly0 -- which ==ly1
if (ly<by0 or ly>=by1) return false if (ly<by0 or ly>=by1) return nil
else else
local ty0=(by0-ly0)/ldy local ty0=(by0-ly0)/ldy
local ty1=(by1-ly0)/ldy local ty1=(by1-ly0)/ldy
@ -43,7 +43,8 @@ function collides()
tmax=min(tmax,max(ty0,ty1)) tmax=min(tmax,max(ty0,ty1))
end end
return tmax>=tmin if (tmax < tmin) return nil
return tmin,tmax
end end
@ -73,7 +74,7 @@ function _to_halfopen(x0,x1)
end end
function _update60() function _update60()
local t=time()/4 local t=time()/16
local bx0_=_bounce_screen(t*1) local bx0_=_bounce_screen(t*1)
local by0_=_bounce_screen(t*2) local by0_=_bounce_screen(t*2)
@ -117,11 +118,19 @@ end
function _draw() function _draw()
cls(0) cls(0)
rect(bx0,by0,bx1,by1,6) rect(bx0,by0,bx1,by1,6)
local lc=2 line(lx0,ly0,lx1,ly1,2)
if collides() then local cmin, cmax = collides()
lc=8 if cmin then
local dx,dy=lx1-lx0,ly1-ly0
line(lx0 + dx*cmin,
ly0 + dy*cmin,
lx0 + dx*cmax,
ly0 + dy*cmax,
8)
pset(lx0 + dx*cmin,
ly0 + dy*cmin,
10)
end end
line(lx0,ly0,lx1,ly1,lc)
pset(last_mx,last_my,7) pset(last_mx,last_my,7)
end end