⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 用确定性算法绘制sierpinski三角形 .txt

📁 包含了多个实现Sierpinski分形(三角形、正方形、六边形)的Matlab程序和C程序。
💻 TXT
字号:
用确定性算法绘制Sierpinski三角形 
 
 
源程序如下:

SCREEN 12:CLS

DIM s(100,100),t(100,100),x(12),y(12)

a(1)=.5:a(2)=.5:a(3)=.5

b(1)=0:b(2)=0:b(3)=0

c(1)=0:c(2)=0:c(3)=0

d(1)=.5:d(2)=.5:d(3)=.5

e(1)=1:e(2)=1:e(3)=50

f(1)=1:f(2)=50:f(3)=1

FOR I=1 to 6

x(i)=(i-1)*105:x(i+6)=x(i):y(i)=0:

y(i+6)=110:NEXT i

FOR i=1 TO 100

t(1,i)=1:t(i,1):t(100,i)=1:t(i,100)=1

NEXT i

LINE(1,1)-(!00,100),4,B

FOR n=2 TO 12

FOR i=1 TO 100:FOR j=1 TO 100

IF t(i,j)=1 THEN

FOR k=1 TO 3

s(a(k)*i+B(k)*j+e(k),c(k)*i+d(k)*j+f(k))=1

NEXT k

END IF

NEXT j:NEXT i

FOR i=1 TO 100 :FOR j=1 TO 100

T(i,j)=S(i,j):S(i,j)=0

IF t(i,j)=1 THEN

PSET(i+x(n),j+y(n)),5

END IF

NEXT j:NEXT i

NEXT n

ww:IF INKEY$="" THEN GOTO ww

END

  上面的程序是用二个维数组s,t来贮存每次迭代过程中的象Bn,在分辨率不变的条件下,如果要得到较大的图象,提高数组的维数,但QUICK BASIC 规定数组的最大容量为64KB,而且当数组容量太大时,常常无法编译,然而,如果不考虑象素的颜色,那么每个象素只有两 种状态--点亮(用1表示),不亮(用0表示)。即用一位就可以表示一个象素的状态 。但程序中用数组的一个元素来表示一个象素的状态,这里的数组娄型是浮点类型,故每个元素占二个字节,共16位,空间的浪费是明显的,下面的程序是以此为也发点而设计的,其关键点是搞清楚象素与其存贮窨之间的对应关系.

SCREEN 12; CLS :M=10

a(1)=.5:a(2)=.5:a(3)=.5

b(1)=0:b(2)=.0:b(3)=0

c(1)=0:c(2)=0:c(3)=.5

d(1)=.5:d(2)=.5:d(3)=.5

e(1)=0:e(2)=60:e(3)=0

f(1)=0:f(1)=0:f(3)=60

DEF SEG=&H8000

pl:FOR TO 1799

   POKE i,0:POKE i+&H8000,0:NEXT i

p2:FOR i,0 TO 14

   POKE i,&HFF:POKE 1785+i,&HFF:NEXT i

p3:FOR i=15 TO 1784 STEP 15

   POKE i, &H80:POKE i+14,1:NEXT i

p4:FOR i=0 TO 4

   x(i)=i*125:x(i+5)=x(i):y(i)=0:y(i+5)=130:NEXT i LINE(0,0)-(120,120),4,B

p5:FOR n=1 TO 9

p6:FOR adr=0 TO 1799

   IF PEEK(adr)<>0 THEN

p7:i=INT(adr/15)

   j0=(adr MOD 15)*8

   FOR k=0 TO 7

   IF(PEEK(adr) AND 2^(7-k))<>0 THEN

p8:j=j0+k

   FOR i=1 TO 7

p9:i(1)=INT(a(1)*i+b(1)*j+e(1))

pa:j(1)=INT(c(1)*i+d(1)*j+f(1))

   PSET(i(1)+x(n),j(1)+y(n)),4

pb:adr1=i(1)*15+INT(j(1)/8)+&H8000

pc:POKE adrl ,(PEEK(adrl) OR 2^(7-(j(1) MOD 8)))

   NEXT 1

   NED IF

   NEXT k

   END IF

   NEXT adr

   FOR k=0 TO 1799

   POKE k,PEEK(k+&H8000):POKE k+&H8000,0

   NEXT k

   NEXT n

ww:IF INKEY $="THEN GOTO ww

   END

    对程序的详细注解:

    1.标号pl-pc审不必要的,只是为了下列序述方便

    2.pl标号下的循环是把内存中程序中所用的空间清零,以免下次执得本程序时引起混乱.

    程序 中每次所画的图形尺寸均为1230*120故需120*120/8=1800个字节.

    3.p2、p3标号下是置初始集A0为正方形的边界。其中,p2标号下是代表正方形的上、下两边。p3标号下是处理正方形的左右两边。

    4.p4标号下的语句是确定每次图形的位置。

    5.p5标号下对n循环。n代表迭代次数。

    6.p6标号下对adr循环,adr代表数据存放的地址(段内地址).这一循环相当于对120*120每一象素循环.注意数据的安排是这样:数据区的第一字节表示图形第一行的前8个点(象素).字节的高位D7位表示第一行的第一个点.字节的最后一位D0位表示第一行的第八个点.余此类推..

    7.p7标号下的i是图象的行数.这里图象是从第0行开始.到第119竿结束 ,同样列数也是从第0列到第119列.

    8.p8标号下的j是图象的列数.(i,j)确定图象的位置.

    9.p9、pa中(i(l),j(l))的是迭代后点的位置.

    10.pb标号下的adr1中存放的是本次迭代后的结果应存放的地址。

    11.pc标号下,是存入本次迭代后的结果。注意这次存入数据不能破坏该字节的其它位,这是用了"或"运算。
 
 
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -