标题: [原创教程] [Perl]Sierpinski镂垫绘制程序 示例 [打印本页]
作者: 523066680 时间: 2015-7-29 21:21 标题: [Perl]Sierpinski镂垫绘制程序 示例
本帖最后由 523066680 于 2015-7-29 21:26 编辑
参考链接
Matrix67数学笔记 - 神奇的分形艺术(三):Sierpinski三角形
http://www.matrix67.com/blog/archives/280
wikipedia - Sierpinski triangle
http://en.wikipedia.org/wiki/Sierpinski_triangle- =info
- code: 523066680
- date: 2015-07
- =cut
-
- use IO::Handle;
- use OpenGL qw/ :all /;
- use OpenGL::Config;
- use Time::HiRes 'sleep';
- use feature 'state';
-
- our %T = (
- 'A' => [-50.0, -30.0],
- 'B' => [50.0, -30.0],
- 'C' => [0.0, 50.0]
- );
-
- STDOUT->autoflush(1);
- &Main();
-
- sub func
- {
- my ($lv, $ref) = (shift, shift);
- if ($lv > 5) { return; }
-
- my $mAB = mid($ref->{'A'}, $ref->{'B'});
- my $mAC = mid($ref->{'A'}, $ref->{'C'});
- my $mBC = mid($ref->{'B'}, $ref->{'C'});
-
- glBegin(GL_TRIANGLES);
- glColor4f( ($mAB->[0]+50.0)/100.0, ($mAB->[1] +50.0)/100.0, 0.6, 1.0);
- glVertex3f($mAB->[0], $mAB->[1], 0.0);
- glVertex3f($mAC->[0], $mAC->[1], 0.0);
- glVertex3f($mBC->[0], $mBC->[1], 0.0);
- glEnd();
-
- my %T1 = (
- 'A' => $ref->{'A'},
- 'B' => $mAB,
- 'C' => $mAC
- );
- func($lv+1, \%T1);
-
- my %T2 = (
- 'A' => $ref->{'B'},
- 'B' => $mAB,
- 'C' => $mBC
- );
- func($lv+1, \%T2);
-
- my %T3 = (
- 'A' => $ref->{'C'},
- 'B' => $mAC,
- 'C' => $mBC
- );
- func($lv+1, \%T3);
-
- }
-
- sub mid
- {
- my ($refA, $refB) = (shift, shift);
- my $x = ($refA->[0] + $refB->[0]) / 2;
- my $y = ($refA->[1] + $refB->[1]) / 2;
- return [$x, $y];
- }
-
- sub display
- {
- our %T;
-
- glBlendFunc(GL_SRC_ALPHA, GL_DST_ALPHA);
- glClear(GL_COLOR_BUFFER_BIT);
-
- glBegin(GL_TRIANGLES);
- glColor4f(1.0, 1.0, 1.0, 0.2);
- glVertex3f($T{'A'}->[0], $T{'A'}->[1], 0.0);
- glVertex3f($T{'B'}->[0], $T{'B'}->[1], 0.0);
- glVertex3f($T{'C'}->[0], $T{'C'}->[1], 0.0);
- glEnd();
- &func(0, \%T);
-
- glutSwapBuffers();
-
- }
-
- sub init
- {
- glClearColor(0.0, 0.0, 0.0, 1.0);
- glPointSize(3.0);
- glEnable(GL_BLEND);
- }
-
- sub idle
- {
- sleep 0.1;
- glutPostRedisplay();
- }
-
- sub Reshape
- {
- glViewport(0.0,0.0,800.0,800.0);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glOrtho(-100.0,100.0,-100.0,100.0,0.0,200.0);
- glScalef(1.8, 1.8, 1.8);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- gluLookAt(0.0,0.0,100.0,0.0,0.0,0.0, 0.0,1.0,100.0);
- }
-
- sub hitkey
- {
- my $keychar = lc(chr(shift));
- if ($keychar eq 'q') {
- glutDestroyWindow($WinID);
- }
- }
-
- sub Main
- {
- glutInit();
- glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_MULTISAMPLE );
- glutInitWindowSize(800, 800);
- glutInitWindowPosition(1,1);
- our $WinID = glutCreateWindow("Sierpinski");
- &init();
- glutDisplayFunc(\&display);
- glutReshapeFunc(\&Reshape);
- glutKeyboardFunc(\&hitkey);
- glutIdleFunc(\&idle);
- glutMainLoop();
- }
复制代码
作者: 523066680 时间: 2015-7-29 21:37
这个是 Matrix67笔记中的 C 代码实现,相当精简- #include <stdio.h>
- int main()
- {
- const int n=(1<<5)-1;
- int i,j;
- for (i=0; i<=n; i++)
- {
- for (j=0; j<=n; j++)
- printf( (i&j)==j ? "#" : " ");
- printf("\n");
- }
- getchar();
- return 0;
- }
复制代码
#
##
# #
####
# #
## ##
# # # #
########
# #
## ##
# # # #
#### ####
# # # #
## ## ## ##
# # # # # # # #
################
# #
## ##
# # # #
#### ####
# # # #
## ## ## ##
# # # # # # # #
######## ########
# # # #
## ## ## ##
# # # # # # # #
#### #### #### ####
# # # # # # # #
## ## ## ## ## ## ## ##
# # # # # # # # # # # # # # # #
################################
作者: yu2n 时间: 2015-7-29 23:44
颜色很靓。
来个数码雨效果吧。
JS操作DOM效率实在太低…
作者: 523066680 时间: 2015-7-30 01:01
回复 3# yu2n
打算先花点时间学习分形,搞完弄弄别的。(看来要搞的东西很多
作者: 523066680 时间: 2016-12-2 18:01
回复 3# yu2n
终于……
第一个demo,诸多不足,有待完善
作者: happy886rr 时间: 2016-12-2 18:40
回复 5# 523066680
不错嘛!兄这个freetype玩的很溜啊。
作者: yu2n 时间: 2016-12-2 18:56
回复 5# 523066680
不错不错,不明觉厉。
作者: 523066680 时间: 2016-12-4 23:12
第二阶段
从PHPBB论坛代码里取一段
作者: codegay 时间: 2016-12-5 02:31
别馋,放分享放代码
作者: 523066680 时间: 2016-12-6 09:41
回复 9# codegay
C代码,在那边发了
V2.5
作者: happy886rr 时间: 2016-12-6 10:05
回复 10# 523066680
gdi不好用,我也打算转战gl库
作者: 523066680 时间: 2016-12-6 10:13
本帖最后由 523066680 于 2016-12-6 10:23 编辑
回复 11# happy886rr
旧的GL库(v1.2-v2.1),画点画线画多边形还真是比大部分其他图形库好用。这也就是有人建议我用Unity3D,我一直没换的原因(而且体积上肯定不小,一样要学习成本)。
不过再往下深入,新知识很多,最好买书
刚好昨天和一个人聊到了书籍资源
http://www.code-by.org/viewtopic.php?f=43&t=218#p659
作者: happy886rr 时间: 2016-12-6 10:22
回复 12# 523066680
很不错的学习心得。我知道该学什么了。gl异常的强大。我正准备学习3D图形方面的知识,这样就能操作图形的空间旋转。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |