koch雪花图形
- 格式:docx
- 大小:15.92 KB
- 文档页数:2
Koch 分形雪花图的面积计算一、问题叙述分形几何图形最基本的特征是自相似性,这种自相似性是指局部与整体在形态、功能、信息、时间、空间等方面具有统计意义上的相似。
在具有自相似性的图形中,图形局部只是整体的缩影,而整体图形则是局部的放大。
而本文我们要分析的是Koch 分形雪花图,包含以下三个问题:1.描述Koch 分形雪花2.证明Koch 分形雪花图K n 的边数为n 1L 34n -=⨯3.求Koch 分形雪花图的面积(数据),求n n lim A rea (K )→∞二、问题分析在分析Koch 分形雪花图之前,我们首先介绍Koch 分形曲线。
Koch 分形曲线的绘制原理是:从一条直线段开始,将线段中间的三分之一部分用一个等边三角形的两边代替,形成四条线段的折线,如图2.1所示:图2.1 对一条线段进行第一次Koch 分形然后,对形成的四条直线段的每一条的中间的三分之一部分用等边三角形的两边代替,形成十六条线段的折线。
这种迭代继续进行下去可以形成Koch 分形曲线。
在迭代过程中,图形中的点数将越来越多,而曲线的最终显示细节的多少将取决于迭代次数和显示系统的分辨率。
设P1和P2分别是原始的两个端点,现在需要在直线段的中间依次插入点Q1,Q2,Q3以产生第一次迭代图形。
显然,Q1位于P1右端直线段的三分之一处,Q3位于P1点右端直线段的三分之二处,而Q2点的位置可以看作由Q3绕Q1逆时针旋转60度而得到的,故可以处理Q Q 13经过正交变换而得到Q Q 12 。
算法如下: (1)Q1P 1+P P Q P 1+P P /3;←←(2-1)/3;32(2-1)(2)TQ 2Q 1+Q 3-Q A ←⨯(1); (3)P 5P 2P 2Q1P 3Q P Q 3←←←←;;2;4。
在算法中,用正交矩阵A 构造正交变换,其功能作用是对向量作旋转,使之成为长度不变的另一向量。
在绘制Koch 曲线的过程中,取旋转的角度为3π,则正交矩阵A 应取为:c o s ()s in ()33A =s in ()c o s ()33ππππ⎛⎫- ⎪⎪⎪⎪⎝⎭1.Koch 分形雪花的描述Koch 分形雪花的原始图形是等边三角形,它是由三条相等的线段围成的三角形。
Koch 分形雪花图的面积计算一、问题叙述分形几何图形最基本的特征是自相似性,这种自相似性是指局部与整体在形态、功能、信息、时间、空间等方面具有统计意义上的相似。
在具有自相似性的图形中,图形局部只是整体的缩影,而整体图形则是局部的放大。
而本文我们要分析的是Koch 分形雪花图,包含以下三个问题:1.描述Koch 分形雪花2.证明Koch 分形雪花图K n 的边数为n 1L 34n -=⨯3.求Koch 分形雪花图的面积(数据),求n n lim Area(K )→∞二、问题分析在分析Koch 分形雪花图之前,我们首先介绍Koch 分形曲线。
Koch 分形曲线的绘制原理是:从一条直线段开始,将线段中间的三分之一部分用一个等边三角形的两边代替,形成四条线段的折线,如图2.1所示:图2.1 对一条线段进行第一次Koch 分形然后,对形成的四条直线段的每一条的中间的三分之一部分用等边三角形的两边代替,形成十六条线段的折线。
这种迭代继续进行下去可以形成Koch 分形曲线。
在迭代过程中,图形中的点数将越来越多,而曲线的最终显示细节的多少将取决于迭代次数和显示系统的分辨率。
设P1和P2分别是原始的两个端点,现在需要在直线段的中间依次插入点Q1,Q2,Q3以产生第一次迭代图形。
显然,Q1位于P1右端直线段的三分之一处,Q3位于P1点右端直线段的三分之二处,而Q2点的位置可以看作由Q3绕Q1逆时针旋转60度而得到的,故可以处理Q Q 13经过正交变换而得到Q Q 12 。
算法如下: (1)Q1P1+P P Q P1+P P /3;←←(2-1)/3;32(2-1)(2)T Q2Q1+Q3-Q A ←⨯(1); (3)P5P2P2Q 1P3Q P Q3←←←←;;2;4。
在算法中,用正交矩阵A 构造正交变换,其功能作用是对向量作旋转,使之成为长度不变的另一向量。
在绘制Koch 曲线的过程中,取旋转的角度为3π,则正交矩阵A 应取为: cos()sin()33A=sin()cos()33ππππ⎛⎫- ⎪⎪ ⎪ ⎪⎝⎭ 1.Koch 分形雪花的描述Koch 分形雪花的原始图形是等边三角形,它是由三条相等的线段围成的三角形。
Koch雪花的分形算法实现1.内容介绍分形指具有多重自相似的对象,它可以是自然存在的,也可以是人造的,树木、山川、云朵、脑电图、材料断口等都是典型的分形。
分形是图形学中一门重要的理论,是最近20多年发展起来的新学科,其中Koch雪花则是分形曲线的典型代表。
本文通过对Koch雪花算法实现的详细论述与具体代码,进而分析分形的基本思想、实现方法以及实际应用等。
2.设计思想Koch雪花的实际结构为三条Koch曲线的拼接,这三条Koch曲线分别构成正三角形的三条边即可。
因此,在此详细论述Koch曲线的设计思想。
首先绘制一条线段,假设线段长度为L,则在线段L/3处至2L/3处以L/3为边长做一个正三角形,并去掉底边。
此时该图形变为四条线段,同理对每条线段继续上述步骤即可绘制出Koch曲线。
设计中的难点在于每条线段的端点坐标较难确定,根据已知的初始线段两个端点坐标,我们通过几何三角计算出每次迭代的端点坐标并进行递归即可。
如图1所示,每点的迭代算式为(x1,y1) (x3,y3)(x5,y5)(x4,y4)(x2,y2) α60°第 1 页共9 页图1 端点坐标推导计算32113211533321215333212111()()331c o s (60)31(c o s 60c o s s in 60s in )31[())]61c o s (60)31(s in 60c o s c o s 60s in )31)()]6x x x x y y y y x x L x L x x x y y y y L y L y x x y y αααααα=-+=-+=+︒+=+︒-︒=+---=+︒+=+︒+︒=+-+-在推导出每点的坐标计算后,即可通过编程实现Koch 雪花。
在程序中,首先通过初始化定义正三角形底边的两个端点坐标,然后通过计算得出顶点坐标。
对每一条边进行Koch 曲线递归绘制,最终就可以得到Koch 雪花。
科赫曲线
简介
科赫曲线(Koch curve )是一种像雪花的几何曲线,所以又称为雪花曲线。
1904年瑞典数学家科赫第一次描述了这种不论由直段还是由曲段组成的始终保持连通的线,因此将这种曲线成为科赫曲线。
定义
设想一个边长为1的等边三角形,取每边中间的三分之一,接上去一个形状完全相似的但边长为其三分之一的三角形,结果是一个六角形。
现在取六角形的每个边做同样的变换,即在中间三分之一接上更小的三角形,以此重复,直至无穷。
外界的变得原来越细微曲折,形状接近理想化的雪花。
画法
1、任意画一个正三角形,并把每一边三等分;
2、取三等分后的一边中间一段为边向外作正三角形,并把这“中间一段”擦掉;
3、重复上述两步,画出更小的三角形。
4、一直重复,直到无穷,所画出的曲线叫做科赫曲线。
特性
1、它是一条连续的回线,永远不会自我相交。
2、曲线任何处不可导,即任何地点都是不平滑的。
3、曲线是无限长的,即在有限空间里的无限长度。
4、曲线上任意两点距离无穷大。
5、每次变化面积都会增加,但是总面积是有限的,不会超过初始三角形的外接圆。
思考
科赫曲线中产生一个匪夷所思的悖论:"无穷大"的边界,包围着有限的面积。
这让保守派数学大师们都很难相信。
科赫曲线是比较典型的分形图形,它具有严格的自相似特性。
提问:在有限面积里面,无穷的去选择无穷小的点来组成的"封闭"曲线.会包围着无穷大的面积吗?。
绘制科赫雪花科赫雪花是⼀种分形图案,它的绘制规则是:从⼀个等边三⾓形开始,将每个边中间三分之⼀段去掉,然后在此部分向外绘制⼀个⼩等边三⾓形,以此类推。
下⾯的代码是在 Win32 API 中绘制科赫雪花的⽅法// 返回 p1 p2 两点之间的点 p , pp1 : pp2 = rPOINT ratio(double r, POINT p1, POINT p2){POINT p;p.x = p1.x + (p2.x - p1.x) * r;p.y = p1.y + (p2.y - p1.y) * r;return p;}// 递归绘制线段void drawLine(HDC hdc, POINT p1, POINT p2, int count){// 当为 0 ,就直接连接if (count == 0){POINT p[2] = {p1, p2};Polyline(hdc, p, 2);return;}// 如果不是最后⼀次迭代,就空出中间 1/3 段POINT interp[2] = {ratio(1.0 / 3, p1, p2), ratio(2.0 / 3, p1, p2)};// 绘制这两段drawLine(hdc, p1, interp[0], count - 1);drawLine(hdc, interp[1], p2, count - 1);// 计算中点POINT c = {(p1.x + p2.x) / 2, (p1.y + p2.y) / 2};// 计算斜率,注意由于纵坐标向下,斜率与标准坐标下相反double k = 1.0 * (p2.y - p1.y) / (p1.x - p2.x);double d = sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y));double distance = sqrt(3) * d / 6;double dx = distance * k / sqrt(1 + k * k);double dy = distance / sqrt(1 + k * k);// 计算新增点的位置int sign = (p1.x > c.x ? -1 : 1);c.x += sign * dx;c.y += sign * dy;// 绘制凸出部分drawLine(hdc, interp[0], c, count - 1);drawLine(hdc, c, interp[1], count - 1);}// 绘制三个边void drawTriangle(HDC hdc, POINT points[], int count){drawLine(hdc, points[0], points[1], count);drawLine(hdc, points[1], points[2], count);drawLine(hdc, points[2], points[0], count);}// 绘图函数void draw(HDC hdc, POINT c, int d, int count){POINT points[3] = {{c.x, c.y - d}, {c.x - d / 2 * sqrt(3), c.y + d / 2}, {c.x + d / 2 * sqrt(3), c.y + d / 2}};drawTriangle(hdc, points, count);}接着在 WM_PAINT 中添加如下代码:// 绘制图形int d = 100;POINT c = {150, 150};for (int i = 0; i < 2; i++){for (int j = 0; j < 2; j++){draw(hdc, c, d, i * 2 + j);c.x += 250;}c.x = 150;c.y += 250;}此段代码绘制前 4 个科赫雪花。
几何画板教案
课题:几何画板下制作分形
教学目标:(1)了解分形的意义(2)用录制循环的方法作分形
教学过程:
一)展示
二)讲授新课
1)1904年数学家Koch给出了条处处没有切线的连续
曲线——雪花曲线。
(当时仅仅是为了证明存在处处连
续但处处不可导的函数。
)雪花曲线具有自相似性,
即它的任一局部都是整体在较小尺度下的再现或缩影。
1967年法国数学家B.Mandelbrot(B.曼德勃罗)提出了
“英国的海岸线有多长?”的著名问题,1975年他在
法兰西学院讲课期间提出了分形几何的思想。
人们惊奇
的发现,直观上雪花曲线和自然界中的海岸线很相象。
今天分形被归为自然的几何。
用以解释欧氏几何无
法解释的现象(如树皮、云朵、海岸线等)。
分形分两
种:几何分形与随机分形。
几何分形可以想象为一种无尽的几何图案,这种图案不断地以更小的式样自我复制。
当一个几何分形的部分放大时,它看起来精确地象原先样式。
雪花曲线是将等边三角形每边三等分,在其中段再向外作新的等边三角形,删掉重叠的边,重复上述过程产生的。
它有着令人惊异的性质:具有有限的面积却有无限的周长。
2)制作分形Koch(柯赫)曲线。
3)学生练习完成。
三)小结略。
下列关于科赫曲线和科赫雪花的说法科赫曲线和科赫雪花是非常有趣和迷人的数学构造之一。
科赫曲线是一条无限长的分形曲线,由瑞典数学家赫尔曼·冯·科赫于20世纪初提出。
科赫雪花是由科赫曲线得到的一种特殊形状,它由三个等边三角形组成,而每个等边三角形的边都被替换为科赫曲线的一部分。
科赫曲线和科赫雪花具有非常特殊的几何属性和数学特性,下面将介绍关于它们的一些重要性质和应用。
首先,科赫曲线和科赫雪花是分形结构。
分形是指具有自相似性的物体或形状,意味着无论在哪个尺度上观察,它们的局部都类似于整体。
科赫曲线是分形的典型例子,因为无论我们放大或缩小它,都可以看到相似的曲线结构。
科赫雪花也是分形结构,因为整个雪花和它的一小部分都非常相似。
分形结构在自然界和人工设计中广泛存在,例如山脉、云彩、树枝、海岸线等等,它们展示了自然界中的美与复杂性。
其次,科赫曲线和科赫雪花具有无限长度。
科赫曲线的长度是无限的,尽管它曲线的外观是有限的。
这是因为科赫曲线每次迭代都会增加长度,直到无限趋近于一个无穷大的值。
科赫雪花也有相似的性质,虽然每一次迭代都会增加雪花的边长,但随着迭代的无限进行,雪花的长度也会趋近于无穷大。
这种无限长度的特性给科赫曲线和科赫雪花带来了它们独特的美感和神秘性。
第三,科赫曲线和科赫雪花具有无法填充的面积。
尽管科赫曲线和科赫雪花都有无限长度,但它们的面积却是有限的。
这是因为科赫曲线的的宽度趋于零,所以它的面积收敛到一个有限的值。
科赫雪花也有相似的性质,它不断迭代后的面积也是有限的,尽管每个小三角形的面积趋近于零。
科赫曲线和科赫雪花的这种特性使它们成为有趣的数学问题,许多数学家和科学家对它们的性质进行了深入研究。
另外,科赫曲线和科赫雪花是可重复的。
科赫曲线和科赫雪花的构造是通过重复特定的操作来获得的。
科赫曲线是通过每个线段的两侧添加一个等边三角形来获得的,而科赫雪花是通过将三个等边三角形的边替换为科赫曲线的一部分来获得的。
分形之科赫(Koch)雪花科赫曲线是⼀种分形。
其形态似雪花,⼜称科赫雪花、雪花曲线.瑞典⼈科赫于1904年提出了著名的“雪花”曲线,这种曲线的作法是,从⼀个正三⾓形开始,把每条边分成三等份,然后以各边的中间长度为底边。
分别向外作正三⾓形,再把“底边”线段抹掉,这样就得到⼀个六⾓形,它共有12条边。
再把每条边三等份,以各中间部分的长度为底边,向外作正三⾓形后,抹掉底边线段。
反复进⾏这⼀过程,就会得到⼀个“雪花”样⼦的曲线。
这曲线叫做科赫曲线或雪花曲线。
给定线段AB,科赫曲线可以由以下步骤⽣成:(1)将线段分成三等份(AC,CD,DB)(2)以CD为底,向外(内外随意)画⼀个等边三⾓形DMC(3)将线段CD移去(4)分别对AC,CM,MD,DB重复1~3。
反复进⾏这⼀作图过程,得到的曲线越来越精细。
科赫曲线有着极不寻常的特性,不但它的周长为⽆限⼤,⽽且曲线上任两点之间的距离也是⽆限⼤。
该曲线长度⽆限,却包围着有限的⾯积。
很神奇的⼀个曲线,他说明了⼀个悖论:“⽆限长度包围着有限⾯积。
”程序中实现了0~8级的科赫雪花分形.程序设计时,将这9级曲线的顶点数据全部放置在⼀个内存中.并使⽤如下结构体进⾏设置:struct SnowLevel{Yuint vertexStart;Yuint verticesCount;};SnowLevel m_snowLevels[SNOW_LEVELS_COUNT];Yuint m_currentLevel;分形图形的顶点⽣成算法代码如下:static void Zhe(const Vector3& vStart, const Vector3& vEnd, Vector3* pVertices){Vector3 vSub = vEnd - vStart;pVertices[0] = vStart;pVertices[1] = vStart + vSub/3;pVertices[3] = vStart + vSub*2/3;pVertices[4] = vEnd;Yreal alfa = atan2f(vSub.y, vSub.x);alfa += YD_REAL_PI/3;Yreal l = D3DXVec3Length(&vSub)/3;pVertices[2].x = pVertices[1].x + cosf(alfa)*l;pVertices[2].y = pVertices[1].y + sinf(alfa)*l;pVertices[2].z = 0.0f;}void CFractalSnowEntity::Fractal(Vector3* pVertices){pVertices[0].x = 0.0f;pVertices[0].y = YD_SNOW_RADIUS;pVertices[0].z = 0.0f;pVertices[1].x = YD_SNOW_RADIUS*sinf(YD_REAL_PI/3);pVertices[1].y = -YD_SNOW_RADIUS*sinf(YD_REAL_PI/6);pVertices[1].z = 0.0f;pVertices[2].x = -pVertices[1].x;pVertices[2].y = pVertices[1].y;pVertices[2].z = 0.0f;for (Yuint i = 1; i < SNOW_LEVELS_COUNT; i++){const Vector3* pSrc = pVertices + m_snowLevels[i - 1].vertexStart;Vector3* pDest = pVertices + m_snowLevels[i].vertexStart;Yuint c = m_snowLevels[i - 1].verticesCount;for (Yuint j = 0; j < c; j++){Zhe(pSrc[j], pSrc[(j + 1)%c], pDest);pDest += 4;}}}下载地址:科赫雪花第0级科赫雪花第1级科赫雪花第2级科赫雪花第3级科赫雪花第4级科赫雪花第5级科赫雪花第6级科赫雪花第7级科赫雪花第8级软件使⽤说明键盘0~8,分别设置第0级到第8级分形.这是个3D程序,⿏标右键的拖动可以改变视⾓.键盘X⽤于恢复为默认视⾓.键盘F11⽤于全屏切换.。
海岸线究竟有多长?PB08207006 王婷一节微积分课上,宣老师简单的说了一句话,“海岸线的长度是无穷大的”。
说者无心,听者有意,百度一下,终于明白了个中究竟。
海岸线长度依赖于测量单位,若以1km为单位测量海岸线,得到的近似长度将短于1km的曲折都忽略掉了,若以1m为单位测量,则能测出被忽略掉的曲折,长度将变大,测量单位进一步变小,测得的长度将愈来愈大,这些愈来愈大的长度将趋近于一个确定值,这个极限值就是海岸线的长度。
但仔细一想:当测量单位变小时,所得的长度是无限增大的。
海岸线的长度是不确定的,或者说,在一定意义上海岸线是无限长的。
为什么?答案也许在于海岸线的极不规则和极不光滑。
实际测量中,我们将海岸线折线化,得出一个有意义的长度,这就是我们通常所说的海岸线的长度了。
下面我们来看一下经典的科赫曲线(科赫雪花):科赫曲线是一种外形像雪花的几何曲线,所以又称为雪花曲线,它是分形曲线中的一种,具体画法如下:1、任意画一个正三角形,并把每一边三等分;2、取三等分后的一边中间一段为边向外作正三角形,并把这“中间一段”擦掉;3、重复上述两步,画出更小的三角形。
4、一直重复,直到无穷,所画出的曲线叫做科赫曲线。
科赫曲线有以下几个特点:1、曲线任何处不可导,即任何地点都是不平滑的2、总长度趋向无穷大3、曲线上任意两点距离无穷大4、面积是有限的雪花曲线的面积是原来生成它的三角形的面积的8/5;面积计算方法如下Ⅰ.假定等边△ABC的面积是k。
Ⅱ.分△ABC为九个全等等边三角形,各具有面积a,如图所示。
因此k=9a。
现在确定雪花曲线六个初始尖角中每一个面积的极限。
我们知道大尖角的面积是a,因为它是九个三角形之一向外翻转而形成的。
在由它生成的下一批尖角中,每一尖角具有面积a/9,因为和原来的三角形一样,它也被分为九个全等三角形后再把其中一个向外翻转而形成下一批的一个尖角。
事实上,每一个相继的尖角都被分为九个全等三角形,同时在两边生出两个三角形。
#include "graphics.h"
#include "extgraph.h"
#include "genlib.h"
#include "simpio.h"
#include "conio.h"
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include <windows.h>
#include <olectl.h>
#include <stdio.h>
#include <mmsystem.h>
#include <wingdi.h>
#include <ole2.h>
#include <ocidl.h>
#include <winuser.h>
#include <math.h>
#define pi 3.14159265357989
//转换成极坐标画线
static void DrawPolarLine(double r,double theta)
{ double radians; //弧度
radians=theta*2*pi/360;
DrawLine(r*cos(radians),r*sin(radians));
}
//递归部分
static void DrawFractalLine(double len,double theta, int order) { if(order==0) DrawPolarLine(len,theta);
else{ DrawFractalLine(len/3,theta,order-1);
DrawFractalLine(len/3,theta-60,order-1);
DrawFractalLine(len/3,theta+60,order-1);
DrawFractalLine(len/3,theta,order);
}
}
//基础结构为正三边形
static void KochFractal(double size,int order)
{ double x0,y0;
x0=GetWindowWidth()/2-size/2;
y0=GetWindowHeight()/2-sqrt(3)*size/6;//为在窗口正中间作图,计算坐标MovePen( x0,y0);
DrawFractalLine(size,0,order);//递归
DrawFractalLine(size,120,order);
DrawFractalLine(size,240,order);
}
void main()
{ double size;
int order;
InitGraphics();
printf("Please input the size\n");
size=GetReal();
printf("Please input the order\n");
order=GetInteger();
KochFractal(size, order);
getch();
}。