Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

我想问问其中的原理 #1

Open
StromanStroman opened this issue Jun 4, 2021 · 7 comments
Open

我想问问其中的原理 #1

StromanStroman opened this issue Jun 4, 2021 · 7 comments

Comments

@StromanStroman
Copy link

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

@du1992
Copy link
Owner

du1992 commented Jun 6, 2021

一个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的,如果想更深入的了解,可以搜索一下

@StromanStroman
Copy link
Author

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

@du1992
Copy link
Owner

du1992 commented Jun 6, 2021

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

@StromanStroman
Copy link
Author

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

@du1992
Copy link
Owner

du1992 commented Jun 6, 2021

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

@StromanStroman
Copy link
Author

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

@StromanStroman
Copy link
Author

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants