du1992/DNebula

我想问问其中的原理

Opened this issue · 7 comments

1、平移手势在屏幕上滑动产生的是一个XOY平面向量,然后这个向量被传入到旋转点的矩阵算法中。我想知道其中涉及到的正余弦的计算与传入的向量是什么关系?用的是什么原理。
2、用矩阵旋转点坐标的算法中,你用的是什么坐标系?
3、DBSphereView.m中39行3 - sqrt(5)代表的是什么意义?

一个3维空间中的点,用球坐标可以表示为(r, Ry, Rxz),其中r是半径大小,Ry是半径和y轴的夹角;Rxz是半径在xz平面上的投影和z轴的夹角;类似的,这个点也可以表示为(r, Rx, Ryz),Rx是半径和x轴的夹角;Ryz是半径在yz平面上的投影和z轴的夹角。这样,绕着x轴旋转就改变Ryz,绕着y轴的旋转就改变Rxz即可。
反余弦曲线:
http://kevindcw.cn-bj.ufileos.com/W123444.jpg
其中正常x的取值只能在-1和1之间,而这样算出来的角度只能在0到π之间。而ryz的取值是在0到2π之间
http://kevindcw.cn-bj.ufileos.com/W123344.png
其中a、b分别是2个直线和x轴的夹角,但是一个大于π,一个小于π。通过反余弦可以正确算出b = arccos(x),但是a就需要通过 (2π - arccos(x))算出,可以通过判断y值是否小于0来决定是否需要这样处理
最后按照一个常数angle角度来做旋转,构造一个沿着球面的螺旋,在空间中构建一个球形,并将子视图均匀的分布在球面上


我也是变做,变google的,如果想更深入的了解,可以搜索一下

你链接给出来的是个空网页,你想用那个链接表达什么?

那是两张公式图片,回复无法加照片,所以放的链接,直接点击是打不开的,需要复制链接到浏览器 !

其实,我想知道的是手指在xoy平面滑动产生的方向向量,与球的转动有啥关系?
这个方向向量是如何被应用到矩阵变换中的。
具体来说就是代码中的正余弦为什么是那样计算的?
单单看那张图,我看不出来其中的道理。

要不你看看这这篇文章吧,具体的我也没研究的太深入
https://blog.csdn.net/weixin_34349320/article/details/89427626

感谢你的分享,这人的说法和我看到的实现方式的原理完全不同。剩下的我自己研究吧。

他每次划动输入的方向向量,并不是方向向量,而是一个旋转轴。在旋转矩阵的时候,是先改变旋转轴到Z轴上面,接下来旋转指定的角度,再接着把旋转轴矫正过来,他的代码写得具备一定的迷惑性。
其主要实现逻辑和球坐标的关系不大。
与君共勉。