我有一个由R1定义的矩形:x1,y1-x2,y2,在应用缩放后,我得到了 矩形R2:X1,Y1-X2,Y2。
+--------------+---+
| | |
| R1 | |
| | |
+--------------+ |
| R2 |
+------------------+
如您所见,R2基于R1的来源进行了扩展。不是我想要的效果。
我想要完成的是根据地点重新计算原点 执行缩放操作时的鼠标指针。
例如:
+-----------------------+
| +-----------------+ |
| | o | |
| | R1 | |
| | | |
| +-----------------+ |
| R2 |
+-----------------------+
这里,鼠标指针设置在点“o”上,然后缩放,产生一个 矩形R2。请注意R2不是以R1为中心,而是有点偏移 右边和底部。
如何在缩放后重新定位原点?。
答案 0 :(得分:2)
这不是编程特定的问题,而是数学问题。
如果鼠标位于屏幕中央,则每侧均匀扩展。如果鼠标一直到一侧,则矩形仅在该方向上扩展。因此,您需要确定比例的大小增加。
所以,我们需要在这里设置一些变量:width_delta,height_delta,mouse_x_relative,mouse_y_relative,rect_width,rect_height。
对于每个delta,当鼠标完全居中时,我们可以计算矩形边的变化,其中delta-delta / 2和delta / 2.这导致delta的一半到达一边,另一边一半到另一半。因此,我们需要找出它与鼠标位置和矩形大小的关系,而不是除以2。
足够简单:rect_width / mouse_x_relative。假设rect是宽度10,鼠标位于中心5,10/5是2,导致delta均匀分布到rect的两侧。所以我们需要将delta除以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
我认为 应该与您预期的行为一致,不像我上一个回答。放大(收缩)时,矩形会在鼠标上方(居中)闭合,当你缩小它时,它会远离鼠标移动(如果你愿意,则取消居中),与它移动的方式相反。