| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1792 人关注过本帖, 1 人收藏
标题:【分享】破纪录:MandelbrotSet动态放大视频4 (放大1e258或2^857倍)
取消只看楼主 加入收藏
御坂美琴
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:魔術の禁書目錄
等 级:小飞侠
威 望:9
帖 子:952
专家分:2929
注 册:2010-8-18
结帖率:96.15%
收藏(1)
已结贴  问题点数:41 回复次数:1 
【分享】破纪录:MandelbrotSet动态放大视频4 (放大1e258或2^857倍)
前一个视频帖子链接:
https://bbs.bccn.net/thread-333856-1-1.html

视频链接:
http://v.

视频详细信息:
每秒放大8倍
视频放大过程时长286秒
最终放大1e258(2^857)倍
每秒24帧
源分辨率 1280 x 960
视频分辨率 640 x 480

Location:
real = -1.99999999999999999999
99999999999999999999
97344589793777924962
80529992759962819860
24156488045552272302
44073189491973478031
80238274274955380877
61986201309842882318
94031274218325703111
19090443120260112392
01666798411312326507
42495239850691572735
14813561653456639156
09333800669416787338

imag = 0.00000000000000000000
00000000000000000000
00000000000000000000
00000000000000000000
00060028373590270395
79269278208405247083
84221258002907159852
26066697019608772572
97502951824508652864
37164544710375610323
26007488828885952543
82532007738441170003
19905634094938268443
23967097074946753264


除此以外,同样也附带一个计算演示程序:http://u.
作为演示程序,这个是加上了逃逸速度插值的,所谓的逃逸速度插值是:

逃逸速度公式:v(z) = n + 1 - log2(log2(abs(z)))   (log2是对于计算公式使用平方的M集)
其中n是实际迭代次数

这样得到的v(z)就是一个小数,就可以用在颜色的平滑插值上了。
但为了减少公式的计算误差,我们把逃逸边界的模,从2改为8,让它多迭代两次,就会平滑很多了。

最后,需要把这样一个浮点数映射到一个颜色,有两种映射的办法,一种是实时计算映射,另一种是调色板映射
实时计算的话,会因为计算不能太复杂,于是颜色会偏单调,如以下例子:

int iterToColor(double iter)
{
    return (int)(fabs(fmod(iter + 256, 512) - 256));
}

COLORREF colorMap(COMPLEX z, int iteration)
{
    double r = z.re * z.re + z.im * z.im;
    r = iteration + 1 - log2(log2(r)/2);
    return RGB(iterToColor(r * 28), iterToColor(r * 16), iterToColor(r * 32 + 128));
}

实时映射效果图(用的以上代码做映射计算):
图片附件: 游客没有浏览图片的权限,请 登录注册


对于使用调色板的,可以使用的颜色就会丰富很多很多,但在做插值的时候就不能像前一个这样直接进行计算了,我们要使用alphablend的办法做

首先要把那个v(z)拆分为整数部分和小数部分 n + m,n是整数部分
然后我们在调色板上取 n % MAXCOLOR 与 (n + 1) % MAXCOLOR 这两种颜色,记为c1,c2,
然后我们对这两个点做alphablend:
c = alphablend(c1, c2, m); // c1 是src, c2 是dest, m是srcalpha

alphablend计算公式:
Dst.Red = Src.Alpha * Src.Red + (1 - Src.Alpha) * Dst.Red
Dst.Green = Src.Alpha * Src.Green + (1 - Src.Alpha) * Dst.Green
Dst.Blue = Src.Alpha * Src.Blue + (1 - Src.Alpha) * Dst.Blue

最后把得到的c值画在屏幕上就可以了

[ 本帖最后由 御坂美琴 于 2011-3-26 22:06 编辑 ]
收到的鲜花
  • 观弈寒儒2011-03-26 23:14 送鲜花  6朵   附言:好文章
  • 观弈寒儒2011-03-26 23:14 送鲜花  6朵   附言:原创内容
  • 卧龙孔明2011-03-27 12:37 送鲜花  10朵  
搜索更多相关主题的帖子: 详细信息 分辨率 
2011-03-26 21:53
御坂美琴
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:魔術の禁書目錄
等 级:小飞侠
威 望:9
帖 子:952
专家分:2929
注 册:2010-8-18
收藏
得分:0 
to 7L: 自己看书看资料学的
to 8L: 这个问题没什么意义啦,C只是一个语言工具,真正运用的,是工具之上的东西,如算法,图形学
to 9L: 楼上发这个软件链接来是想说啥呢?

永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
http://bbs.bccn.net/space.php?action=threads&uid=483997
2011-03-28 13:29
快速回复:【分享】破纪录:MandelbrotSet动态放大视频4 (放大1e258或2^857倍)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026603 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved