分形/mightymandel
mightymandel 是由 Claude Heiland-Allen 创建的 Mandelbrot 集合探索器。这里可以找到关于它的非官方文档
- 绘制具有 Mandelbrot 集合边界的复二次多项式的参数平面
- 许可证 GPL3+ [1]
- 使用级数逼近的扰动技术。 [2]
- 基于 OpenGL 4 的 GPGPU [3] (“我的 GPU 比我的 CPU 快得多”)
- 使用 C(C99)编写,提供完整的源代码 [4]
- 多精度
Claude Heiland-Allen [4] 使用中心和半径来 描述参数平面。
半径定义为“中心和轴对齐的视图矩形的顶部之间的虚坐标差”。
因此平面由 3 个数字描述
- center_re
- center_im
- radius
其中 center = center_re + center_im * i
可以使用 ldd 检查它
ldd -d -v ./src/mightymandel
或者查看 /src/Makefile
-lGLEW -lGL -lrt -lmpfr -lm
在 Debian Jessie 上,这足以安装编译所需的一切:[9]
sudo aptitude install \
build-essential \
git \
libglew-dev \
libglfw3-dev \
libmpfr-dev \
pkg-config
首次
git clone https://gitorious.org/maximus/mightymandel.git
要更新源代码,请运行(从程序目录)
git pull
然后可以 构建程序。
git remote show origin
结果
* remote origin
Fetch URL: https://gitorious.org/maximus/mightymandel.git
Push URL: https://gitorious.org/maximus/mightymandel.git
HEAD branch: master
Remote branch:
master tracked
Local branch configured for 'git pull':
master merges with remote master
Local ref configured for 'git push':
master pushes to master (fast-forwardable)
git describe
示例输出
v14-164-g9cd6fc7
进入 mightymandel 目录
cd ~/mightymandel
然后 make
make -C src clean
make -C src
或者,如果遇到问题:[10]
make -C src EXTRA_LINK_FLAGS="-lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi"
或者编辑 Makefile 并添加额外的标志,但之后更新源代码就会遇到问题。
还可以构建并运行 测试套件
Package glfw3 was not found in the pkg-config search path.
下载并安装 glfw:[11]
cd glfw-3.0.4
hash -r
cmake -G "Unix Makefiles"
make
sudo make install
Ubuntu 14.10 (utopic) 有 glfw3 的软件包 [12](但 CUDA 软件包仅适用于 Ubuntu 的 LTS 版本,现在是 13.04)
下一个错误
LINK mightymandel /usr/bin/ld: /usr/local/lib/libglfw3.a(x11_clipboard.c.o): undefined reference to symbol 'XConvertSelection' /usr/lib/x86_64-linux-gnu/libX11.so.6: error adding symbols: DSO missing from command line
在 makefile 中添加(在 Ubuntu 13.10 64 位上)
-lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi \
file ./mightymandel ./mightymandel: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x2a424b6dcad8de5e29e3f0b17524dbf34de18aaa, not stripped
转到程序目录并
./src/mightymandel
./src/mightymandel—version
示例结果
v16-10-gd079448+2015-01-20-16-40-55
可以使用以下方法运行(从程序目录)示例参数文件 fp32.mm:
./src/mightymandel ./examples/mm/fp32.mm
现在 mightymandel 无法加载原生 fractint par 文件。它们需要被转换为 ppar 文件。
如何预处理 Fractint par 文件?
- 将 txt 文件(包含多个图像的参数)拆分为单个图像文件(包含原始文件 7 行内容)
- 将包含多个参数的行拆分为每行一个参数的行(将空格替换为换行符)
- 添加 ppar 扩展名:[13]
- 删除所有不包含以下内容的 par 文件:
- "type=mandel"(mightymandel 只能绘制曼德勃罗集合)
- "corners=" 或 "center-mag="
#!/usr/bin/env bash
# chmod +x s.sh
# ./s.sh
for f in *.txt;
do
echo " found "$f " file ";
#split -l 7 $f;
awk '/{/{n++}{print > n".p" }' $f
echo $f "- split when { is found and add p extension " ;
rm $f;
echo " input file " $f " is removed " ;
done
for f in *.p;
do
echo " in "$f " file replace space with newline and add ppar extension"
# tr '{}' '()' < infile > outfile
tr ' ' '\n' < $f >$f"par"
rm $f;
done
for f in *.ppar;
do
echo "remove blank= empty lines"
sed -i '/^$/d' $f
done
评论: "预处理脚本会移除输入文件而不提示,这有点粗鲁!而且它不支持合并以 \ 结尾的行" Claude
以下是 Claude 编写的 split2ppar.sh 脚本
#!/bin/bash
tmp="$(mktemp -d --tmpdir=. split2ppar.XXXXXXXX)"
for file in "${@}"
do
name="$(basename "${file}")"
file="$(readlink -e "${file}")"
pushd "${tmp}"
awk "/{/{n++}{print > \"${name}_\"n\".par\" }" "${file}"
popd
done
pushd "${tmp}"
for file in *.par
do
ident="$(head -n 1 "${file}" | sed 's/ .*$//')"
mv "${file}" "${ident}.par" # rename input
cat < "${ident}.par" | # read input
sed 's/;.*$//' | # delete ; comments
tr '\n' ' ' | # join on one line with spaces
sed 's/\\ *//g' | # merge lines ended with '\'
tr -s ' ' | # compress multiple ' ' to single ' '
sed 's/^.*{\([^}]*\)}.*$/\1/' | # extract the part between { }
tr ' ' '\n' | # split into separate lines
cat > "${ident}.ppar" # write output
done
popd
ls "${tmp}/"*
ppar
[edit | edit source]预处理后的 par 文件位于 /examples/ppar 目录中。请使用以下方法进行测试:
./src/mightymandel ./examples/ppar/1_02.ppar
test
[edit | edit source]可以运行测试套件
make -C src test EXTRA_LINK_FLAGS="-lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi"
示例输出
real 56m25.351s user 33m50.995s sys 21m38.976s
另请参阅
- test 目录中 csv 文件的内容
- test 目录中的图像
基准测试
[edit | edit source]有关更多详细信息,请参见程序目录中的 BENCHMARKS 文件
检查硬件
[edit | edit source]示例输出
cat /proc/cpuinfo | grep model\ name
model name : Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
model name : Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
model name : Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
model name : Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
model name : Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
model name : Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
model name : Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
model name : Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
lspci | grep VGA
01:00.0 VGA compatible controller: NVIDIA Corporation GK104 [GeForce GTX 770] (rev a1)
glxinfo | grep OpenGL\ version
OpenGL version string: 4.3.0 NVIDIA 319.32
运行基准测试
[edit | edit source] time ./src/mightymandel --verbose warn --one-shot --de --weight -1.5 --glitch --size "1280x720" examples/mm/fp32-large-minibrot.mm
fp32-large-minibrot.mm,ok,fp32,322.402263,85.265842,14.734158,,
real 0m0.643s
user 0m0.188s
sys 0m0.236s
图像
[edit | edit source]画廊
- 在维基共享资源中有一个类别: commons:Category:Fractals created with Mightymandel
- 官方在线文档画廊[19]
评论
[edit | edit source]要从 ppm 文件中提取评论:[20]
identify -format "%c" 1.ppm
或者
head -n 2 1.ppm | tail -n 1
示例输出
mightymandel -1.8605739600158748e+00 + -9.3437424499999996e-07 i @ 3.5884749956982262e-09
以及从 png 文件中提取评论
extract k2000.png
颜色
[edit | edit source]- 白色 = 曼德勃罗集合的外部
- 黑色 = 曼德勃罗集合的边界(使用 DEM)
- 红色 = 故障
- 黄色 = RGB(255,178,0) = 已知的曼德勃罗集合内部
- 蓝色 = 未计算
文档
[edit | edit source]- 官方在线文档[21]
如何使用 doxygen 生成离线文档?
[edit | edit source]如何贡献?
[edit | edit source]git checkout master
git pull # get up to date
git checkout -b new-feature-42 # create a branch for your new feature
# make your changes, check that they compile and run ok
git add your-changed-files
git commit # write a description of your changes
git format-patch master # save your changes to file(s)
如果路径文件未创建,请尝试
git format-patch origin/master # https://eothred.wordpress.com/2011/07/02/git-and-patches/
然后将 .patch 文件发送电子邮件给 Claude
参考文献
[edit | edit source]- ↑ License GPL3+
- ↑ Perturbation glitches
- ↑ General-purpose computing on graphics processing units in wikipedia
- ↑ Git repository
- ↑ The OpenGL Extension Wrangler Library
- ↑ OpenGl in C
- ↑ The GNU MPFR Library
- ↑ librt library
- ↑ README for mightymandel
- ↑ Fractal Forum - mightymandel
- ↑ and Ubuntu
- ↑ Package: glfw3 (3.0.4-1) [universe]
- ↑ how-to-add-an-extension-to-all-files-via-terminal
- ↑ CPU in wikipedia)
- ↑ GPU in wiki[edia
- ↑ Video card in wiki
- ↑ Device driver in wikipedia
- ↑ OpenGl in wikipedia
- ↑ online official doc gallery
- ↑ stackexchange question : How to extract comment from ppm file?
- ↑ official online doc