From f1472db65387b384cb8f9be04a6fcfaf558f90e5 Mon Sep 17 00:00:00 2001 From: Michail Vourlakos Date: Mon, 21 Feb 2022 16:28:45 +0200 Subject: [PATCH] parabolic:simplify linear code --define the mathematical approach more appropriately in order to be extended and understood much easier --- .../abilities/definition/ParabolicEffect.qml | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/declarativeimports/abilities/definition/ParabolicEffect.qml b/declarativeimports/abilities/definition/ParabolicEffect.qml index 584ea8d42..024e9623a 100644 --- a/declarativeimports/abilities/definition/ParabolicEffect.qml +++ b/declarativeimports/abilities/definition/ParabolicEffect.qml @@ -40,14 +40,14 @@ Item { //! left scales var leftScales = []; for (var i=_spreadSteps; i>=1; --i) { - leftScales.push(linearEffect(1-percentage, i, _spreadSteps)); + leftScales.push(scaleForItem(1-percentage, i, _spreadSteps)); } leftScales.push(1); //! clearing //! right scales var rightScales = []; for (var j=_spreadSteps; j>=1; --j) { - rightScales.push(linearEffect(percentage, j, _spreadSteps)); + rightScales.push(scaleForItem(percentage, j, _spreadSteps)); } rightScales.push(1); //! clearing @@ -65,12 +65,18 @@ Item { return {leftScale:leftScales[0], rightScale:rightScales[0]}; } - function linearEffect(mousePosPercentage, partIndex, partsCount) { - var part = 1/partsCount; - var min = (partIndex-1) * part; - var max = partIndex * part; - var x = min + (max-min) * mousePosPercentage; - var yl = (factor.zoom - 1) * x; - return 1+yl; + function scaleForItem(mousePosPercentage, itemIndex, itemsCount) { + //! split x axis to different slices and find for the current slice its minimum and maximum x values + var xSliceLength = 1/itemsCount; + var minX = (itemIndex-1) * xSliceLength; + var maxX = itemIndex * xSliceLength; + //! use minimum and maximum values in order to adjust mousePorPercentage and provide the current x for that slice + var curX = minX + (maxX-minX) * mousePosPercentage; + return 1+scaleLinear(curX); + } + + function scaleLinear(x) { + //! just a simple linear function y=a*x where [a = maxZoom - 1] + return (factor.zoom - 1) * x; } }