N
Ok, dies hab ich nun und für das Ausprobieren reicht es allermal.
#include <math.h>
#include <GL/glut.h>
#include <iostream>
using namespace std;
float grauwert=0.0, vonX=0.5, vonY=0.0, laenge, winkel, astwinkel, kuerzungsfaktor;
void draw_line(float vonX, float vonY, float laenge, float winkel)
{
if (laenge < 0.001)
return;
float zuX = vonX + cos(winkel)*laenge;
float zuY = vonY + sin(winkel)*laenge;
if (laenge > 0.01)
glColor3f(0.4,0.0,0.0);
else
glColor3f(0.0,0.7,0.0);
glBegin(GL_LINES);
//glColor3f(grauwert,grauwert,grauwert);
glVertex2f(vonX, vonY);
glVertex2f(zuX, zuY);
glEnd();
laenge*=kuerzungsfaktor;
draw_line(zuX, zuY, laenge, winkel + astwinkel);
draw_line(zuX, zuY, laenge, winkel - astwinkel);
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
draw_line(vonX, vonY, laenge, winkel);
glutSwapBuffers();
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(600, 600);
glutInitWindowPosition(100, 740);
glutCreateWindow("Baum");
glClearColor(1.0, 1.0, 1.0, 1.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
/*cout<<"Grauwert: ";
cin>>grauwert;
cout<<"Position des Stammes (x,y): ";
cin>>vonX>>vonY; */
cout<<"Laenge: ";
cin>>laenge;
float grad_winkel=90;
/*cout<<"Winkel (rechts): ";
cin>>grad_winkel; */
winkel=(grad_winkel/180)*M_PI;
cout<<"Verkuerzungsfaktor: ";
cin>>kuerzungsfaktor;
double grad_astwinkel;
cout<<"Astwinkel: ";
cin>>grad_astwinkel;
astwinkel=(grad_astwinkel/180)*M_PI;
glutDisplayFunc(display);
glutMainLoop();
}
Ich hab den Grenzwert um eine Größenordnung verkleinert und solang der Kürzungsfaktor nicht größer als 0.7 ist, rechnet er sich nicht tot.