目前,我正在用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值(在每个刻度上)相同,我尝试了很多公式,但是没有运气,希望你们能提供帮助。
提前谢谢。
答案 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;