Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1501223
  • 博文数量: 218
  • 博客积分: 6394
  • 博客等级: 准将
  • 技术积分: 2563
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-08 15:33
个人简介

持之以恒

文章分类

全部博文(218)

文章存档

2013年(8)

2012年(2)

2011年(21)

2010年(55)

2009年(116)

2008年(16)

分类:

2009-04-09 10:56:36

参考:http://www.cppblog.com/lovedday/archive/2009/01/15/22890.html
本文主要实现了利用向量的叉积和点积来计算向量之间的夹角的问题。
向量的点积公式是:
假设向量u(ux, uy)和v(vx, vy),uv之间的夹角为α,从三角形的边角关系等式出发,可作出如下简单推导:

|u - v||u - v| = |u||u| + |v||v| - 2|u||v|cosα  

===>
 
  (ux - vx2 + (uy - vy)= ux2 + uy2 +vx2+vy2- 2|u||v|cosα

===>
  
   -2uxvx - 2uyvy = -2|u||v|cosα

===>

   cosα = (uxvx + uyvy) / (|u||v|)

向量的叉积公式是:

    ux * vy - vx * uy = (|u||v|) * sina
这样,就可以根据向量uv的坐标值计算出它们之间的夹角。

    POINT BPoint;
    BPoint.x = AOrigin.x;
    BPoint.y = AOrigin.y - 10;//以屏幕的左上角为中心点
    double ALength = sqrt((APoint.x - AOrigin.x)*(APoint.x - AOrigin.x)+(APoint.y - AOrigin.y)*(APoint.y - AOrigin.y));
    double BLength = 10;
    int dJ = (AOrigin.x - APoint.x) * (AOrigin.x - BPoint.x) + (AOrigin.y - APoint.y) * (AOrigin.y - BPoint.y);
    int cJ = (AOrigin.x - APoint.x) * (AOrigin.y - BPoint.y) - (AOrigin.x - BPoint.x) * (AOrigin.y - APoint.y);
    double cosResult = dJ * 1.0/(ALength*BLength);
    sinResult = cJ*1.0/(ALength*BLength);

阅读(2848) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~