動画はこちら
passive
--init
pi=math.pi
pi2=pi*2
behindAngle=math.rad(3) --Backward angle not visible.
echoAngle=math.rad(3) --Viewing angle of the echo.
function onTick()
	passiveData={} --Initialize
    --Sonar data input
	for i=0,15 do
		if input.getBool(i+1) then
            local x,y
			x=input.getNumber(i*2+1)*pi2
			y=input.getNumber(i*2+2)*pi2
			table.insert(passiveData,{bearing=x,elevation=y})
		end
	end
end
function onDraw()
    local w,h,cw,ch,radius
    --resolution
	w=screen.getWidth()
	h=screen.getHeight()
    --center
	cw=w/2
	ch=h/2
    --display sonars circle radius
	radius=h/2-3
    
    --drawing echo
    screen.setColor(0,255,0,128)
	for i=1,#passiveData do
        local bearing=passiveData[i].bearing
        if pi-behindAngle >= bearing and -pi+behindAngle <= bearing then
            local triAngleX1,triAngleY1,triAngleX2,triAngleY2
            triAngleX1=cw+radius*math.sin(bearing-echoAngle)
            triAngleY1=ch-radius*math.cos(bearing-echoAngle)
            triAngleX2=cw+radius*math.sin(bearing+echoAngle)
            triAngleY2=ch-radius*math.cos(bearing+echoAngle)
            screen.drawTriangleF(cw, ch, triAngleX1, triAngleY1, triAngleX2, triAngleY2)
        end
	end
    
    --drawing circle
    screen.setColor(0,255,0)
	screen.drawCircle(cw,ch,radius)
end