当前位置: 首页 > news >正文

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

数学艺术图案画-曼陀罗(25)
本系列曼陀罗图案创制一直以来都是我的最爱。我总是被色彩绚烂和美轮美奂的图案感动。
在前些时候完成了曼陀罗图案系列的两轮既定目标,图一至图十,(图11)至(图20)。
本博文开始提供的是第三轮系列曼陀罗图案: 图21至图30 。
再次把美好的东西贡献给大家,希望大家喜欢。

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

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

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

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

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

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

mandala25 (){
//** init round, n, center point px, py
round=2; n=0; //** 设置动画演示次数,圈数
px=360; py=360; //** 图案输出中心点

//** 重绘图案
redraw25:
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+10,g1+t*20,250-b1);

//** 屏幕打印状态提示:次数 t,圈数 n
s=intToString (t);
ss3="Times = "+s;
s=intToString (n);
ss1="Round = "+s;
cs.SetTextSize (28);
cs.DrawText ("曼陀罗图案 (25) ",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 ();

//** 图案绘出,pi/8 八角形 i*45度,pi/6 六角形 60度
//** k * n =椭圆比,k*1.5,可 set 0.5 >>> 2.5
//** 图案展示:图案和色彩 8次叠加,5圈展示5个图案
//** 图案采用多层图形多层色彩套叠设计方法

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

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

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

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

//****** figure 5 **** center figure
//** 重新设置颜色,取得颜色值
getcolor ();
for(i=0;i<8;i++){
a=2*pi/4*i ; L=20;
sx1=(float)(L*sin(a))+px;
sy1=(float)(L*cos(a))+py;
for (k=10;k<30;k++){
// ** 依取得颜色 >>> 颜色变化 a=180 半透明
cs.SetColor (180,r1+10,g1+k*20,250-b1);
cs.DrawOval (sx1,sy1, 15, k*1.5, i*90);
cs.DrawCircle (px, py, k/2);
} }
cs.Update (); //即时动画演示
} //next t

sleep (1000); //next round delay
if (n<round) goto redraw25; //下一圈
}//test25


附样例图案: ( 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; } //orange
//** return >>> color ( R, G, B ) = r1, g1, b1
}//getcolor ()

//** End ****

http://www.jsqmd.com/news/964671/

相关文章:

  • 终极Android Root解决方案:Magisk系统级定制完全指南
  • AI 数字人直播系统深度测评:中小商家 7×24 小时直播的降本增效神器
  • 嵌入式Day25--多任务并发
  • 效率直接起飞 AI论文写作软件测评:2026年最新推荐与对比
  • Wyze摄像头安装螺丝有误致电池过热,13起报告6起爆炸起火,公司提供退款或换品
  • 2026年小苏打厂家推荐:食品级/工业级小苏打源头企业,高纯度与环保生产工艺深度解析 - 品牌企业推荐师(官方)
  • 为什么多算一次反而更快?深入 Blackwell 微架构,拆解 FlashAttention-4 的逆天优化
  • 高光谱遥感之光谱重建
  • 到底为什么PHP要有RESTful?
  • KEDA 事件驱动弹性伸缩实战:从消息队列到工作流编排的完整落地
  • Nios II开发全流程疑难杂症排查指南:从硬件设计到软件调试
  • 成都水处理设备厂家怎么选?2026本地靠谱企业盘点及选购指南 - 新闻快传
  • 实战指南:基于快马AI在CentOS7上一键部署企业级GitLab服务器
  • AI 数字人直播系统实测:零门槛操作如何让小白 15分钟上手直播?
  • Django动态权限拦截器——自定义 Middleware 实现全局鉴权与黑白名单
  • 3步彻底解决Flow Launcher搜索失效:Everything服务修复终极指南
  • 开发提效神器:用快马AI一键生成阿里云盘核心上传与秒传代码
  • 如何用Rust构建高效小说下载器:Tomato-Novel-Downloader技术深度解析
  • 终极指南:使用bandcamp-dl高效下载Bandcamp音乐
  • 被医学导航网站折磨了三年,终于找到一个能一直留在浏览器首页的
  • CVPR26 Best Papar:D4RT,以查询为钥,开启动态场景高效重建新范式
  • 2026年直播配套AI搜索优化引流哪家服务商强
  • RAGFlow/RAG 从文档解析到混合检索的完整链路
  • 【AI实战第2篇】Python+DeepSeek自动化Excel数据分析:3分钟生成老板想要的报表(附源码)
  • 从零认知到精准投放,CSDN AI数字营销实战指南,7步打通获客-转化-复购全链路
  • T-Mobile“Rely”5G家庭互联网套餐更新:明确最大下载速度为354 Mbps
  • Linux磁盘分区实操
  • 抖音批量下载神器:5分钟搞定无水印视频,支持合集直播全功能
  • 告别重复造轮子:用快马AI生成mmrotate高效开发脚手架,一键搞定训练评估流水线
  • 2026吸顶灯哪家靠谱?用产品矩阵、智能生态、空间适配3把尺子量 - 新闻快传