Как рассчитать смещение масштабированного изображения? - PullRequest
0 голосов
/ 23 сентября 2018

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

  handleZoomIn() {
    this.zoom += -0.25;
    Animated.spring(this.animatedValue, {
      toValue: this.zoom
    }).start()   }

  handleZoomOut() {
    this.zoom += 0.25;
    Animated.spring(this.animatedValue, {
      toValue: this.zoom,
      friction: 3,
      tension: 40
    }).start()   }
    const imageStyle = {
      transform: [{ scale: this.animatedValue}]
    } 

   render() {
      <Animated.Image source={{ uri: source }} style={[imgSize, { position: 'absolute' }, imageStyle]} />
   }

Существует изображение и масштабированное изображение.enter image description here

Как рассчитать расстояние между верхним левым углом двух изображений?

Не должно ли быть смещение?

(dx, dy) = ((originalWidth- (originalWidth X scale)) / 2, (originalWidth - (originalHeight X scale)) / 2)

1 Ответ

0 голосов
/ 23 сентября 2018

(dx, dy) = ((originalWidth- (originalWidth X scale)) / 2, (originalWidth - (originalHeight X scale)) / 2)

В основном да, ноу вас есть опечатка копирования / вставки с использованием «width» по высоте, то есть: (dx, dy) = ((originalWidth- (originalWidth * scale)) / 2, (originalHeight - (originalHeight * scale)) / 2)

И это может быть несколько упрощено (вероятно, личным смещением) в классическом процедурном коде, что-то вроде:

offsetFactor = (1.0 - scale) / 2;
dx = originalWidth * offsetFactor;
dy = originalHeight * offsetFactor;

Как рассчитать расстояние между верхним левым угломдва изображения?

О, но ваш вопрос был о расстоянии ... тогда это, конечно, d = sqrt((dx*dx) + (dy*dy)); ... но половина времени программистам это нужно, квадратное расстояние (d_sq = (dx*dx) + (dy*dy);)достаточно, например, для сортировки или проверки, находится ли что-то в радиусе (тогда вы сравниваете значение квадратного радиуса) и т. д.… тогда можно избежать вычисления корня, что часто является основной оптимизацией, если задействовано много значений.(Одним из случаев, когда это не летит, является модель светлой штриховки в 3D, которая делала «затенение фонга» довольно дорогой функцией ранних 3D-рендереров, так как вы не можете избежать по крайней мере неточного вычисления корня на пиксель там)

...