欢迎光临
我们一直在努力

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

数学艺术图案画-曼陀罗(50)
本系列曼陀罗图案创制一直以来都是我的最爱。我总是被色彩绚烂和美轮美奂的图案感动。
在前些时候完成了曼陀罗图案系列 4 轮既定目标,( 图 1)至( 图 40 )。
本博文开始提供的是第 5 集系列曼陀罗图案: 图41至图50。
此文是第5集系列图案的最后一图,以后会推出后续的系列图案。
再次把美好的东西贡献给大家,希望大家喜欢。

曼陀罗图案画是一类经典的、具有长久历史的艺术形式。在多个种族文化和宗教传统中占据很特殊地位。且不谈宗教方面,其图案在美学和艺术方面,就有那无与伦比的地位。图案通常以圆形呈现,它那几何图形的集合,图案的对称性、复杂性以及色彩的绚烂和变化多端,常能激起人们对美的憧憬和向往。

本博文提供了最为简单和直观的数学艺术绘图方法
一块画布 Canvas    cs.Draw…
一个调色板设置:预设调色板 getcolor ( )
     加色彩变化 SetColor (180, r1, g1+k*cn, b1)
一个绘图函数  mandalaXX ( ) { ······ }
几个简单的绘图语句 
     canvas.DrawOval (X, Y, La, Lb, R)   画椭圆
     canvas.DrawCircle (X, Y, R)       画圆形
绘出一组色彩缤纷,美轮美奂的图案。

颜色设置:原预设置六个调色板色调,取色彩亮度及鲜艳,图案绘出时加色彩变化。今有修正,增加一色调:黄色yellow 。
图案的绘制要点是以椭圆的长短轴变化,半径变化,以及中心距的变化,再加上色彩的变化来完成图案的复杂度,图案图形的艺术性。各参数的变化代码中有注释。

本设计的重点:图案是即时逐线逐帧动画展示的。

本人感受到屏幕的美感,数学绘画的艺术感,简直美极了。本博文是曼陀罗图案系列文档,今后会陆续推出其他图样。谨以此方法贡献给喜欢美的朋友。
本程序是用简单的C语言在安卓手机上编写的。界面是手机屏幕方式。
 
总结一下图形和色彩变化的要点:
一是图形变化:图形输出中心距L变化,加微调距离(L+40)叠加图形,以及椭圆的长短轴尺寸比例的变化,循环套叠画出图形。
二是色彩变化:预设置调色板色调模型,循环绘图时调用k值微调RGB颜色值来变化输出图形色彩。
细心的读者对比一下几篇博文,就能体会此中奥妙。

下面是源码:
//设置全局变量或局部变量
float pi=3.1415926535;
string s,ss,ss1,ss2,ss3;  //print text strin
float sx,sy, px,py, dx,dy;   //center point
float sx1,sy1,sx2,sy2,sx3,sy3,sx4,sy4;   //绘图
float a,a1,a2, L,L1,d,r;   //sin (a), d degree,  Length
double sn;    //mode number
int round;      //set round 
int r1,g1,b1;     //16m 全色调色板 (A, R, G, B)
double Rn;    //random number
int i,j,n,t,k, kn;    //t = times, n = numbe
 int cn;         //设置调色板色彩变化系数

预设置调色板:
getcolor (){
//** 此是新修正的调色板
//** 原预设置调色板 (六个色调),新增yellow
 // 1 red         2 pink     3 blue   4 purple 
//  5 green    6 orange    7 yellow
//  cn 色调变化系数: cn = 5 to 20
//  cn:小 >> 红色调 =>> 大 >> 蓝绿色调
      Rn=random()*7+1;       //color 
      kn=(int)Rn;     
  if (kn==1){r1=250; g1=-120; b1=0; cn=5; }  //red
  if (kn==2){r1=250; g1=-50; b1=250; cn=10; } //pink
  if (kn==3){r1=0;  g1=0; b1=250; cn=15;  } //blue
  if (kn==4){r1=160; g1=0; b1=250;  cn=20;  } //purple
  if (kn==5){r1=0; g1=200; b1=100; cn=15;  }//green
  if (kn==6){r1=250;g1=30;b1=100; cn=15; } //orange
  if (kn==7){r1=250; g1=250; b1=0; cn=10; } //yellow
   //** return >>> color (A,R,G,B ) = r1, g1, b1  
}//getcolor ()

图例:
Times = 8  是一次循环展示的图案,Times = ( 1 – 7 ) 是动画展示的中间过程图案。

 

 

 

 

  

图案源码如下:
//** 图案绘出,pi/8 八角形 i*45度,pi/6 六角形 60度
//** pi/4 十字形 90度,pi/5 五星形 72度,pi/12 十二角 30度,  pi/16 十六角 22.5度
//** k * n =椭圆比,k*1.5,可 set 0.5 >>> 2.5
//**图案动画展示:图案和色彩多次叠加,每轮次八步产生8个不同色彩的图案,2圈次可展示出16个图案
//** 图案采用多层图形多层色彩套叠设计方法
//** 外圈二三层,中心区二三层,多层多彩套图形设计

mandala50 (){
//** init round,  n,  center point px, py
     round=2;   n=0;  //** 设置动画演示次数,圈数
     px=360;  py=360;    //** 图案输出中心点
  
//** 重绘图案
redraw50:  
        cs.SetFillMode (1);//0不填色,1填色
        cs.SetColor (255,0,0,0);
        cs.DrawRect (0,0,720,720);     //页面重置
        n=n+1;       //计数,圈数

//** 图案绘出:有 8 步图形和颜色变化
    for (t=1; t<=8; t++){    
        cs.SetFillMode (1);  //0不填色,1填色
        cs.SetColor (255,0,0,0);
        cs.DrawRect(20,660,700,710);  //清屏

 //** 设置颜色,取得颜色值
         getcolor ();
         cs.SetColor (255, r1, g1+200, b1);

//** 屏幕打印状态提示:次数 t,圈数 n        
        s=intToString (t);
        ss3="Times = "+s;
        s=intToString (n);
        ss1="Round  = "+s;
        cs.SetTextSize (28);
        cs.DrawText ("曼陀罗图案 (50)  ",50,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);   //框线
        cs.Update ();
  
//****** figure 1 ****** 图形叠加设计
//** 设置颜色,取得颜色值
        getcolor ();
     for(i=0;i<8; i++){  
           a=2*pi/8*i ;    L=150;
           sx1=(float)(L*cos(a))+px;
           sy1=(float)(L*sin(a))+py;
       for (k=10;k<40; k++){  
        //** 依取得颜色 >>> 颜色变化 a=180 半透明
          cs.SetColor (180,r1, g1+k*cn, b1);
          cs.DrawOval (sx1,sy1,40,k*1.2, i*45);  
               }      }   

 //****** figure 2 ****** 图形叠加设计
//** 设置颜色,取得颜色值
            getcolor ();
     for(i=0;i<8;i++){  
            a=2*pi/8*i+pi/8 ;    L=150;
            sx1=(float)(L*sin(a))+px;
            sy1=(float)(-L*cos(a))+py;
        for (k=10;k<30;k++){     
           // ** 依取得颜色 >>> 颜色变化 a=180 半透明
            cs.SetColor (180,r1, g1+k*cn, b1);
            cs.DrawOval (sx1,sy1, 18, k*1.2,  i*45+22.5);  
            cs.DrawCircle (sx1,sy1, k/5);
                 }    }   

//****** figure 3 ****** 图形叠加设计
        getcolor ();
     for(i=0;i<16; i++){  
           a=2*pi/16*i ;    L=130;
           sx1=(float)(L*sin(a))+px;
           sy1=(float)(-L*cos(a))+py;
       for (k=10;k<30; k++){  
        //** 依取得颜色 >>> 颜色变化 a=180 半透明
           cs.SetColor (180,r1, g1+k*cn, b1);
           cs.DrawOval (sx1,sy1,10,k*1.5, i*22.5);  
           cs.DrawCircle (sx1,sy1, k/5);
                }      }   

//****** figure 4 ****** 图形叠加设计
        getcolor ();
     for(i=0;i<16; i++){  
           a=2*pi/16*i+pi/16 ;    L=110;
           sx1=(float)(L*sin(a))+px;
           sy1=(float)(-L*cos(a))+py;
       for (k=10;k<30; k++){  
        //** 依取得颜色 >>> 颜色变化 a=180 半透明
           cs.SetColor (180,r1, g1+k*cn, b1);
           cs.DrawOval (sx1,sy1,15,k*0.8, i*22.5+11.25);  
           cs.DrawCircle (sx1,sy1, k/5);
                }      }   

//****** center  figure 1 ********
        getcolor ();
     for(i=0;i<8; i++){  
           a=2*pi/8*i+pi/8 ;    L=60;
           sx1=(float)(L*sin(a))+px;
           sy1=(float)(-L*cos(a))+py;
       for (k=10;k<20; k++){  
        //** 依取得颜色 >>> 颜色变化 a=180 半透明
           cs.SetColor (180,r1, g1+k*cn, b1);
           cs.DrawOval (sx1,sy1,10,k*1.2, i*45+22.5);  
           cs.DrawCircle (sx1,sy1, k/3);
                }      }   

//****** center  figure 2 ********
        getcolor ();
     for(i=0;i<8; i++){  
           a=2*pi/8*i ;    L=45;
           sx1=(float)(L*sin(a))+px;
           sy1=(float)(-L*cos(a))+py;
       for (k=5;k<25; k++){  
        //** 依取得颜色 >>> 颜色变化 a=180 半透明
           cs.SetColor (180,r1, g1+k*cn, b1);
           cs.DrawOval (sx1,sy1,15,k*1.5, i*45);  
           cs.DrawCircle (sx1,sy1, k/5);
                }      }   

           cs.Update ();       //即时动画演示
                       }     //next t
 
     sleep (1000);    //next round delay
     if (n<round) goto redraw50;   //下一圈
}//test50

 

 

//** End ****

赞(0)
未经允许不得转载:171主机测评 » 数学艺术图案画-曼陀罗(50)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址