缩放后重新定位矩形
Reposition rectangle after zooming
我有一个矩形定义为R1:x1,y1-x2,y2,在应用缩放后,我得到矩形R2: X1, Y1-X2, Y2。
+--------------+---+
| | |
| R1 | |
| | |
+--------------+ |
| R2 |
+------------------+
可以看到,R2是基于R1的原点展开的。这不是我想要的效果。
我想完成的是重新计算原点的基础上,在哪里是执行缩放操作时的鼠标指针。
例如: +-----------------------+
| +-----------------+ |
| | o | |
| | R1 | |
| | | |
| +-----------------+ |
| R2 |
+-----------------------+
在这里,鼠标指针被设置在点"o"上,然后缩放,结果是a矩形R2。请注意R2不是以R1为中心,而是有一点移位
缩放后如何重新定位原点
这不是一个特定于编程的问题,而是一个数学问题。
如果鼠标位于屏幕中央,则每边均匀展开。如果鼠标一直移动到一侧,则矩形只向该方向扩展。所以你需要从一个比率来确定大小的增加。
因此,我们需要在这里设置一些变量:width_delta, height_delta, mouse_x_relative, mouse_y_relative, rect_width, rect_height。
- Width delta是新宽度减去旧宽度。
- 高度增量是新高度减去旧高度。
- 鼠标x相对是相对于矩形左侧的x坐标
- 鼠标y相对坐标是相对于矩形顶部的y坐标
对于每个δ,当鼠标完全居中时,我们可以用δ - δ/2和δ/2计算矩形边的变化。结果是一半的流向一边,另一半流向另一边。因此,我们不需要除以2,而是需要找出它与鼠标位置和矩形大小之间的关系。
很简单:rect_width/mouse_x_relative。假设矩形宽度为10,鼠标位于5的中心位置,10/5 = 2,导致增量平均分布在矩形的两侧,因此我们需要将增量除以rect_width/mouse_x_relative。
left_delta = width_delta / rect_width / mouse_x_relative
right_delta = width_delta - left_delta
但是我们可以把它修改成:
left_delta = width_delta * mouse_x_relative / rect_width
right_delta = width_delta - left_delta
我相信应该符合你的预期行为,不像我上一个答案。当你放大(缩小)时,矩形会靠近鼠标(定心),当你缩小时,它会远离鼠标(如果你愿意,可以不定心),这与它移动的方式相反。
相关文章:
- 重新定位图像时如何前进到下一个内存块
- 流填充字符的默认定位
- 通过Python Distutils(用于Python C扩展)使用可重定位的设备代码编译CUDA代码
- 为什么gmp会在这里与"invalid next size"重新定位一起崩溃?
- NS3 - python.h 文件无法定位编译错误
- 设置我的应用程序 API 感知并防止系统使其模糊和错误定位
- GLEW 未在 MSYS2 上定位 OpenGL 函数
- c++ 链接器错误"针对'.rodata.str1.1'的重新定位R_X86_64_32"链接 CXX 共享库 libsrt.so
- 如何忽略32位整数中的特定位
- 如何在C++中使用光标定位
- 使用 stdio.h 重新定位和重命名文件C++
- R 包安装错误:重新定位 0 具有无效的符号索引 11
- 对于可重定位的多平台安装,理想的 cmake 安装目录结构是什么?
- 不能使用使用 lib*.a 的 CDT ---对符号 .. 的重新定位R_X86_64_32S
- 如何在VS2015中重新定位VS2017解决方案?
- 使用 for_each 和 lambda 销毁已定位的对象
- 在"for loop"中使用GOTOXY定位
- 是否可以为虚幻引擎/Unity制作64位定位系统?
- 干净地破坏动态定位对象的向量
- 使用ENVDTE时的Java脚本-将新项目添加到现有解决方案中,并将其定位在特定的子文件夹中