数学艺术图案画-曼陀罗(二)

张开发
2026/4/21 1:53:03 15 分钟阅读

分享文章

数学艺术图案画-曼陀罗(二)
数学艺术图案画曼陀罗二曼陀罗图案画是一类经典的、具有长久历史的艺术形式。在多个种族文化和宗教传统中占据很特殊地位。且不谈宗教方面其图案在美学和艺术方面就有那无与伦比的地位。图案通常以圆形呈现它那几何图形的集合图案的对称性、复杂性以及色彩的绚烂和变化多端常能激起人们对美的憧憬和向往。笔者对美丽的图案画情有独钟记得在初学QBasic语言时就喜欢用该语言的绘图功能绘制各种图案。在早期的IBM一体机的黑屏幕上用语言输出256色的数学图案看着五彩的线条生动的图案总是很陶醉。本博文提供了最为简单和直观的数学艺术绘图方法一块画布 Canvas一个调色板设置预设调色板 getcolor ( )加色彩变化 SetColor (255,r110,g1t*20,250-b1)一个绘图函数 mandalaXX ( ) { ······ }几个简单的绘图语句canvas.DrawOval (X, Y, La, Lb, R) 画椭圆canvas.DrawCircle (X, Y, R) 画圆形绘出一组色彩缤纷美轮美奂的图案。颜色设置预设置六个调色板色调取色亮度及鲜艳图案绘出时加变色图案的绘制要点是以椭圆的长短轴变化半径变化以及中心距的变化再加上色彩的变化来完成图案的复杂度图案图形的艺术性。各参数的变化代码中有注释。本设计的重点图案是即时逐线逐帧动画展示的。本人感受到屏幕的美感数学绘画的艺术感简直美极了。本博文是曼陀罗图案系列文档今后会陆续推出其他图样。谨以此方法贡献给喜欢美的朋友。本程序是用简单的C语言在安卓手机上编写的。界面是手机屏幕方式。用什么语言来编写早期的QBasic现在的微软VBasic的绘图语句功能可以但这些语言缺少直接的椭圆绘图语句要自己编制。有些C语言也没直接的椭圆绘图语句。有DrawOval功能来创建图案就很方便了。要用其他语言改写的应注意哈。下面是源码//设置全局变量或局部变量float pi3.1415926535;string s,ss,ss1,ss2,ss3; //print text stringfloat sx,sy, px,py, dx,dy; //center pointfloat sx1,sy1,sx2,sy2,sx3,sy3,sx4,sy4; //绘图float a,a1,a2, L,L1,d,r; //sin (a), d degree, Lengthdouble sn; //mode numberint round; //set roundint r1,g1,b1; //16m 全色调色板 A, R, G, B)double Rn; //random numberint i,j,n,t,k, kn; //t times, n numbermandala02 (){//** init round, n, center point px, pyround5; n0; //** 设置动画演示次数圈数px360; py350; //** 图案输出中心点//** 重绘图案redraw02:cs.SetFillMode (1);//0不填色1填色cs.SetColor (255,0,0,0);cs.DrawRect (0,0,720,720); //页面重置nn1; //计数 round//** 图案绘出有 8 步图形和颜色变化for (t1; t9; t){cs.SetFillMode (1);//0不填色1填色cs.SetColor (255,0,0,0);cs.DrawRect(20,660,700,710); //清屏//** 设置颜色取得颜色值getcolor (); //set color//** 依取得颜色 颜色变化cs.SetColor (255,r110,g1t*15,250-b1);//** 屏幕打印标题、状态提示次数 t圈数 nsintToString (t);ss3Times s;sintToString (n);ss1Round s;cs.SetTextSize (28);cs.DrawText (曼陀罗图案 (02) ,80,40);cs.DrawText (ss3,90,680);cs.DrawText (ss1,240,680);cs.Update ();//** 图形区域框线cs.SetFillMode (0);//0不填色1填色cs.SetColor (255,250,250,0);cs.DrawRect(50,50,670,650); //框线//** 图案绘出pi/8 八分形pi/16 , pi/32 N分形//** k * n 椭圆比k*1.8可 set 0.5 2.5//** 图案展示图案和色彩 8次叠加5圈展示5个图案//** 定范围设置中心距长度增量 RnRnrandom()*201;//****** figure 1 ******//** 设置颜色取得颜色值getcolor (); //set colorfor(i0; i16; i){ //八角形L100(int)Rn*3 ;a2*pi/8*i ;sx1(float)(L*sin(a))px;sy1(float)(-L*cos(a))py;a12*pi/16*i ;sx2(float)((L60)*sin(a1))px;sy2(float)(-(L60)*cos(a1))py;for (k10;k40;k){//** 依取得颜色 颜色变化 a150 半透明cs.SetColor (150,r110,g1k*6,250-b1);cs.DrawOval (sx1,sy1, 10, k*1.8, i*45);cs.DrawCircle (sx1,sy1,k);cs.DrawCircle (sx2,sy2,k/2);} }cs.Update (); //即时动画展示//****** figure 2 ******getcolor ();for(i0; i32; i){ //多边形L160; //100(int)Rn*3 ;a2*pi/32*i ;sx1(float)(L*sin(a))px;sy1(float)(-L*cos(a))py;for (k10;k20;k){//** 依取得颜色 颜色变化 a150 半透明cs.SetColor (150,r110,g1k*8,250-b1);cs.DrawOval (sx1,sy1, 15, k*1.8, i*11.25);cs.DrawCircle (sx1,sy1,k/2);} }cs.Update (); //即时动画展示//****** center figure ** 此中心小花可不加getcolor ();for(i0;i8; i){L30 ;a2*pi/8*i ;sx1(float)(L*sin(a))px;sy1(float)(-L*cos(a))py;for (k10;k50;k){//** 依取得颜色 颜色变化 a150 半透明cs.SetColor (150,r110,g1k*20,250-b1);cs.DrawOval (px,py, 20,k*1.8, i*45);} }cs.Update (); //即时动画展示} //next tsleep (1000); //next times delayif (nround) goto redraw02; //重绘}//test2 ()附样例图案 ( Times 8 )另附动画展示中间过程图案( Times 1 -- 7 )预设置调色板函数getcolor (){//** 预设置调色板 (六个色调Rnrandom()*51; //color changekn(int)Rn;if (kn1){r1245; g1-50; b1250; } //redif (kn2){r1220; g120; b10; } //pinkif (kn3){r160; g10; b10; } //blueif (kn4){r1120; g10; b10; } //purpleif (kn5){r130; g150; b1150; }//greenif (kn6){r1225;g130;b1120; } //orenge//** return color ( R, G, B ) r1, g1, b1}//getcolor ()//** End ****

更多文章