【问题标题】:How to scale an object and change position to keep one fixed point如何缩放对象并更改位置以保持一个固定点
【发布时间】:2016-11-13 07:58:16
【问题描述】:

注意:我正在使用 Unity3D 来完成此任务,但我很确定这是一个通用问题。

我有一个对象,我想对其进行缩放,然后对其进行平移,以便在缩放该对象时,我选择的图片上的一个特定点在缩放后将保持在同一位置。

基本上就是这张图:

如果我在位置 (x, y) (位置是图像的中心)将宽度为 w 和高度 h 的对象缩放 s 倍,我需要翻译多少才能保持固定点 (a, b)。

编辑:我忘了提到在 Unity 中,默认情况下对象是从对象的中心缩放的

【问题讨论】:

  • 回复:“注意:我正在使用 Unity3D 来完成此任务,但我很确定这是一个通用问题”:如果不出意外,这将取决于 Unity3D 中“缩放”的含义。由于它显然不允许您指定固定点(否则您不会问这个问题),它如何确定要使用的固定点?不动点会一直是 (0, 0) 吗?
  • 物体的中心是不动点

标签: algorithm unity3d


【解决方案1】:
  1. 通过减去位置来平移它(它现在以原点为中心,缩放将在所有方向上相等)
  2. 将其转换为您希望保持未缩放的偏移量
  3. 缩放它
  4. 撤消您开始时所做的两个翻译

如果您知道绝对坐标中的偏移量,从技术上讲,前两个步骤可以合并,但通常人们会使用局部坐标来测量它。

【讨论】:

  • 我这样做了,它总是直接缩放到中心。只是为了确认这是我正在做的事情:首先我减去将对象移动到中心的位置,而不是添加偏移量,即固定点到对象中心的距离(所以如果对象的中心是(0,0) 和固定点是 (2, 2) 我将对象平移 (2, 2)。然后我缩放对象然后平移它 -offset 然后添加位置。
  • 只是想知道,在考虑我对问题所做的编辑时,您的解决方案是否仍然有效?
  • 没关系,我再次尝试了您的算法,效果很好!当我撤消两个翻译时,我使用了完全相同的翻译,但结果是在翻译回来时我必须将偏移量乘以比例因子。谢谢!
猜你喜欢
  • 2020-10-10
  • 2020-11-15
  • 2012-08-24
  • 2013-06-01
  • 2017-01-25
  • 1970-01-01
  • 1970-01-01
  • 2016-07-10
  • 1970-01-01
相关资源
最近更新 更多