I recently got BBC-Micro:bit, and it has a small 5x5 led "display".
I want to make code that draws smooth moving dots without staircase effect, but I'm struggling to make it vertically and horizontally smooth when moving.
This is what I have, it only smooths dot vertically:
while (true) {
basic.clearScreen()
plotAA(input.acceleration(Dimension.X), input.acceleration(Dimension.Y),
255, 255)
basic.pause(15)
}
function plotAA(_x: number, _y: number, _brightness: number, _scale: number) {
/*
* Draw a dot without "staircase effect"/aliasing.
* _x : from 0 to 4 but in _scale scale
* _y : from 0 to 4 but in _scale scale
* _brightness : led brightness
*
* Half of _scale is a number of [0,0] pixel center
*/
// Keep in mind that numbers are 32 bit signed integers!
let px = (_x + _scale) % _scale * 2 // subpixel x position
let py = (_y + _scale) % _scale * 2 // subpixel y position
// It should be _x / _scale, but to fix a bug I use this...
let rx = (_x + _scale) / _scale - 1 // real x position (ceil)
let ry = (_y + _scale) / _scale - 1 // real y position (ceil)
led.plotBrightness(rx, ry, ((_scale - py) + /* Add something here? */0) * _brightness / _scale)
led.plotBrightness(rx + 1, ry, ((_scale - py)) * _brightness / _scale)
led.plotBrightness(rx, ry + 1, (py) * _brightness / _scale)
led.plotBrightness(rx + 1, ry + 1, (py) * _brightness / _scale)
}
To test this code, use https://makecode.microbit.org/ (select JavaScript on the top).
How to make it move smoothly vertically and horizontally at the same time?