Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

HZHCoder1990/DBSphereTagCloudAnalyze

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

7 Commits

Repository files navigation

DBSphereTagCloud是一款3D标签组件,效果如下:

效果图

源码阅读笔记

读懂DBSphereTagCloud源码,其实只要解决以下三个问题即可:

1.如何把标签均匀的分布在"球体"的表面?

2."球体"怎么实现自动旋转?

3."球体"怎么实现拖拽旋转?

  • 如何把标签均匀的分布在"球体"的表面?

    最开始看作者的关于计算标签坐标的源码时也是一头雾水,不知如何下手。还好我在我在StackOverflow上找到了答案,Evenly distributing n points on a sphere。其中有个答案给出了计算公式:

     function sphere ( N:float,k:int):Vector3 {
     var inc = Mathf.PI * (3 - Mathf.Sqrt(5));
     var off = 2 / N;
     var y = k * off - 1 + (off / 2);
     var r = Mathf.Sqrt(1 - y*y);
     var phi = k * inc;
     return Vector3((Mathf.Cos(phi)*r), y, Mathf.Sin(phi)*r); 
     };
  • "球体"怎么实现自动旋转?

    使用定时器和旋转矩阵即可。旋转矩阵的推导过程网上有很多资料,我主要参考的是这篇文章。在测试工程中,为了简便,我让球体围绕Z轴做逆时针旋转。

    围绕Z轴逆时针旋转矩阵:

    $ \begin{bmatrix} x_1 \ y_1 \ z_1 \ 1 \end{bmatrix} = \begin{bmatrix} cosθ & -sinθ & 0 & 0 \ sinθ & cosθ & 0 & 0 \ 0 & 0 & 1 & 0 \ 0 & 0 & 0 & 1 \ \end{bmatrix} * \begin{bmatrix} x \ y \ z \ 1 \ \end{bmatrix}$

    围绕Z轴顺时针旋转矩阵:

    $ \begin{bmatrix} x_1 \ y_1 \ z_1 \ 1 \end{bmatrix} = \begin{bmatrix} cosθ & sinθ & 0 & 0 \ -sinθ & cosθ & 0 & 0 \ 0 & 0 & 1 & 0 \ 0 & 0 & 0 & 1\ \end{bmatrix} * \begin{bmatrix} x \ y \ z \ 1 \ \end{bmatrix}$

    怎么判断围绕哪一个轴旋转的的标准方向呢? 我个人经验是:围绕哪一个轴旋转,就从哪一个轴的正方向朝相反方向看过去,并且头顶要和其他轴的正方向一致,标准方向就是从右往左旋转

  • "球体"怎么实现拖拽旋转?

    给"球体"添加拖动手势即可。但是难点在于在添加了拖动手势后,围绕任意点旋转的旋转矩阵该怎么写?不过网上已经有相关的资料,并给出了具体的步骤:

    1.将旋转轴绕x轴旋转

    2.将旋转轴绕y轴旋转

    3.绕z轴旋转

    4.执行步骤2的逆过程

    5.执行步骤1的逆过程

具体过程请看源码分析工程。

About

DBSphereTagCloud源码分析,

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

Contributors

AltStyle によって変換されたページ (->オリジナル) /