Processing 3でSierpinskiのTriangleを描画しようとしていましたが、最初の2つのレイヤーを実行することができました。しかし、3番目以降のレイヤーを描画しようとすると、三角形の中にはさらに多くの三角形が描画されます。処理中のSierpinskiの三角形の描画に問題があります
は、ここでは、コード
ArrayList<PVector> initPoints;
int level;
void setup() {
size(400, 400);
noFill();
initPoints = new ArrayList<PVector>();
initPoints.add(new PVector(width/2, height/4));
initPoints.add(new PVector(width/4, 3 * height/4));
initPoints.add(new PVector(3 * width/4, 3 * height/4));
}
void draw() {
triangle(initPoints.get(0).x, initPoints.get(0).y, initPoints.get(1).x, initPoints.get(1).y, initPoints.get(2).x, initPoints.get(2).y);
for (int i = 0; i < 3; i++) {
level = 1;
drawTri(i, initPoints, level);
}
}
PVector findMid(PVector a, PVector b) {
int midX = floor((a.x + b.x)/2);
int midY = floor((a.y + b.y)/2);
return new PVector(midX, midY);
}
void drawTri(int vertex, ArrayList<PVector> basePoints, int layer) {
level = layer + 1;
ArrayList<PVector> points = new ArrayList<PVector>();
points.add(basePoints.get(vertex % 3));
points.add(findMid(basePoints.get(vertex % 3), basePoints.get((vertex + 1) % 3)));
points.add(findMid(basePoints.get(vertex % 3), basePoints.get((vertex + 2) % 3)));
triangle(points.get(0).x, points.get(0).y, points.get(1).x, points.get(1).y, points.get(2).x, points.get(2).y);
if (level < 4) {
for (int i = 0; i < 3; i++) {
drawTri(i, points, level);
}
}
}
任意のヒントですか?私はforループをどのように動かしているのかとは関係があると思いますが、わかりません。
してください[デバッグ](のhttp:// happycodingを.io /チュートリアル/処理/デバッグ)あなたのプログラム。コードの実行は、あなたが期待しているものとどこが違うのですか?あなたのプログラムを実行すると、画面に三角形が表示されます。何が起こると思いますか? –