Processing 案例 | 扑面而来的满天繁星

使用Processing创建一个模拟满天繁星效果的程序,通过PVector和ArrayList实现星星的动态移动。当鼠标点击时,星星的速度会发生变化,同时通过视角改变,营造出立体的视觉效果。
摘要由CSDN通过智能技术生成


  

引言

清明时节雨纷纷,路上行人欲断魂”,每到清明,你总能从那如丝如雨缕的春雨绵绵中感到心上缭绕的那点忧愁。

很少有这样一个节日,像清明这样的矛盾。当你放歌踏青时,它是一个轻盈的日子,是节气;当你慎终追远的时候,它是一个悲怆的日子,是节日。
在这里插入图片描述
在每一个清明冰凉的夜,你是否也曾仰望满天的繁星,追忆那已故的人?他们就像那满天的繁星,在你生命的漫漫长夜中匆匆划过,照亮了一段时光。

现在就让我们一起用 Processing 来模拟那片星域,让记忆中的人和事翻上心头,细细评味。

效果展现

在这里插入图片描述
  

原理分析

首先通过观看视频,我们可以发现在鼠标所在的点附近的星星是最小的,离该点越远,星星的面积越大,移动的速度越快。就好像星星都从这个点里出来一样,我们暂且把这个点叫做消失点。并且观察可得,消失点把屏幕分成了四个区域A,B,C,D(如图一所示),同时把星星也分成了四类。其中A中的星星向左上方移动,B中点向右上方移动,C中的点向左下方移动,D中的点向右下方移动。
在这里插入图片描述
接下来我们来看一下代码实现的大概思路。

我们在脑海里假想一个长方体,以这个长方体的一个顶点为原点,建立世界坐标系。然后选取一个面作为Processing 程序的窗口,建立屏幕坐标系。然后在屏幕上任选一个点,作为消失点,该点在屏幕坐标系下的坐标为(x_endpoint,y_endpoint )。

接着在这个长方体里随机生成一系列的星星,每个星星由一个三维向量(x_world,y_world,z_world)表示,这是它在世界坐标系下的坐标。
在这里插入图片描述
接下来我们要做的就是把每一个星星的在世界坐标系的坐标,转换成在processing窗口里面的坐标(x_screen,y_screen),这样我们就可以在屏幕上把星星绘制出来。

首先需要计算星星在世界坐标系下相对于消失点(endpoint)x,y方向的偏移量,接下来将这个偏移量根据星星的z_world进行放缩,最后再将放缩完成的偏移量加回消失点的坐标,得到星星在屏幕上的坐标。
公式如下:

x s c r e e n = ( x w o r l d − x e n d p o i n t ) / z w o r l d ∗ s c a l e + x e n d p o i n t x_{screen}=(x_{world}-x_{endpoint})/z_{world} *scale+x_{endpoint} xscreen=(xworldxendpoint)/zworldscale+

  • 18
    点赞
  • 116
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值