PHP:如何在缩放后获取数字的原始值(用于缩放逻辑)

时间:2018-10-03 17:40:17

标签: php zoom

目前,我正在用php进行一些“放大/缩小”逻辑, 现在我在缩放值并将其恢复为php中的原始值时遇到了一些问题(如果适用于js,那将很棒)。

这是代码

$scale          = 1;
$currentScale   = 1;
$position       = 50;
$step           = 5; // or 10

for($index = 1; $index <= $step; $index++){
    echo('-----------------------------------------------------<br>');

    $currentScale       = $scale / $index;
    $position           = $position * $currentScale;
    $originalPosition   = (($scale / $currentScale) * $position) * (($scale / $currentScale) / $scale);

    echo('current scale : ' . $currentScale . '<br>');
    echo('current position : ' . $position . '<br>');
    echo('original position : ' . $originalPosition . '<br>');
}

目标是使$ originalPosition值与第一个$ position值(在每个刻度上)相同,我尝试了很多公式,但是没有运气,希望你们能提供帮助。

提前谢谢。

规则$ originalPosition未在循环之前存储

1 个答案:

答案 0 :(得分:0)

好吧,我想我已经找到了解决方案,如果有人遇到相同的问题,我将把这段代码留在这里

    $scale          = 1;
    $currentScale   = 1;
    $position       = 80; // change it to any value
    $step           = 5;

    echo('original position : ' . $position . '<br>');

    for($i = $step; $i >= 1; $i--){
        echo('-----------------------------------------------------<br>');

        $currentScale       = ($scale / $step) * $i;
        $position           = $position * $currentScale;
        $originalPosition   = $position;

        $maxLoop = $step - $i;

        if($maxLoop){
            for($j = $maxLoop; $j >= 0 ; $j--){
                $tempScale          = $scale - (($scale / $step) * $j);
                $originalPosition   = $originalPosition / $tempScale;
            }
        }

        echo('max rescale loop : ' . $maxLoop . '<br>');
        echo('current scale : ' . $currentScale . ' ( ' . $currentScale * 100 . '% )<br>');
        echo('current position : ' . $position . '<br>');
        echo('original position : ' . $originalPosition . '<br>');
    }
    exit;

这是结果,原始位置保持与初始值相同 enter image description here