编写一款2D CAD/CAM软件(九)视图缩放

用户通过视图缩放能够查看几何图形的精细结构、局部细节或者查看全局构成。

视图缩放最友好和最方便的操作方式一般是通过鼠标滚轮的转动来实现的。

数学推理

  1. 假设鼠标位置(缩放中心)在视图中坐标为Pcenter(Xcenter, Ycenter), 对应几何坐标为Pgeo(Xgeo, Ygeo);
  2. 当前,几何坐标系原点在视图坐标系下位置坐标为P_orig_geo(Xorig_geo, Yorig_geo), 缩放倍率为Rcur;
  3. 已知鼠标滚动转动导致缩放R倍;
  4. 求:缩放后几何图形坐标系原点在视图坐标系下的坐标P_geo_new(Xgeo_new, Ygeo_new) 和新的缩放倍率Rnew.
  5. 视图缩放的潜在条件:缩放前后,鼠标位置点的视图坐标系坐标不变,鼠标位置点对应的几何坐标系坐标不变。
  6. 之前已封装的视图坐标系和几何坐标系转换关系。
通过以上条件,可推出:
    
    Rnew = Rcur * R;

    Xgeo_new = Xcenter - (Xcenter - Xorig_geo) / R;
    
    Ygeo_new = Ycenter - (Ycenter - Yorig_geo) / R;

缩放后更新:

    Rcur = Rcur*R;

    Xorig_geo = Xcenter - (Xcenter - Xorig_geo) / R;

    Yorig_geo = Ycenter - (Ycenter - Yorig_geo) / R;

接口封装

// j-view.h

    /// operator
    void pointZoom(QPointF zoom_center, double ratio);

    /// event
   
  • 21
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值