2012-02-15 16 views
2

私はsierpinski三角コードを作成しました。しかし、私は三角形の数が三角形になるように、三角形を陰にしたい。私の場合は、陰影のない三角形だけを印刷します。私はこのような何かをしたい! http://en.wikipedia.org/wiki/File:Sierpinski_triangle_evolution.svgsierpinski三角形をどのようにシェードしますか?

グループ2:Kulplex

学生:ヘンリー・ダン

私は何をすべき?あなたは再帰呼び出しの一番下にあるときに

import java.applet.*; 
import java.awt.*; 

public class Sierpinski extends Applet { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 
    Graphics g; 
    Point a1,b1,c1, a2,b2,c2, a3,b3,c3; 

    int deep = 0; 

    public void paint() { 
     setBackground(new Color(255,255,255)); 
    } 

    public boolean mouseDown(Event ev, int x, int y) { 
     if (!ev.metaDown()) deep += 1; 
     else if (deep>0) deep -= 1; 
     repaint(); 
     return true; 
    } 


    public void paint(Graphics g) { 
     // Create triangle 
     int px[] = {20, 400, 210}; 
     int py[] = {400, 400, 20}; 
     g.drawPolygon(px, py, 3); 

     paintTriangle(g, new Point(20,400),new Point(400,400),new Point(210,20), deep); 
    } 

    public void paintTriangle(Graphics g, Point a, Point b, Point c, int lvl) { 


     if (lvl==0) return; 

     lvl -= 1; 

     // In the given triangle, amended to include an upside-down triangle 
     int px[] = {c.x, (c.x+b.x)/2, (a.x+c.x)/2}; 
     int py[] = {b.y, (c.y+a.y)/2, (c.y+a.y)/2}; 

     g.drawPolygon(px, py, 3); 

     // 3 new triangles 
     a1 = a; 
     b1 = new Point(c.x, b.y); 
     c1 = new Point((a.x+c.x)/2, (c.y+a.y)/2); 
     paintTriangle(g, a1, b1, c1, lvl); 

     a2 = new Point(c.x, b.y); 
     b2 = b; 
     c2 = new Point((c.x+b.x)/2, (c.y+a.y)/2); 
     paintTriangle(g, a2, b2, c2, lvl); 

     a3 = new Point((a.x+c.x)/2, (c.y+a.y)/2); 
     b3 = new Point((c.x+b.x)/2, (c.y+a.y)/2); 
     c3 = c; 
     paintTriangle(g, a3, b3, c3, lvl); 
    } 
} 
+1

はコードを無視します

+0

"シェード"とは何ですか?別の色でペイントしますか? – DRCB

+0

この場合、シェードとは、ここで三角形が透明なので、私が引き出した小枝を陰にしたいということです。 –

答えて

3

は、あなただけのg.drawPolygon(px, py, 3);への呼び出しを使用するべきではないでしょうか。

コードは今私に見えます。最初のレベルの大きな三角形は常に描画され、小さなレイヤーの描画がわかりにくくなります。

レベルがゼロの場合はg.drawPolygon()を呼び出す必要があります。すべての下位レベルで小さな三角形を生成するために再帰的に呼び出す必要があるということです。これは、白いスペースを描画するのではなく、黒い三角形を描画しようとしている場合です。あなたが達成したいことは少し不明です。

編集:あなたのコメントに基づいて、実際にポリゴンを塗りつぶすことですか?その場合、drawPolygonfillPolygonに置き換え、三角形を記入してください。

+0

皆さんありがとう、私はfillpolygonでdrawpolygonを置き換え、新しい色を挿入しました。 :) 作戦完了 –

0

これは動作するはずです。あなたが黒の黒三角で始まり、その後白で三角形を記入する必要があり

import java.applet.*; 
import java.awt.*; 

public class Sierpinski extends Applet { 

/** 
* 
*/ 
private static final long serialVersionUID = 1L; 
Graphics g; 
Point a1,b1,c1, a2,b2,c2, a3,b3,c3; 

int deep = 0; 

public void paint() { 
    setBackground(new Color(255,255,255)); 
} 

public boolean mouseDown(Event ev, int x, int y) { 
    if (!ev.metaDown()) deep += 1; 
    else if (deep>0) deep -= 1; 
    repaint(); 
    return true; 
} 


public void paint(Graphics g) { 
    // Create triangle 
    int px[] = {20, 400, 210}; 
    int py[] = {400, 400, 20}; 
    g.fillPolygon(px, py, 3); 

    paintTriangle(g, new Point(20,400),new Point(400,400),new Point(210,20), deep); 
} 

public void paintTriangle(Graphics g, Point a, Point b, Point c, int lvl) { 


    if (lvl==0) { 
     return; 
    } 

    lvl -= 1; 

    // In the given triangle, amended to include an upside-down triangle 
    int px[] = {c.x, (c.x+b.x)/2, (a.x+c.x)/2}; 
    int py[] = {b.y, (c.y+a.y)/2, (c.y+a.y)/2}; 

    // 3 new triangles 
    a1 = a; 
    b1 = new Point(c.x, b.y); 
    c1 = new Point((a.x+c.x)/2, (c.y+a.y)/2); 
    paintTriangle(g, a1, b1, c1, lvl); 

    a2 = new Point(c.x, b.y); 
    b2 = b; 
    c2 = new Point((c.x+b.x)/2, (c.y+a.y)/2); 
    paintTriangle(g, a2, b2, c2, lvl); 

    a3 = new Point((a.x+c.x)/2, (c.y+a.y)/2); 
    b3 = new Point((c.x+b.x)/2, (c.y+a.y)/2); 
    c3 = c; 
    paintTriangle(g, a3, b3, c3, lvl); 
    g.setColor(Color.WHITE); 
    g.fillPolygon(px, py, 3); 
} 

}

1

public void paint(Graphics g) { 
    // Create triangle 
    int px[] = {20, 400, 210}; 
    int py[] = {400, 400, 20}; 
    g.setColor(Color.black); 
    g.fillPolygon(px, py, 3); 
    g.setColor(Color.white); 
    paintTriangle(g, new Point(20,400),new Point(400,400),new Point(210,20), deep); 
} 

fillPolygonですべてdrawPolygonを交換してください。

マウスクリックで深さを増やすことはできません。

関連する問題