Вопрос

прямо сейчас у меня есть бутылочное горлышко в моей программе, которую я пытаюсь написать.я пытаюсь использовать жест зажима для управления масштабом пользовательского изображения.именно вычисление масштаба приводит к замедлению работы программы и ее прерывистости.ниже приведено уравнение.

currentScale = (currentDistance / initialDistance) * scaleMod;

scaleMod - это то, каким когда-либо был текущий масштаб, когда пользователь убирал пальцы с экрана.таким образом, в следующий раз, когда пользователь выполнит щепотку, старый масштаб, по сути, станет отправной точкой нового действия по масштабированию.

Это было полезно?

Решение

1) Разве вы не можете рассчитать scaleMod / initialDistance один раз, когда currentDistance меняется.Таким образом, вам нужно только умножить это значение на currentDistance, что устраняет разрыв.

2) Убедитесь, что это действительно узкое место.Скорее всего, это не так, если только вы не делаете что-то действительно неправильно.

Другие советы

Для любого типа из трех переменных это вычисление можно легко выполнять миллионы раз в секунду с небольшим влиянием на производительность.Ваша проблема в другом.

Если вы исправите scaleMod и initialDistance в степенях 2, вы могли бы использовать сдвиги для более быстрого умножения и деления.

Видишь здесь для справки.

Вы могли бы сохранить scaleMod / initialDistance .Когда масштабирование активно (пальцы пользователя все еще находятся на экране), при необходимости умножьте это значение на currentDistance.

Как только пользователь завершит сжатие, сохраните новое значение scaleMod / initialDistance для следующего раза, когда произойдет сжатие.

если вы выполняете вычисления с помощью int (или другого целого числа), посмотрите, может ли он сделать это, используя точность float .Деление с плавающей запятой выполняется быстрее, чем целое число (меньше битов для деления, при условии, что ваш процессор) имеет единицу измерения с плавающей запятой).

кроме того, попробуйте разложить деление на множители как умножение на обратную величину.

Сначала проверьте это начальное расстояние != 0!:)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top