903 {
906
907
908
909 auto plotTile = [&](
const CRGB &color,
float px,
float py,
910 bool horiz) {
913 float fx = px - (float)ix;
914 float fy = py - (float)iy;
915 Tile2x2_u8 tile;
916 tile.setOrigin((u16)ix, (u16)iy);
917 if (horiz) {
918 tile.at(0, 0) = (
u8)((1.0f - fy) * 255.0f);
919 tile.at(1, 0) = 0;
920 tile.at(0, 1) = (
u8)(fy * 255.0f);
921 tile.at(1, 1) = 0;
922 } else {
923 tile.at(0, 0) = (
u8)((1.0f - fx) * 255.0f);
924 tile.at(1, 0) = (
u8)(fx * 255.0f);
925 tile.at(0, 1) = 0;
926 tile.at(1, 1) = 0;
927 }
929 };
930
931
932 constexpr float amp = 0.3f;
933
934
935
936 CRGB xColor(0, 255, 255);
937 float centerY = (float)(h - 1) * 0.5f;
938 float prevPy = 0.0f;
939 for (
int x = 0;
x < w;
x++) {
941 float py = centerY - val.to_float() * amp * centerY;
942 plotTile(xColor, (
float)
x, py,
true);
944 float dy = py - prevPy;
945 int gap = (int)
fabsf(dy);
946 for (int s = 1; s < gap; s++) {
947 float t = (float)s / (
float)gap;
948 float midY = prevPy + dy *
t;
949 float midX = (float)(
x - 1) +
t;
950 plotTile(xColor, midX, midY, true);
951 }
952 }
953 prevPy = py;
954 }
955
956
957
958 CRGB yColor(255, 255, 0);
959 float centerX = (float)(w - 1) * 0.5f;
960 float prevPx = 0.0f;
961 for (
int y = 0;
y < h;
y++) {
963 float px = centerX + val.to_float() * amp * centerX;
964 plotTile(yColor, px, (
float)
y,
false);
966 float dx = px - prevPx;
967 int gap = (int)
fabsf(dx);
968 for (int s = 1; s < gap; s++) {
969 float t = (float)s / (
float)gap;
970 float midX = prevPx + dx *
t;
971 float midY = (float)(
y - 1) +
t;
972 plotTile(yColor, midX, midY, false);
973 }
974 }
975 prevPx = px;
976 }
977}
static constexpr FASTLED_FORCE_INLINE s16x16 from_raw(i32 raw) FL_NOEXCEPT
float floorf(float value) FL_NOEXCEPT
float fabsf(float value) FL_NOEXCEPT