计算鼠标移动时旋转的夹角

今日项目中遇到一个需要单点旋转2D元素的问题,利用向量将问题解决了。

首先在鼠标Down下时记录起始点m_orDownPoint,鼠标Move时根据当前鼠标点形成的向量与上次记录m_orDownPoint形成的向量来计算夹角。

 代码如下:

 

void CGraphicElementBaseClass::ChangeRotationByEditBox(const TOUCHINPUT* inData)
{
 //计算元素中心点
 D2D1_POINT_2F center = D2D1::Point2F((m_fXR + m_fWidth/2.0f),(m_fYR + m_fHeight/2.0f));

 //计算m_orDownPoint到中心点的向量U
 FLOAT Ux = m_orDownPoint.x - center.x;
 FLOAT Uy = m_orDownPoint.y - center.y;

 //计算inData到中心点的向量V
 FLOAT Vx = inData->x - center.x;
 FLOAT Vy = inData->y - center.y;

 //计算向量的模
 FLOAT moduleU = sqrtf(Ux*Ux + Uy*Uy);
 FLOAT moduleV = sqrtf(Vx*Vx + Vy*Vy);
 if((moduleU) < 0.00001f  || (moduleV) < 0.00001f)
  return;

 //根据向量叉积求夹角
 FLOAT angle = asinf((Ux*Vy - Vx*Uy) / (moduleU* moduleV));

 FLOAT Angle = angle* 180.0f/PI;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值