From 017b5728976a8dc1a8c9b5ce27c62788f5e3a3ad Mon Sep 17 00:00:00 2001 From: Brandon502 <105077712+Brandon502@users.noreply.github.com> Date: Wed, 21 Feb 2024 17:44:08 -0500 Subject: [PATCH] Expand1D PinWheel changes --- wled00/FX_fcn.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/wled00/FX_fcn.cpp b/wled00/FX_fcn.cpp index 814dd3fb..1f7733f6 100644 --- a/wled00/FX_fcn.cpp +++ b/wled00/FX_fcn.cpp @@ -937,16 +937,16 @@ void IRAM_ATTR_YN Segment::setPixelColor(int i, uint32_t col) //WLEDMM: IRAM_ATT break; case M12_sPinWheel: { // i = 0 through 359 - int centerX = vW / 2; - int centerY = vH / 2; + float centerX = (vW-1) / 2; + float centerY = (vH-1) / 2; // int maxDistance = sqrt(centerX * centerX + centerY * centerY) + 1; - int distance = 1; + int distance = 0; float cosVal = cos(i * DEG_TO_RAD); // i = current angle float sinVal = sin(i * DEG_TO_RAD); while (true) { - int x = centerX + distance * cosVal; - int y = centerY + distance * sinVal; + int x = round(centerX + distance * cosVal); + int y = round(centerY + distance * sinVal); // Check bounds if (x < 0 || x >= vW || y < 0 || y >= vH) { break; @@ -1093,6 +1093,14 @@ uint32_t Segment::getPixelColor(int i) else return getPixelColorXY(vW / 2, vH / 2 - i - 1); break; + case M12_sPinWheel: //WLEDMM + // not 100% accurate, returns outer edge of circle + int distance = min(vH, vW) / 2; + float centerX = (vW - 1) / 2; + float centerY = (vH - 1) / 2; + int x = round(centerX + distance * cos(i * DEG_TO_RAD)); + int y = round(centerY + distance * sin(i * DEG_TO_RAD)); + return getPixelColorXY(x, y); } return 0; }