Python实现 Soul 旋转散点球面效果

前言

打算做几个安卓APP练手,第一个方向是社交类的。在应用商店上搜索“社交”,第一个就是Soul,因为它打了广告。。。下载玩了一下,第一个仿做的社交应用就它好了。

其中有一个效果是这样的:
Soul旋转散点球面效果
这个会转的散点球面效果就是接下来要说的。
先放一下我做的效果吧。

python仿Soul旋转球效果

实现

首先,这是一个3D的效果,当然,我们也不可能选择使用3D引擎来做。实际上,渲染的时候我们只需要在2D平面上渲染就行。

我们从交互效果入手。球是围绕着过球心的一条直线旋转的,这条线就是旋转轴,那么怎么确定这条旋转轴呢?我们在屏幕上划一条线,显然,旋转轴垂直我们划出来的这条直线。旋转除了要旋转轴之外,我们还需要一个旋转角,这个我们可以按照划线长度按照一定比例换算成旋转角度。从交互效果中,我们分析了用户交互会提供的两个参数:旋转轴、旋转角度。

那么要实现这个会旋转的散点球面,显然我们首先要生成一堆散点,这些散点分布在球面上,最好能够均匀分布。至于如何均匀分布这些点,可以看看10560 怎样在球面上「均匀」排列许多点?

那么如何根据这两个交互参数旋转我们的球呢?
1、这个球是散点组成的,第一个思路就是旋转这些点。围绕着某个旋转轴旋转点,我们可以把散点换成向量,把旋转轴也换成向量,这样,问题就变成向量围绕另一个向量旋转的问题,我们有罗德里格旋转公式

2、另外,我们可以这样想,把坐标系旋转,然后求出各个点在原坐标系下的坐标。那么我们怎么描述一个坐标系呢?我们可以通过一组基底向量。比如 i ⃗ , j ⃗ , k ⃗ 分 别 表 示 某 个 坐 标 系 x , y , z 轴 的 三 个 基 底 假 设 某 点 p 在 该 系 下 的 坐 标 为 ( x , y , z ) 那 么 其 在 标 准 坐 标 系 下 的 向 量 表 示 应 该 为 x i ⃗ + y j ⃗ + z k ⃗ 我 们 也 可 以 使 用 矩 阵 乘 法 来 表 示 : 设 A = [ i ⃗ j ⃗ k ⃗ ] , x = [ x y z ] , A x 即 所 求 \vec{i}, \vec{j}, \vec{k} 分别表示某个坐标系x,y,z轴的三个基底 \\ 假设某点p在该系下的坐标为(x, y, z) \\ 那么其在标准坐标系下的向量表示应该为 x\vec{i} &

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值