VC分形学 - 可以无穷放大的 Mandelbrot Set (曼德布洛特集)
更新时间:2023-06-03 17:01:01 阅读量: 实用文档 文档下载
- 几何分形学推荐度:
- 相关推荐
// 程序名称:分形学 - 可以无穷放大的 Mandelbrot Set (曼德布洛特集)
// 编译环境:Visual C++ 6.0,EasyX 2011惊蛰版
// 最后更新:2010-9-9
//
#include <graphics.h>
#include <conio.h>
// 定义常量
#define ITERATIONS 1000 // 迭代次数,越高,图像越精细
#define MAXCOLOR 64 // 颜色数
/////////////////////////////////////////////////
// 定义复数及乘、加运算
/////////////////////////////////////////////////
// 定义复数
struct COMPLEX
{
double re;
double im;
};
// 定义复数“乘”运算
COMPLEX operator * (COMPLEX a, COMPLEX b)
{
COMPLEX c;
c.re = a.re * b.re - a.im * b.im;
c.im = a.im * b.re + a.re * b.im;
return c;
}
// 定义复数“加”运算
COMPLEX operator + (COMPLEX a, COMPLEX b)
{
COMPLEX c;
c.re = a.re + b.re;
c.im = a.im + b.im;
return c;
}
/////////////////////////////////////////////////
// 定义颜色及初始化颜色
/////////////////////////////////////////////////
// 定义颜色
int Color[MAXCOLOR];
// 初始化颜色
void InitColor()
{
// 使用 HSL 颜色模式产生角度 h1 到 h2 的渐变色
int h1 = 240, h2 = 30;
for(int i=0; i<MAXCOLOR/2; i++)
{
Color[i] = HSLtoRGB((float)h1, 1.0f, i * 2.0f / MAXCOLOR);
Color[MAXCOLOR-1-i] = HSLtoRGB((float)h2, 1.0f, i * 2.0f / MAXCOLOR); }
}
/////////////////////////////////////////////////
// 绘制 Mandelbrot Set (曼德布洛特集)
/////////////////////////////////////////////////
void Draw(double fromx, double fromy, double tox, double toy)
{
COMPLEX z, c;
int x, y, k; // 定义循环变量
for(x = 0; x < 640; x++)
{
c.re = fromx + (tox - fromx) * (x / 640.0);
for(y = 0; y < 480; y++)
{
c.im = fromy + (toy - fromy) * (y / 480.0);
z.re = z.im = 0;
for(k = 0; k < ITERATIONS; k++)
{
if ( z.re * z.re + z.im * z.im > 4.0 ) break;
z = z * z + c;
}
putpixel(x, y, (k >= ITERATIONS) ? 0 : Color[k % MAXCOLOR]); }
}
}
/////////////////////////////////////////////////
// 主函数
/////////////////////////////////////////////////
void main()
{
// 初始化绘图窗口及颜色
initgraph(640, 480);
InitColor();
// 初始化 Mandelbrot Set(曼德布洛特集)坐标系 double fromx, fromy, tox, toy;
fromx = -2.1; tox = 1.1;
fromy = -1.2; toy = 1.2;
Draw(fromx, fromy, tox, toy);
// 捕获鼠标操作,实现放大鼠标选中区域
MOUSEMSG m;
bool isLDown = false;
int selfx, selfy, seltx, selty; // 定义选区
while(!kbhit())
{
m = GetMouseMsg(); // 获取一条鼠标消息
switch(m.uMsg)
{
// 按鼠标中键恢复原图形坐标系
case WM_MBUTTONUP:
fromx = -2.1; tox = 1.1;
fromy = -1.2; toy = 1.2;
Draw(fromx, fromy, tox, toy);
break;
// 按鼠标左键并拖动,选择区域
case WM_MOUSEMOVE:
if (isLDown)
{
rectangle(selfx, selfy, seltx, selty); seltx = m.x;
selty = m.y;
rectangle(selfx, selfy, seltx, selty); }
break;
// 按鼠标左键并拖动,选择区域 case WM_LBUTTONDOWN: setcolor(WHITE); setwritemode(R2_XORPEN); isLDown = true; selfx = seltx = m.x; selfy = selty = m.y; rectangle(selfx, selfy, seltx, selty); break; // 按鼠标左键并拖动,选择区域 case WM_LBUTTONUP: rectangle(selfx, selfy, seltx, selty); setwritemode(R2_COPYPEN); isLDown = false; seltx = m.x; selty = m.y; if (selfx == seltx || selfy == selty) break; // 修正选区为 4:3 int tmp; if (selfx > seltx) {tmp = selfx; selfx = seltx; seltx = tmp;} if (selfy > selty) {tmp = selfy; selfy = selty; selty = tmp;} if ( (seltx - selfx) * 0.75 < (selty - selfy) ) { selty += (3 - (selty - selfy) % 3); selfx -= (selty - selfy) / 3 * 4 / 2 - (seltx - selfx) / 2; seltx = selfx + (selty - selfy) / 3 * 4; } else { seltx += (4 - (seltx - selfx) % 4); selfy -= (seltx - selfx) * 3 / 4 / 2 - (selty - selfy ) / 2; selty = selfy + (seltx - selfx ) * 3 / 4; } // 更新坐标系 double f, t; f = fromx + (tox - fromx) * selfx / 640; t = fromx + (tox - fromx) * seltx / 640;
} } } tox = t; f = fromy + (toy - fromy) * selfy / 480; t = fromy + (toy - fromy) * selty / 480; fromy = f; toy = t; // 画图形 Draw(fromx, fromy, tox, toy); break; getch(); closegraph();
正在阅读:
VC分形学 - 可以无穷放大的 Mandelbrot Set (曼德布洛特集)06-03
嘉绍埭桥主塔环向预应力施工技术交底08-26
煤气中毒的预防与急救02-01
西方社会学理论讲稿10-11
L4-04《采购与供应关系管理》MINI - CASE - 2 - 考试案例与技校06-15
大学生村官村主任助理工作汇报07-22
我的外婆作文400字07-16
聊大 线代试题11-12
清华大学信号与系统教案第8章05-28
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 特集
- 布洛
- 曼德
- Mandelbrot
- 无穷
- 放大
- 可以
- Set
- 2009版公路工程量清单与概预算项目表(新定额)对应关系
- 04183概率论与数理统计(经管类)201210
- 石木建筑社团章程
- 我国智能手机市场营销策略
- 中小学防诈骗知识讲座
- 养成教育讲座材料
- 2021人教版三年级下册数学第一单元试题0 (4)
- 2009年11月企业人力资源管理师(国家职业资格二级)理论、实操试题及答案
- 公共管理学练习题
- 第九章 期权理论及定价模型在资产价值评估中的应用
- “打铁还需自身硬”有感
- 第十章 不确定型决策方法
- 人力资源绩效管理练习试题及答案
- 教科版八年级政治上册(1-7课)知识要点
- 学校德育工作总结2011—2012第一学期
- 金融企业大数据技术选择策略
- 均压防灭火技术规范
- 2011年全国各地市110份中考英语试题解析版汇编之一单项选择——主谓一致和倒装
- 岳池农家文化简介
- 电子天平核杳操作规程