2017-03-22 24 views
0

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ループをどのように動かしているのかとは関係があると思いますが、わかりません。

+0

してください[デバッグ](のhttp:// happycodingを.io /チュートリアル/処理/デバッグ)あなたのプログラム。コードの実行は、あなたが期待しているものとどこが違うのですか?あなたのプログラムを実行すると、画面に三角形が表示されます。何が起こると思いますか? –

答えて

0

私のコメントで言ったように、あなたが質問を投稿する前にdebugあなたのプログラムを試してみてください。問題を特定し、コードが何をしているのかを正確に理解する必要があります。また、PrintステートメントとProcessingエディタに付属のデバッガを使用してコードを実行する必要があります。

コードを見るだけで、スケッチレベルleveldrawTri()関数に渡す変数levelという変数があることは疑いがあります。

コード実行時のスケッチレベルlevelの値について考えてみましょう。印刷文を追加して、それが何をしているのかを正確に確認してください。私はスケッチレベルlevel変数を取り除く場合

、私はあなたが望んでいたものに近い私は推測しているおり、これを取得:

triangles

+0

助けてくれてありがとう!ちょうど私が望んでいた方法で働いた。デバッグのためにprintステートメントを使用しようとしましたが、それを通過する際に何らかの理由で 'level'をスキップしました。 – Nimbus125

関連する問題