如何简化这个绘制雪花的 Blockly 程序?

问题描述

问题是这样说的:

下图左边的程序画了一片雪花。它使用 33 个代码块。 你能不能重写它,让它至少使用一个函数和少于 30 个块。

如何使用 Blockly 绘制此图?

解决方法

经过一些研究,我不认为递归函数是这种情况下的解决方案,但在 python 中我会尝试这样的事情

def drawLeaf(direction):
    // Draw your leaf in this direction using your blocks code

for direction in [0,72,144,216,288]:
    drawLeaf(direction)
,

首先,请看一下Finding coordinates of Koch Curve

这是一个绘制koch雪花的Java代码片段(适用于Android)。这是一个简单的递归函数

public void drawfractal1(Canvas canvas,float x1,float y1,float x2,float y2,int level){
        Paint paint = new Paint();
        int r = ThreadLocalRandom.current().nextInt(0,256);
        int g = ThreadLocalRandom.current().nextInt(0,256);
        int b = ThreadLocalRandom.current().nextInt(0,256);
        paint.setColor(Color.rgb(r,g,b));
        paint.setStrokeWidth(7);

        if(level==0) {
            canvas.drawLine(x1,y1,x2,y2,paint);
        }
        else{
            float ux = x2-x1;
            float uy = y2-y1;
            float vx = y1-y2;
            float vy = x2-x1;

            float xa = x1 + ux/3;
            float ya = y1 + uy/3;
            float xb = x1 + ux/2 + (float) sqrt(3)*vx/6;
            float yb = y1 +uy/2 + (float)sqrt(3)*vy/6;
            float xc = x1 + 2*ux/3;
            float yc = y1 + 2*uy/3;
            drawfractal1(canvas,x1,xa,ya,level-1);
            drawfractal1(canvas,xb,yb,xc,yc,level-1);
        }
    }

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...