科赫雪花实施中的小虫子

9 java math fractals

所以我正在编写一个递归程序,该程序应该使用OpenGL绘制Koch的雪花,并且除了一个小问题之外,我已经让程序基本上正常工作了.递归越深,奇怪的2特定顶点得到.图片底部.

编辑:我真的不关心OpenGL方面,我已经把那部分放下了.如果你不知道OpenGL,那么glVertex所做的就是在2个方法调用中指定的两个顶点之间画一条线.假装它的drawLine(v1,v2).相同的区别.

我怀疑我的查找点的方法是责备,但我找不到任何看起来不正确的东西.

我遵循基本标准的绘图方法,这里是相关的代码剪辑

(V代表顶点V1是左下角,v2是右下角,v3是顶角):

        double dir = Math.PI;
        recurse(V2,V1,n);

        dir=Math.PI/3;
        recurse(V1,V3,n);

        dir= (5./3.)* Math.PI ;
        recurse(V3,V2,n);
Run Code Online (Sandbox Code Playgroud)

递归方法:

public void recurse(Point2D v1, Point2D v2, int n){
    double newLength = v1.distance(v2)/3.;
    if(n == 0){
        gl.glVertex2d(v1.getX(),v1.getY());
        gl.glVertex2d(v2.getX(),v2.getY());

    }else{

        Point2D p1 = getPointViaRotation(v1, dir, newLength);
        recurse(v1,p1,n-1);
        dir+=(Math.PI/3.);

        Point2D p2 = getPointViaRotation(p1,dir,newLength);
        recurse(p1,p2,n-1);
        dir-=(Math.PI*(2./3.));

        Point2D p3 = getPointViaRotation(p2, dir, newLength);
        recurse(p2,p3,n-1);
        dir+=(Math.PI/3.);

        recurse(p3,v2,n-1);
    }

}
Run Code Online (Sandbox Code Playgroud)

我真的怀疑我的数学是问题,但这对我来说是正确的:

public static Point2D getPointViaRotation(Point2D p1, double rotation, double length){
    double xLength = length * Math.cos(rotation);
    double yLength = length * Math.sin(rotation);
    return new Point2D.Double(xLength + p1.getX(), yLength + p1.getY());
}
Run Code Online (Sandbox Code Playgroud)

N = 0(一切都很好):

在此输入图像描述

N = 1(也许有点弯曲,也许)

在此输入图像描述

N = 5(WAT)

在此输入图像描述

小智 1

所以,事实证明我是世界上最愚蠢的人。

感谢大家的尝试,我很感谢您的帮助。

该代码旨在处理等边三角形,其非常具体(您可以通过角度来判断)。

我放入一个高度等于底边的三角形(不是等边的)。当我修复输入三角形时,一切都很好。