计算用异或法写出的谢尔宾斯基三角形的尺寸

  • 本文关键字:谢尔宾 三角形 计算 xor fractals
  • 更新时间 :
  • 英文 :


我用XOR方法为Sierpinski三角形编写了一个代码。它生成的数据是组成三角形的点在x和y上的坐标,如果我需要生成三角形,这将是很好的,但我没有。我需要的是使用沙盒方法....来计算尺寸所以我真正需要代码生成的是三角形的质量和高度。质量实际上是指组成三角形的点的数量。所以我的问题是,我如何在代码中加入计算每一行中实际存在的点的能力,而不是它们在哪里。

#include <stdio.h>
#define ANCHURA 7
#define ALTURA 4
typedef unsigned char BOOL;
#define ON (BOOL)1
#define OFF (BOOL)0
int main(int argc, char**argv)
{
BOOL spky[ALTURA][ANCHURA];
int i, j;
FILE*fout;
fout=fopen("xor.txt","w");
for(i=0;i<ALTURA;i++)
{
    for(j=0;j<ANCHURA;j++)
    {
        spky[i][j]=OFF;
    }
}
spky[0][(ANCHURA-1)/2]=ON;
for(i=1;i<ALTURA;i++)
{
    for(j=1;j<ANCHURA-1;j++)
    {
        spky[i][j]=(spky[i-1][j-1]^spky[i-1][j+1]);
    }
}
long int total=0;
for(i=0;i<ALTURA;i++)
{
    for (j=0;j<ANCHURA;j++)
    {
        if(spky[i][j])
        total++;
    }
}
fprintf(fout,"%ldt%dn", total, i);
fclose(fout);
return (0);
}

将最后一个循环改为:

long int total;
for(i=0;i<ALTURA;i++)
{
    total = 0;
    for (j=0;j<ANCHURA;j++)
    {
        if(spky[i][j]) {
            fprintf(fout,"%dt%dn",j,i);
            total++;
        }
    }
    fprintf(fout,"total number in this line = %dn", total);
}
fclose(fout);

现在它对每行的点数求和。如果你想要质心,你可以计算每条线的质量矩:

long int total, all = 0;
double moment=0;
for(i=0;i<ALTURA;i++)
{
    total = 0;
    for (j=0;j<ANCHURA;j++)
    {
        if(spky[i][j]) {
            fprintf(fout,"%dt%dn",j,i);
            total++;
        }
    }
    moment += total * i;
    all += total;
    fprintf(fout,"total number in this line = %dn", total);
}
printf("the center of gravity is at %lfn", moment / all);
fclose(fout);

最新更新