Я работаю над написанием сценария для поддержки веб-приложения для отображения изображений и позволяет пользователю увеличивать/панорамировать, чтобы просмотреть более подробную информацию. Сценарий, написанный с использованием JavaScript, поддерживает уровень масштабирования по умолчанию от 0% до 100%, где 0% представляет размер изображения после его уменьшения в соответствии с окном браузера, а 100% представляет изображение с полным разрешением. Следующая формула используется для получения заданного процента и отображения изображения с использованием правильного уровня масштабирования по умолчанию. Ниже формулы - некоторые вычисления, которые я использовал для обеспечения правильной работы. Обратите внимание, что отношения представляют собой разницу в размерах между изображениями.Преобразование отношения к проценту с помощью JavaScript
X/(((Y - 1) * Z) + 1)
X = Ratio 1
Y = Ratio 2
Z = Percentage as Decimal
3.29/(((3.29 - 1) * 000.00) + 1) = 3.29
3.29/(((3.29 - 1) * 000.01) + 1) = 3.22
3.29/(((3.29 - 1) * 000.10) + 1) = 2.67
3.29/(((3.29 - 1) * 000.90) + 1) = 1.07
3.29/(((3.29 - 1) * 001.00) + 1) = 1.00
3.29/(((3.29 - 1) * 001.50) + 1) = 0.74
3.29/(((3.29 - 1) * 002.00) + 1) = 0.58
3.29/(((3.29 - 1) * 003.00) + 1) = 0.42
3.29/(((3.29 - 1) * 004.00) + 1) = 0.32
3.29/(((3.29 - 1) * 005.00) + 1) = 0.26
3.29/(((3.29 - 1) * 010.00) + 1) = 0.13
3.29/(((3.29 - 1) * 025.00) + 1) = 0.05
3.29/(((3.29 - 1) * 050.00) + 1) = 0.03
3.29/(((3.29 - 1) * 075.00) + 1) = 0.02
3.29/(((3.29 - 1) * 100.00) + 1) = 0.01
Моя проблема заключается в том, что я хочу кратко отобразить уровень масштабирования, если пользователь изменяет его, но нужно преобразовать отношения в процентах. Сложная часть состоит в том, что все меняется на противоположное, где 1 (фиксированный) всегда представляет полноразмерное изображение, потому что это соотношение размеров 1: 1. Большее число представляет собой разницу в размерах между двумя изображениями, выраженную как отношение (изменяется), преобразованное в десятичную.
Case 1:
3.290 = 0% (no zoom)
2.145 = 50%
1.000 = 100% (max zoom)
------------
1.183 = ?
Case 2:
5.470 = 0%
3.235 = 50%
1.000 = 100%
------------
4.680 = ?
Case 3:
7.630 = 0%
4.317 = 50%
1.000 = 100%
------------
3.745 = ?
Наконец, я много раз искал ответы, но безуспешно. Может ли кто-нибудь помочь мне найти решение?
Обновление: Я близко к ответу, за исключением того, что результаты инвертированы. В этой заявке меньше все больше и больше меньше из-за коэффициентов, используемых в расчетах. Кроме того, в моем первом примере это было неясно, но Y и Z являются переменными и X фиксирован. Поскольку Y представляет собой отношение переменных изображений, он всегда совпадает с X во время инициализации, потому что размер изображения еще не был изменен пользователем.
В следующем примере Х = 3,290 и Y изменяется между 1 и 3.290, где 3,290 должны представлять 0% и 1 должна представлять 100%
(Y - 1)/(X - 1) = Z
(3.290 - 1)/(3.290 - 1) * 100 = 100.0%
(3.235 - 1)/(3.290 - 1) * 100 = 097.5%
(2.280 - 1)/(3.290 - 1) * 100 = 055.8%
(2.230 - 1)/(3.290 - 1) * 100 = 053.7%
(2.145 - 1)/(3.290 - 1) * 100 = 050.0%
(1.830 - 1)/(3.290 - 1) * 100 = 036.2%
(1.660 - 1)/(3.290 - 1) * 100 = 028.8%
(1.100 - 1)/(3.290 - 1) * 100 = 004.3%
(1.010 - 1)/(3.290 - 1) * 100 = 000.4%
(1.000 - 1)/(3.290 - 1) * 100 = 000.0%
Ваша главная формула 'X/(((Y - 1) * Z) + 1) = N', если вы знаете, N, X и Y, то' Z = ((X/N) - 1)/(Y - 1) 'это отвечает на ваш вопрос? –
Спасибо, что ответили. Когда я выпиваю вторую чашку кофе, я тестирую вашу предложенную формулу, и она кажется действительной.Однако в обеих формулах существует странная вариация, которую я не могу объяснить. Это очень мало, и я отношу его к логике компьютерного округления. – David
Боюсь, я слишком скоро заговорил. Результаты предложенной формулы выглядели хорошо, пока я не дошел до конца спектра, где он не удался. – David