HarmonyOS应用《玄象》开发实战:Canvas 太极图算法:阴阳半圆 + 鱼眼小圆的数学推导
阅读时长约 20 分钟 | 难度★★★★★ | 篇章第 2 篇 · 启动体验Splash 与动画对应源码entry/src/main/ets/pages/SplashPage.ets中的drawTaiji方法前言太极图是中华哲学的核心符号“一阴一阳之谓道”。玄象项目启动页以 Canvas 绘制的金色太极图作为视觉锚点传递玄之又玄众妙之门的品牌调性。本篇将深入剖析玄象项目drawTaiji方法的数学原理从外圈金色光环、白色半圆阳、黑色半圆阴、鱼眼小圆的算法推导到arc角度参数与坐标系的对应关系。掌握这套太极图绘制算法您就能用纯代码绘制任何复杂几何图形。提示太极图的绘制难点在于阴阳鱼眼的实现。玄象项目用 7 个 Canvas 操作精准还原了太极图的视觉精髓。一、drawTaiji 完整源码1.1 源码全貌privatedrawTaiji(canvas:CanvasRenderingContext2D,canvasWidth:number,canvasHeight:number){constcxcanvasWidth/2;constcycanvasHeight/2;constrcanvasWidth/2-10;// 1. 外圈金色光环canvas.strokeStyleColors.PRIMARY_GOLD;canvas.lineWidth2;canvas.beginPath();canvas.arc(cx,cy,r5,0,Math.PI*2);canvas.stroke();// 2. 白色半圆阳canvas.fillStyle#F0D078;canvas.beginPath();canvas.arc(cx,cy,r,-Math.PI/2,Math.PI/2);canvas.fill();// 3. 黑色半圆阴canvas.fillStyle#1A1A2E;canvas.beginPath();canvas.arc(cx,cy,r,Math.PI/2,-Math.PI/2);canvas.fill();// 4. 白色小圆阳中有阴canvas.fillStyle#F0D078;canvas.beginPath();canvas.arc(cx,cy-r/2,r/2,0,Math.PI*2);canvas.fill();// 5. 黑色小圆阴中有阳canvas.fillStyle#1A1A2E;canvas.beginPath();canvas.arc(cx,cyr/2,r/2,0,Math.PI*2);canvas.fill();// 6. 阳中小黑点canvas.fillStyle#1A1A2E;canvas.beginPath();canvas.arc(cx,cy-r/2,r/6,0,Math.PI*2);canvas.fill();// 7. 阴中小金点canvas.fillStyle#F0D078;canvas.beginPath();canvas.arc(cx,cyr/2,r/6,0,Math.PI*2);canvas.fill();// 8. 装饰花纹canvas.strokeStyleColors.PRIMARY_GOLD;canvas.lineWidth1;canvas.beginPath();canvas.arc(cx,cy,r*0.75,0,Math.PI*2);canvas.stroke();}1.2 八步绘制流程玄象项目太极图绘制分为 8 步步骤绘制内容Canvas API1外圈金色光环arcstroke2白色半圆阳arcfill3黑色半圆阴arcfill4白色小圆阳中有阴arcfill5黑色小圆阴中有阳arcfill6阳中小黑点arcfill7阴中小金点arcfill8装饰花纹arcstroke二、坐标系与几何参数2.1 Canvas 坐标系(0,0) ───────────→ x │ │ │ ↓ yCanvas 坐标系特点原点在左上角x 轴向右为正y 轴向下为正与数学坐标系相反2.2 arc 角度方向Canvasarc方法角度方向-π/2 │ │ π ◄────●────► 0 │ │ π/2角度 0指向 x 轴正方向右角度 π/2指向 y 轴正方向下角度 -π/2指向 y 轴负方向上角度 π指向 x 轴负方向左2.3 玄象项目太极图参数constcxcanvasWidth/2;// 圆心 xconstcycanvasHeight/2;// 圆心 yconstrcanvasWidth/2-10;// 太极半径圆心Canvas 几何中心半径Canvas 宽度的一半减去 10 像素边距提示玄象项目太极图 Canvas 尺寸为 220×220因此cx cy 110r 100。三、外圈金色光环3.1 绘制代码canvas.strokeStyleColors.PRIMARY_GOLD;canvas.lineWidth2;canvas.beginPath();canvas.arc(cx,cy,r5,0,Math.PI*2);canvas.stroke();3.2 关键参数参数值含义strokeStyleColors.PRIMARY_GOLD金色描边lineWidth2描边宽度 2pxarc(cx, cy, r5, 0, 2π)圆心 (cx, cy)半径 r5完整圆外圈光环3.3 视觉效果外圈金色光环环绕太极主体营造金边镶嵌的视觉。四、白色半圆阳4.1 绘制代码canvas.fillStyle#F0D078;canvas.beginPath();canvas.arc(cx,cy,r,-Math.PI/2,Math.PI/2);canvas.fill();4.2 arc 角度参数分析canvas.arc(cx,cy,r,-Math.PI/2,Math.PI/2);起始角度-π/2指向上方结束角度π/2指向下方默认方向顺时针从上方顺时针扫过 180 度到下方覆盖右半圆。4.3 颜色选择玄象项目用#F0D078浅金色表示阳颜色含义#F0D078浅金阳#1A1A2E深蓝黑阴提示传统太极图用黑白两色。玄象项目改为浅金 深蓝黑更符合应用的金色视觉调性。五、黑色半圆阴5.1 绘制代码canvas.fillStyle#1A1A2E;canvas.beginPath();canvas.arc(cx,cy,r,Math.PI/2,-Math.PI/2);canvas.fill();5.2 arc 角度参数分析canvas.arc(cx,cy,r,Math.PI/2,-Math.PI/2);起始角度π/2指向下方结束角度-π/2指向上方从下方顺时针扫过 180 度到上方覆盖左半圆。5.3 绘制顺序的视觉影响玄象项目先绘制白色半圆右半再绘制黑色半圆左半。两个半圆刚好覆盖整个圆形成阴阳两半的视觉效果。六、鱼眼小圆阳中有阴6.1 绘制代码canvas.fillStyle#F0D078;canvas.beginPath();canvas.arc(cx,cy-r/2,r/2,0,Math.PI*2);canvas.fill();6.2 几何参数canvas.arc(cx,cy-r/2,r/2,0,2π);参数值含义圆心 xcx与主圆同心圆心 ycy - r/2主圆上方 r/2 处半径r/2主圆半径的一半角度0到2π完整圆6.3 鱼眼的视觉效果这个小圆位于主圆上半部分阴区域用浅金色填充视觉上咬掉了阴区域的一块形成阳鱼眼。提示鱼眼是太极图最具哲学意味的部分——“阳中有阴阴中有阳”。玄象项目用 4 个小圆两个鱼眼 两个鱼眼内的小点精准还原了这一视觉。七、鱼眼小圆阴中有阳7.1 绘制代码canvas.fillStyle#1A1A2E;canvas.beginPath();canvas.arc(cx,cyr/2,r/2,0,Math.PI*2);canvas.fill();7.2 几何参数参数值含义圆心 xcx与主圆同心圆心 ycy r/2主圆下方 r/2 处半径r/2主圆半径的一半这个小圆位于主圆下半部分阳区域用深蓝黑填充形成阴鱼眼。八、鱼眼内的小点8.1 阳中小黑点canvas.fillStyle#1A1A2E;canvas.beginPath();canvas.arc(cx,cy-r/2,r/6,0,Math.PI*2);canvas.fill();8.2 阴中小金点canvas.fillStyle#F0D078;canvas.beginPath();canvas.arc(cx,cyr/2,r/6,0,Math.PI*2);canvas.fill();8.3 小点几何参数小点位置圆心半径颜色阳中小黑点(cx, cy - r/2)r/6深蓝黑阴中小金点(cx, cy r/2)r/6浅金8.4 鱼眼与小点的关系鱼眼内的小点是太极图鱼眼的瞳孔阳鱼眼浅金色圆内有一个深蓝黑小点阴鱼眼深蓝黑色圆内有一个浅金小点提示小点半径r/6约为主圆半径的 1/6。这个比例是玄象项目经过多次尝试后的黄金比例既保证小点可见又不破坏鱼眼的整体性。九、装饰花纹9.1 绘制代码canvas.strokeStyleColors.PRIMARY_GOLD;canvas.lineWidth1;canvas.beginPath();canvas.arc(cx,cy,r*0.75,0,Math.PI*2);canvas.stroke();9.2 装饰圆参数参数值含义圆心(cx, cy)与主圆同心半径r * 0.75主圆半径的 3/4描边金色1px细金线装饰花纹是太极图内部的细金圆环为太极图增加层次感。十、太极图绘制的数学总结10.1 关键数学关系元素圆心半径起止角度外圈光环(cx, cy)r 50 ~ 2π白色半圆阳(cx, cy)r-π/2 ~ π/2黑色半圆阴(cx, cy)rπ/2 ~ -π/2鱼眼小圆 1(cx, cy - r/2)r/20 ~ 2π鱼眼小圆 2(cx, cy r/2)r/20 ~ 2π阳中小黑点(cx, cy - r/2)r/60 ~ 2π阴中小金点(cx, cy r/2)r/60 ~ 2π装饰花纹(cx, cy)r * 0.750 ~ 2π10.2 设计精髓玄象项目太极图的设计精髓7 层绘制顺序从底层外圈光环到顶层鱼眼内小点精准控制视觉层级。几何对称性所有元素以(cx, cy)为对称中心。比例协调r、r/2、r/6的比例经过精心设计。提示太极图的绘制是 Canvas 几何绘制的典型范例。理解 arc 角度方向是绘制正确图形的关键。九、太极图绘制的常见问题9.1 太极图绘制的常见错误错误现象根因解决方案阴阳半圆错位arc 起始/结束角度理解错误记住 -π/2 指向上方π/2 指向下方鱼眼小圆偏离中心圆心坐标计算错误确保 cy ± r/2 正确鱼眼内小点不可见小点半径过小检查 r/6 是否大于 0.5px9.2 如何将太极图封装为可复用组件Componentexportstruct Taiji{Propsize:number220;privatesettings:RenderingContextSettingsnewRenderingContextSettings(true);privatetaijiContext:CanvasRenderingContext2DnewCanvasRenderingContext2D(this.settings);build(){Canvas(this.taijiContext).width(this.size).height(this.size).onReady((){this.drawTaiji(this.taijiContext,this.taijiContext.width,this.taijiContext.height);})}// drawTaiji 方法复用 SplashPage 中的实现}9.3 太极图的缩放适配在不同屏幕尺寸上太极图应自适应缩放。玄象项目通过canvasWidth / 2 - 10计算半径确保在不同分辨率下都完整显示。总结本篇以玄象项目drawTaiji方法为蓝本深入剖析了 HarmonyOS Canvas 绘制太极图的算法原理从 Canvas 坐标系与 arc 角度方向、外圈金色光环、阴阳半圆、鱼眼小圆、鱼眼内小点到装饰花纹的 8 步绘制流程。掌握这套几何绘制算法您就能用纯代码绘制任何复杂图形从太极图到八卦图、从星宿图到风水罗盘。下一篇《14 · 银河渐变带createLinearGradient 与 addColorStop 实战》将带您深入玄象项目启动页星空背景中的银河渐变绘制。如果这篇文章对你有帮助欢迎点赞、收藏⭐、关注你的支持是我持续创作的动力相关资源HarmonyOS 官方文档CanvasRenderingContext2D.arcMDN Canvas APICanvasRenderingContext2D.arc()太极图数学原理wikipedia.org/wiki/太极图开源鸿蒙跨平台社区https://openharmonycrossplatform.csdn.net

相关新闻

多语言AI应用开发实战:从模型选型到部署优化

多语言AI应用开发实战:从模型选型到部署优化

1. 项目概述:为什么需要多语言AI应用? 在全球化数字产品的开发中,多语言支持早已不是加分项而是基础需求。去年我们团队为某跨境电商平台开发客服系统时,发现传统翻译API存在三个致命缺陷:上下文丢失导致语义扭曲、专业…

2026/7/26 22:01:31 阅读更多 →
国产化AI原生企业通讯系统SmartMsg的技术架构与实现

国产化AI原生企业通讯系统SmartMsg的技术架构与实现

1. 项目概述:当国产化遇上AI原生智信通SmartMsg的诞生源于两个关键趋势的碰撞:一方面,企业通讯工具国产化替代需求在近年呈现爆发式增长;另一方面,大模型技术正在重构所有软件的人机交互方式。这个项目本质上是在用全栈…

2026/7/26 22:01:31 阅读更多 →
Axios CDN快速集成实战:3种方法解决HTTP请求难题

Axios CDN快速集成实战:3种方法解决HTTP请求难题

Axios CDN快速集成实战:3种方法解决HTTP请求难题 【免费下载链接】axios Promise based HTTP client for the browser and node.js 项目地址: https://gitcode.com/GitHub_Trending/ax/axios 还在为项目中的HTTP请求烦恼吗?面对复杂的网络请求处理…

2026/7/26 22:01:31 阅读更多 →

最新新闻

影院票房预测与排片优化系统技术解析

影院票房预测与排片优化系统技术解析

1. 项目背景与核心价值电影票房预测与排片优化系统是当前影院数字化运营的核心工具。我在参与国内某大型院线管理系统升级时,曾深度调研过这个领域的实际需求。传统排片主要依赖经理的个人经验,存在两大痛点:一是热门场次座位空置率高&#x…

2026/7/26 22:24:43 阅读更多 →
License-Plate-Recognition实战:从安装到运行的完整步骤(附代码注释)

License-Plate-Recognition实战:从安装到运行的完整步骤(附代码注释)

License-Plate-Recognition实战:从安装到运行的完整步骤(附代码注释) 【免费下载链接】License-Plate-Recognition License Plate Recognition For Car With Python And OpenCV 项目地址: https://gitcode.com/gh_mirrors/lic/License-Plat…

2026/7/26 22:24:43 阅读更多 →
Gowid生态系统:探索丰富的第三方扩展与工具

Gowid生态系统:探索丰富的第三方扩展与工具

Gowid生态系统:探索丰富的第三方扩展与工具 【免费下载链接】gowid Compositional widgets for terminal user interfaces, written in Go, inspired by urwid. 项目地址: https://gitcode.com/gh_mirrors/go/gowid Gowid是一个基于Go语言开发的终端用户界面…

2026/7/26 22:24:43 阅读更多 →
tsc-watch完全指南:TypeScript开发的终极热重载工具

tsc-watch完全指南:TypeScript开发的终极热重载工具

tsc-watch完全指南:TypeScript开发的终极热重载工具 【免费下载链接】tsc-watch The TypeScript compiler with --watch and a new onSuccess argument 项目地址: https://gitcode.com/gh_mirrors/ts/tsc-watch tsc-watch是一款为TypeScript开发者打造的终极…

2026/7/26 22:24:43 阅读更多 →
垃圾焚烧发电智能控制系统:数字孪生与强化学习的应用

垃圾焚烧发电智能控制系统:数字孪生与强化学习的应用

1. 项目背景与核心价值垃圾焚烧发电作为当前主流的城市固废处理方式,其运行效率与环保指标直接关系到"双碳"目标的实现。传统焚烧厂普遍面临两个痛点:一是依赖人工经验调整燃烧参数,工况波动大;二是污染物排放存在滞后调…

2026/7/26 22:24:43 阅读更多 →
工业视觉检测中的YOLO实时目标检测优化实践

工业视觉检测中的YOLO实时目标检测优化实践

1. 项目背景与核心挑战在工业视觉检测领域,实时目标检测系统的吞吐量直接决定产线效率。传统单线程YOLO推理方案在1080p分辨率下通常只能达到5-8FPS,而现代智能产线对30FPS的实时性要求已成为标配。我们团队为某汽车零部件制造商开发的缺陷检测系统&…

2026/7/26 22:23:43 阅读更多 →

日新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/26 0:00:31 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/26 0:00:31 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/26 0:00:31 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/26 0:00:31 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/26 0:00:31 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/26 0:00:31 阅读更多 →

月新闻