(转)闪电效果的实现,中点位移法

这部短片使用了中点位移法来模拟闪电。

中点位移法通常是用于生成分形地形的算法,你会发现闪电的形状类似于一个理想化的山脉的边缘。

下面节选的这段闪电递归程序可以帮你完成所有的工作。


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

function drawLightning(x1,y1,x2,y2,displace)

{

  if (displace < curDetail) {

    graf.moveTo(x1,y1);

    graf.lineTo(x2,y2);

  }

  else {

    var mid_x = (x2+x1)/2;

    var mid_y = (y2+y1)/2;

    mid_x += (Math.random()-.5)*displace;

    mid_y += (Math.random()-.5)*displace;

    drawLightning(x1,y1,mid_x,mid_y,displace/2);

    drawLightning(x2,y2,mid_x,mid_y,displace/2);

  }

}

你可以通过传递一个线段的两个端点坐标(x1,y1,x2,y2)和一个位移量,计算出线段终点坐标(mid_x,mid_y),然后通过一个随机值替换它,该随机值按照每次划分线段时的位移值比例减少。

第一次划分会得到一个较大的位移线段,而之后随着位移值的减小位移线段也会逐渐减小(每次递归位移值都会除以2),如此便可以使一条线段"碎形"。

当位移值低于我们定义的最小值时(可使用"detail"滑动条修改),我们就将这条线绘制出来。也就是说满足条件if(displace<curDetail)时,我们绘制线段。

原文中的四个滑动条:

1.detail 增加后,线条数量会减少,每个线条会更长。
2.thickness 代表线条的粗细
3.number bolts 代表线条的数量

4.displacement 位移量,也就是线条数值方向偏移的最大值

原文:http://krazydad.com/bestiary/bestiary_lightning.html

时间: 2024-07-30 20:30:12

(转)闪电效果的实现,中点位移法的相关文章

点亮流水灯--位移法

点亮流水灯之位移法 1 #include <reg51.h> 2 #include <stdio.h> 3 //延时函数 4 void delay(){ 5 int i=10000; 6 //用while循环来做兜底循环 7 while(i--); 8 } 9 //主函数 10 void main(void) 11 { 12 int i; 13 char p; 14 while(1) 15 { 16 //点亮第一盏灯 17 P2=0xfe; 18 //调用延时函数 19 delay

python 利用位移法将ip转为number以及将number转为ip

简介: 使用位移法将ip转为number型以及将number型转为ip,使用语言为python2.7 #!/usr/bin/env python # coding:utf-8 def ip2num(ip): ip = [int(x) for x in ip.split('.')] return ip[0] << 24 | ip[1] << 16 | ip[2] << 8 | ip[3] print ip2num('10.101.101.13') #174417165 d

cocos2dx 2.x实现闪电效果(贴画版)

cocos2dx 2.x实现闪电效果(非画线版) 在网上搜索到一个直接用opengl画线实现的版本,但放在游戏中效果不太搭,要求用贴图的.我这个版本用的也是画线版的算法. 闪动的时候效果还可以,每段衔接的地方还是不太完美,各位有其他的建议的请联系我  [email protected] 转载请注明出处 http://www.cnblogs.com/mrblue/p/4315091.html 效果图 //头文件 #ifndef __LIGINTNING_H__ #define __LIGINTNI

Android 闪电效果 (Electric Screen,电动屏幕)

本文介绍一个在google play上很火爆,好玩的App,如题 如图: 实现思路: Android中在一个透明的Activity上用SurfaceView绘制闪电,同时加上震动和音效. 在touch事件中调用闪电算法. SurfaceView是一个继承自View的类,可以直接从内存或者DMA等硬件接口取得图像数据,是个非常重要的绘图视图. SurfaceView特性:可以在主线程之外的线程上绘制视图,而且不会影响主线程,常用于游戏开发. SurfaceViews使用步骤: 继承SurfaceV

带预览效果的幻灯片

正在做一个带预览效果的幻灯片. 首先,要分析整个效果.采用VCD分析法(V;view; C: contral; D:data). 先观察整个效果图,将效果图划分为不同的块级.画出结构分析图,设置每个大块的类名. 分析要使用的数据. 进行代码开发:1, 视觉效果开发: HTML + CSS; 2, 动画效果: javascript; HTML页面编写,先架好结构,并用css样式来使页面变成要展示的样子.(以前总是看着图,事无巨细的一层层写下来,并一小块一小块的去做好样式设置,发现这样不仅浪费时间,

仿菁优网首页动画效果

原文链接 1.菁优网首页动画效果图 2.动画效果分析 2.1.动画效果一定是UIView动画,因为核心动画是CALayer的动画效果给我们的位移假象,视图的真实位置并没有发生变化.在首页的动画中,按钮的位置是随着转盘的转动在发生变化的.核心动画无法帮我们完成这项任务.在转盘转动的同时,按钮也要进行着和转盘反方向的旋转,并且旋转角度正好相等.转盘在旋转时按钮中的图片和文字相对于我们的视角一直是正向的. 2.2.在转动转盘的时候既可以单手指旋转,也可以两根手指旋转.所以自定义旋转手势,每次旋转转盘的

抖动法显示灰度图像(Qt 实现)

有时,我们要在只能显示黑白两种颜色的显示设备上显示一副灰度图像.这时就要采用所谓的抖动法(Dithering)来模拟出灰度效果来. 比如下面这幅图: 如果只是做个简单的二值化处理,得到的结果是这样的(以 128 为阈值) 虽然还能看出这个图像的内容,但是效果并不好. 一种直观的想法就是在做二值化时引入随机数,对于所有值为 x 的像素,以 x/256 为概率将这些像素点点亮.下面的代码就可以实现这个功能. QImage RandomDithering(QImage &image) { int wi

Unity3D问题之EnhanceScollView选择角色3D循环滚动效果实现

需求 呈现3D效果(2D素材)选择角色效果 滚动保证层级,缩放比例,间距正常跟随 循环滚动 这个界面需求一般也会有游戏会采用(貌似有挺多) 如何实现 实现技术关键点 如何控制每个Item之间的间隔(位置),缩放比例,差值平滑 如何实现item层级关系正确显示("离" 屏幕近的层级高) 如何实现循环滚动 下面一一讲述当前Demo采用的方法 说到实现的核心,需要知道Unity3D中提供的一个叫做AnimationCurve的组件,这个不仅仅是表面上美术可以使用的组件,也不只是单纯的动画曲线

css实现水平/垂直居中效果

一.如果是已知宽高的元素做水平/垂直居中效果的话,可以直接用具体的数值指定定位布局或偏移布局,这个就不过多讨论.这里主要介绍在不知宽高或需要弹性布局下的几种实现方式. 二.1.table表格法思路:显示设置父元素为:table,子元素为:cell-table,vertical-align: center优点:父元素(parent)可以动态的改变高度(table元素的特性)缺点:IE8以下不支持代码实现: .parent1{ display: table; height:300px; width: