プログラミングで図形ってどうやって書くの?的なことを聞かれたので、それらしいのをやってみました。
シェルピンスキーのギャスケット
#include <glut.h>
#include <stdio.h>
struct Pos {
GLdouble x, y;
};
void triangle(int n, Pos a, Pos b, Pos c) {
glBegin(GL_LINE_LOOP);
glVertex2d(a.x, a.y);
glVertex2d(b.x, b.y);
glVertex2d(c.x, c.y);
glEnd();
if (n < 1) {
return;
} else {
Pos d, e, f;
d.x = (a.x + b.x)/2, d.y = (a.y + b.y)/2;
e.x = (b.x + c.x)/2, e.y = (b.y + c.y)/2;
f.x = (a.x + c.x)/2, f.y = (a.y + c.y)/2;
triangle(n-1, a, d, f);
triangle(n-1, d, b, e);
triangle(n-1, f, e, c);
}
}
void display(void) {
Pos a, b, c;
a.x = -0.9, a.y = -0.9;
b.x = 0.0, b.y = 0.9;
c.x = 0.9, c.y = -0.9;
triangle(5, a, b, c);
glFlush();
}
int main(int argc, char *argv[]) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA);
glutCreateWindow("GLTest");
glClear(GL_COLOR_BUFFER_BIT);
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
実行結果
再帰で短くかけました。再帰を使ったプログラミングは、楽しいです。