分形/计算机图形技术/2D/平面
2D平面直接链接
图像几何质量
- 良好(无失真)
- 不良(失真)
- 网格
- 水平集
- 棋盘(棋盘)
视窗是计算机图形学中的多边形查看区域。[3]
2D平面的矩形部分可以通过 来描述
- 角点(4个实数或2个复数 = 2D点)
- 中心和
- 宽度(3个实数)
- 放大倍数
- 半径
"人们以多种方式指定分形坐标。有些人使用可见点左上角和右下角的坐标,将坐标指定为四个数字 x1、y1、x2、y2。要在 XaoS 中设置相同的视点,将中心的实部设置为 (x1+x2)/2,中心的虚部设置为 (y1+y2)/2,半径设置为 x2-x1 和 y2-y1 中较大的一个。"(来自XaoS 文档[4])
Fractint、Ultra Fractal、ChaosPro 和 Fractal Explorer 中的标准描述是角点。例如,曼德博集合的初始平面为
Corners: X Y Top-l -2.5000000000000000 1.5000000000000000 Bot-r 1.5000000000000000 -1.5000000000000000 Ctr -0.5000000000000000 0.0000000000000000 Mag 6.66666667e-01 X-Mag-Factor 1.0000 Rotation 0.000 Skew 0.000
参数平面的显示窗口具有
- 4 的水平宽度(实部)
- 3 的垂直宽度(高度)(虚部)
- 4/3 的纵横比(比例)(同样在像素中为 640/480,因此没有失真)
- 中心 z=-0.5
参见演示 par 文件
Mandel_Demo { ; PAR for initialization of Fractint demo reset=1900 type=mandel corners=-2.5/1.5/-1.5/1.5 params=0/0 inside=0 sound=no }
对于朱利亚集/动态平面,有
Corners: X Y Top-l -2.0000000000000000 1.5000000000000000 Bot-r 2.0000000000000000 -1.5000000000000000 Ctr 0.0000000000000000 0.0000000000000000 Mag 6.66666667e-01 X-Mag-Factor 1.0000 Rotation 0.000 Skew 0.000
Fractint 文档中的描述
CORNERS=[xmin/xmax/ymin/ymax[/x3rd/y3rd]]
示例:corners=-0.739/-0.736/0.288/0.291
以这些坐标作为 x 和 y 坐标的范围开始,而不是默认值(对于 type=mandel) -2.0/2.0/-1.5/1.5。当您指定四个值(通常的情况)时,这定义了一个矩形:x 坐标映射到屏幕,从左到右,从 xmin 到 xmax,y 坐标映射到屏幕,从下到上,从 ymin 到 ymax。六个参数可用于描述任何旋转或拉伸的平行四边形:(xmin,ymax)用于屏幕左上角的坐标,(xmax,ymin)用于右下角的坐标,(x3rd,y3rd)用于左下角的坐标。仅输入“CORNERS=”会告诉 Fractint 使用此形式(默认模式),而不是 CENTER-MAG(见下文)在使用 [B] 命令保存参数时。
int SetPlaneFromCorners(double CxMin , double CxMax, double CyMin , double CyMax){
Radius = fabs(CyMax-CyMin)/2.0;
Magnification = 1.0/Radius;
// http://www.purplemath.com/modules/midpoint.htm
Center = (CxMax+CxMin)/2.0 + I*(CyMax+CyMin)/2.0;
return 0;
}
"If you use the center, you can change the zoom level and the plot zooms in/out smoothly on the same center point. " Duncan C).
Fractint 使用 Mag(与 Xmagfactor 相比)
CENTER-MAG=[Xctr/Yctr/Mag[/Xmagfactor/Rotation/Skew]]
这是一种将角点作为中心点和放大倍数输入的替代方法,在一些分形程序和出版物中很受欢迎。仅输入 "CENTER-MAG=" 会告诉 Fractint 使用此形式,而不是 CORNERS(见上文)在使用 [B] 命令保存参数时。[TAB] 状态显示显示了两种形式的“角点”。当您指定三个值(通常的情况)时,这定义了一个矩形:(Xctr,Yctr)指定图像中心的坐标。
Mag 指示要使用的放大倍数。初始值(无缩放)为 6.66666667e-01。
六个参数可用于描述任何旋转或拉伸的平行四边形:Xmagfactor 指示 x 放大倍数比 y 放大倍数大多少倍,
Rotation 指示图像旋转了多少度。
Skew 指示图像倾斜了多少度。正角度将逆时针旋转和倾斜图像。
参数可以保存到称为 fractint.par 的parmfile 中
Wolf Jung 在Mandel 中使用中心和宽度
/*
from mndlbrot.cpp by Wolf Jung (C) 201
These classes are part of Mandel 5.7, which is free software; you can
redistribute and / or modify them under the terms of the GNU General
Public License as published by the Free Software Foundation; either
version 3, or (at your option) any later version. In short: there is
no warranty of any kind; you must redistribute the source code as well
*/
void mndlbrot::startPlane(int sg, double &xmid, double &rewidth) const
{ if (sg > 0)
{ xmid = -0.5; rewidth = 1.6; } // parameter plane
else { xmid = 0; rewidth = 2.0; } // dynamic plane
用于描述平面(视图)XaoS 使用
- 脚本中的 4 个数字
- 菜单中的 3 个数字
XaoS 使用“半径”来称呼它,但它是这样定义的: (x2-x1 = 宽度) 和 y2-y1 = 高度中较大的那个。
这对于缩放非常有用:固定中心,只改变半径。
Claude Heiland-Allen[5] 使用中心和半径 来表示复二次多项式的参数平面
半径定义为
- 适合图像实际框架内的圆的半径
- "中心和轴对齐的视图矩形顶部之间的虚坐标差”。
- "px_radius 是图像宽度的一半(以实坐标表示)" [6]
view="-0.75 0 1.5" # standard view of parameter plane : center_re, center_im, radius
// modified code using center and radius to scan the plane
int height = 720;
int width = 1280;
double dWidth;
double dRadius = 1.5;
double complex center= -0.75*I;
double complex c;
int i,j;
double width2; // = width/2.0
double height2; // = height/2.0
width2 = width /2.0;
height2 = height/2.0;
complex double coordinate(int i, int j, int width, int height, complex double center, double radius) {
double x = (i - width /2.0) / (height/2.0);
double y = (j - height/2.0) / (height/2.0);
complex double c = center + radius * (x - I * y);
return c;
}
for ( j = 0; j < height; ++j) {
for ( i = 0; i < width; ++i) {
c = coordinate(i, j, width, height, center, dRadius);
// do smth
}
}
另一个版本
int main()
{
int aa = 4;
int w = 800 * aa;
int h = 800 * aa;
#pragma omp parallel for schedule(static, 1)
for (int j = 0; j < h; ++j)
{
double y = (h/2 - (j + 0.5)) / (h/2) * r;
for (int i = 0; i < w; ++i)
{
double x = (i + 0.5 - w/2) / (h/2) * r;
double _Complex c = x + I * y;
// proceed
}
}
return 0;
}
vec2 GiveCoordinate(vec2 center, float radius, vec2 fragCoord, vec3 iResolution)
{
// from pixel to world coordinate
// now point (0,0) is left bottom
// point (iResolution.x, iResolution.y) is right top
float x = (fragCoord.x - iResolution.x/2.0)/ (iResolution.y/2.0);
float y = (fragCoord.y - iResolution.y/2.0)/ (iResolution.y/2.0);
vec2 c = vec2(center.x + radius*x, center.y + radius*y) ;
return c ;
}
根据半径、中心和纵横比设置平面角
int SetPlane(complex double center, double radius, double a_ratio){
ZxMin = creal(center) - radius*a_ratio;
ZxMax = creal(center) + radius*a_ratio; //0.75;
ZyMin = cimag(center) - radius; // inv
ZyMax = cimag(center) + radius; //0.7;
double PixelWidth = (ZxMax-ZxMin)/iWidth;
double PixelHeight = (ZyMax-ZyMin)/iHeight; // pixel_size = PixelWidth = PixelHeight
return 0;
}
在标准的数学约定和一些 CS 图形编程系统之间存在主要的不兼容性
- 数学课中教授的标准数学约定 = 标准坐标系 (y 轴向上)
- 一些 CS 图形编程系统 (但并非所有系统) = y 轴向下
通过标记笛卡尔平面的一象限来检查**平面的方向**
if (x>0 && y>0) Color=MaxColor-Color;
它应该位于右上角。
OpenGL is right handed in object space and world space. But in window space (aka screen space) we are suddenly left handed.[7]
另见
- 图片
- 显示
图片的纵横比是其宽度与其高度的比率,用冒号分隔的两个数字表示,例如 16:9,十六比九。对于 x:y 纵横比,图片的宽度为 x 个单位,高度为 y 个单位。常见的纵横比包括电影中的 1.85:1 和 2.39:1,电视摄影中的 4:3 和 16:9,以及静止摄影中的 3:2。
纵横比,更确切地说,**显示纵横比 (DAR)**[8] - 图片显示时的纵横比。对于电视
- 对于电视,DAR 传统上是 4:3 (即全屏)
- 现在是 16:9 (即宽屏),现在是高清电视的标准。
- “递归算法将图像分割成块,并测试每个块是否位于“黑色区域”中。”,由 Michael Hogg 提出[9]
- 用于缩放动画的庞加莱上半平面度量
- 陈维尹、杨佑升和梁昆茂提出的分形动画的简单优化
- Claude Heiland-Allen 对缩放动画的优化[10]
- reenigne 博客:递归细分
- Xaos - 算法描述
- 新的快速方法!
- Albert Lobo Cusidó 的缩放
- 渲染曼德勃罗集 - 通过 JavaScript 实现示例,作者:Christian Stigen Larsen
- 扰动
- ↑ 维基百科上的欧几里得空间
- ↑ 非欧几里得几何,作者:Malin Christersson (2018)
- ↑ 维基百科上的视窗
- ↑ Xaos - 视图
- ↑ Claude Heiland-Allen 的博客
- ↑ 指数映射,作者:Robert P. Munafo,2010 年 12 月 5 日。来自曼德勃罗集词汇表和百科全书,作者:Robert Munafo,版权所有 © 1987-2020。
- ↑ stackoverflow 问题:is-opengl-coordinate-system-left-handed-or-right-handed
- ↑ 维基百科:纵横比 (图像)
- ↑ michael hogg:fractalnet
- ↑ Claude Heiland-Allen 对缩放动画的优化