Processing 绘制Sierpinski'有困难;加工中的s三角形

Processing 绘制Sierpinski'有困难;加工中的s三角形,processing,Processing,我试图在Processing 3中绘制Sierpinski的三角形,并设法使其运行前两层。但是,当它尝试绘制第三层和以后的任何层时,它只会在某些三角形中绘制更多的三角形 这是密码 arraylistinitpoints; 智力水平; 无效设置(){ 尺寸(400400); noFill(); initPoints=newarraylist(); 添加(新的PVector(宽度/2,高度/4)); 添加(新的PVector(宽度/4,3*高度/4)); 添加(新的PVector(3*width/4

我试图在Processing 3中绘制Sierpinski的三角形,并设法使其运行前两层。但是,当它尝试绘制第三层和以后的任何层时,它只会在某些三角形中绘制更多的三角形

这是密码

arraylistinitpoints;
智力水平;
无效设置(){
尺寸(400400);
noFill();
initPoints=newarraylist();
添加(新的PVector(宽度/2,高度/4));
添加(新的PVector(宽度/4,3*高度/4));
添加(新的PVector(3*width/4,3*height/4));
}
作废提款(){
三角形(initPoints.get(0.x,initPoints.get(0.y,initPoints.get(1.x,initPoints.get(1.y),initPoints.get(2.x,initPoints.get(2.y));
对于(int i=0;i<3;i++){
级别=1;
drawTri(i,初始点,标高);
}
}
PVector findMid(PVector a、PVector b){
int midX=楼层((a.x+b.x)/2);
int midY=楼层((a.y+b.y)/2);
返回新的PVector(midX、midY);
}
void drawTri(int顶点、ArrayList基点、int层){
级别=层+1;
ArrayList points=新的ArrayList();
添加(基点获取(顶点%3));
添加(findMid(basePoints.get(顶点%3),basePoints.get((顶点+1)%3));
添加(findMid(basePoints.get(顶点%3),basePoints.get((顶点+2)%3));
三角形(points.get(0).x,points.get(0).y,points.get(1).x,points.get(1).y,points.get(2).x,points.get(2).y);
如果(级别<4){
对于(int i=0;i<3;i++){
drawTri(i,点,级别);
}
}
}

有什么建议吗?我认为这与我运行for循环的方式有关,但我不确定。

正如我在评论中所说,请在发布问题之前尝试运行您的程序。您需要隔离问题并准确理解代码在做什么,您可以使用print语句和Processing编辑器附带的调试器来做到这一点

但只要看看你的代码,我就怀疑你有一个草图级别
level
变量,还有一个
level
变量,你正在传递给
drawTri()
函数

在代码执行时,考虑草图级别
level
变量的值。添加print语句以查看它到底在做什么

如果我去掉sketch level
level
变量,我会得到这个,我猜它更接近您想要的:

float x = int(random(0,1024));

float y = int(random(0,600));

float ax=512;

float ay=0;

float bx=0;

float by=600;

float cx=1024;

float cy=600;

void setup() 
{

  size(1024, 600);

  background(0);

}
void nextPoint()

{

  int r = int(random(1,7));

  float X;

  float Y;

  if(r==1||r==2)

  {

   X = lerp(x, ax, 0.5) ;

   Y= lerp(y, ay, 0.5);

  }

  else if(r==3||r==4)

  {

   X = lerp(x, bx, 0.5) ;

   Y= lerp(y, by, 0.5);

  }

  else

  {

   X = lerp(x, cx, 0.5) ;

   Y= lerp(y, cy, 0.5);

  }

  x=X;

  y=Y;

}

void drawPoint()
{

  colorMode(HSB,255,255,255);

  stroke(map(y, 0, 15000,100,4000),200,255,10);

  strokeWeight(1);

  point(ax,ay);

  point(bx,by);

  point(cx,cy);

  point(x, y);

}

void draw()
{

  for(int i=0;i<100;++i)
  {

  drawPoint();

  nextPoint();

  }

}
float x=int(随机(01024));
浮动y=int(随机(0600));
浮动ax=512;
浮动ay=0;
浮动bx=0;
浮点数=600;
浮动cx=1024;
浮球cy=600;
无效设置()
{
大小(1024600);
背景(0);
}
void nextPoint()
{
int r=int(随机(1,7));
浮动X;
浮动Y;
如果(r==1 | | r==2)
{
X=lerp(X,ax,0.5);
Y=lerp(Y,ay,0.5);
}
else如果(r==3 | | r==4)
{
X=lerp(X,bx,0.5);
Y=lerp(Y,乘以0.5);
}
其他的
{
X=lerp(X,cx,0.5);
Y=lerp(Y,cy,0.5);
}
x=x;
y=y;
}
空支点()
{
彩色模式(HSB,255255);
笔划(地图(y,0,150001004000),200255,10);
冲程重量(1);
点(ax,ay);
点(bx,bx);
点(cx,cy);
点(x,y);
}
作废提款()
{

对于(int i=0;i请使用你的程序。代码的执行与你期望的有什么不同?当我运行你的程序时,我在屏幕上看到了一些三角形。你期望发生什么?谢谢你的帮助!让它按照我想要的方式工作。尝试使用print语句进行调试,但当g如果你解释为什么它能解决问题,而不是仅仅发布你的代码,那么答案会更有用。