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

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

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

笔者对美丽的图案画情有独钟,记得在初学QBasic语言时就喜欢用该语言的绘图功能绘制各种图案。在早期的IBM一体机的黑屏幕上用语言输出256色的数学图案,看着五彩的线条生动的图案总是很陶醉。

本博文提供了最为简单和直观的数学艺术绘图方法

一块画布 Canvas

一个调色板设置:预设调色板 getcolor ( )

加色彩变化 SetColor (255,r1+10,g1+t*20,250-b1)

一个绘图函数 mandalaXX ( ) { ······ }

几个简单的绘图语句

canvas.DrawOval (X, Y, La, Lb, R) 画椭圆

canvas.DrawCircle (X, Y, R) 画圆形

绘出一组色彩缤纷,美轮美奂的图案。

颜色设置:预设置六个调色板色调,取色亮度及鲜艳,图案绘出时加变色

图案的绘制要点是以椭圆的长短轴变化,半径变化,以及中心距的变化,再加上色彩的变化来完成图案的复杂度,图案图形的艺术性。各参数的变化代码中有注释。

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

本人感受到屏幕的美感,数学绘画的艺术感,简直美极了。本博文是曼陀罗图案系列文档,今后会陆续推出其他图样。谨以此方法贡献给喜欢美的朋友。

本程序是用简单的C语言在安卓手机上编写的。界面是手机屏幕方式。

用什么语言来编写?早期的QBasic,现在的微软VBasic的绘图语句功能可以,但这些语言缺少直接的椭圆绘图语句,要自己编制。有些C语言也没直接的椭圆绘图语句。有DrawOval功能来创建图案就很方便了。要用其他语言改写的应注意哈。

下面是源码:

//设置全局变量或局部变量

float pi=3.1415926535;

string s,ss,ss1,ss2,ss3; //print text string

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 = number

mandala02 (){

//** init round, n, center point px, py

round=5; n=0; //** 设置动画演示次数,圈数

px=360; py=350; //** 图案输出中心点

//** 重绘图案

redraw02:

cs.SetFillMode (1);//0不填色,1填色

cs.SetColor (255,0,0,0);

cs.DrawRect (0,0,720,720); //页面重置

n=n+1; //计数 round

//** 图案绘出:有 8 步图形和颜色变化

for (t=1; t<9; t++){

cs.SetFillMode (1);//0不填色,1填色

cs.SetColor (255,0,0,0);

cs.DrawRect(20,660,700,710); //清屏

//** 设置颜色,取得颜色值

getcolor (); //set color

//** 依取得颜色 >>> 颜色变化

cs.SetColor (255,r1+10,g1+t*15,250-b1);

//** 屏幕打印标题、状态提示:次数 t,圈数 n

s=intToString (t);

ss3="Times = "+s;

s=intToString (n);

ss1="Round = "+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个图案

//** 定范围设置中心距长度:增量 Rn

Rn=random()*20+1;

//****** figure 1 ******

//** 设置颜色,取得颜色值

getcolor (); //set color

for(i=0; i<16; i++){ //八角形

L=100+(int)Rn*3 ;

a=2*pi/8*i ;

sx1=(float)(L*sin(a))+px;

sy1=(float)(-L*cos(a))+py;

a1=2*pi/16*i ;

sx2=(float)((L+60)*sin(a1))+px;

sy2=(float)(-(L+60)*cos(a1))+py;

for (k=10;k<40;k++){

//** 依取得颜色 >>> 颜色变化 a=150 半透明

cs.SetColor (150,r1+10,g1+k*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(i=0; i<32; i++){ //多边形

L=160; //100+(int)Rn*3 ;

a=2*pi/32*i ;

sx1=(float)(L*sin(a))+px;

sy1=(float)(-L*cos(a))+py;

for (k=10;k<20;k++){

//** 依取得颜色 >>> 颜色变化 a=150 半透明

cs.SetColor (150,r1+10,g1+k*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(i=0;i<8; i++){

L=30 ;

a=2*pi/8*i ;

sx1=(float)(L*sin(a))+px;

sy1=(float)(-L*cos(a))+py;

for (k=10;k<50;k++){

//** 依取得颜色 >>> 颜色变化 a=150 半透明

cs.SetColor (150,r1+10,g1+k*20,250-b1);

cs.DrawOval (px,py, 20,k*1.8, i*45);

} }

cs.Update (); //即时动画展示

} //next t

sleep (1000); //next times delay

if (n<round) goto redraw02; //重绘

}//test2 ()

附样例图案: ( Times = 8 )

另附动画展示中间过程图案:( Times = 1 -- 7 )

预设置调色板函数:

getcolor (){

//** 预设置调色板 (六个色调)

Rn=random()*5+1; //color change

kn=(int)Rn;

if (kn==1){r1=245; g1=-50; b1=250; } //red

if (kn==2){r1=220; g1=20; b1=0; } //pink

if (kn==3){r1=60; g1=0; b1=0; } //blue

if (kn==4){r1=120; g1=0; b1=0; } //purple

if (kn==5){r1=30; g1=50; b1=150; }//green

if (kn==6){r1=225;g1=30;b1=120; } //orenge

//** return >>> color ( R, G, B ) = r1, g1, b1

}//getcolor ()

//** End ****

相关推荐
网域小星球2 小时前
C 语言从 0 入门(十九)|共用体与枚举:自定义类型进阶
c语言·开发语言·算法·枚举·自定义类型·共用体
Roselind_Yi2 小时前
【开源仓库系列学习分享】MemPalace 仓库(超级记忆管家)全流程部署!(专业版)
人工智能·经验分享·笔记·python·数据挖掘·github·知识图谱
一个人旅程~2 小时前
老电脑硬盘安装系统后容量不够怎么办?如何用压缩技术对C盘进行压缩?步骤和风险防范
windows·经验分享·电脑
清风6666662 小时前
基于单片机的智能门控制系统设计与故障报警实现
数据库·单片机·mongodb·毕业设计·课程设计·期末大作业
无敌昊哥战神2 小时前
【算法与数据结构】深入浅出回溯算法:理论基础与核心模板(C/C++与Python三语解析)
c语言·数据结构·c++·笔记·python·算法
zore_c2 小时前
【C++】基础语法(命名空间、引用、缺省以及输入输出)
c语言·开发语言·数据结构·c++·经验分享·笔记
akarinnnn2 小时前
【DAY16】字符函数和字符串函数
c语言·数据结构·算法
点灯小铭2 小时前
基于单片机的智能家居门铃系统设计
单片机·嵌入式硬件·毕业设计·智能家居·课程设计·期末大作业
Tairitsu_H2 小时前
C语言:排序(二)
c语言·开发语言·算法