我用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);