所以我正在编写一个递归程序,该程序应该使用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
所以,事实证明我是世界上最愚蠢的人。
感谢大家的尝试,我很感谢您的帮助。
该代码旨在处理等边三角形,其非常具体(您可以通过角度来判断)。
我放入一个高度等于底边的三角形(不是等边的)。当我修复输入三角形时,一切都很好。
| 归档时间: |
|
| 查看次数: |
767 次 |
| 最近记录: |