首页 > 其他分享 >第32节 arkts 图形旋转

第32节 arkts 图形旋转

时间:2024-11-27 16:29:37浏览次数:6  
标签:arkts point 32 number 旋转 let 坐标 图形

在 ArkTS 中实现图形旋转,主要是通过对图形的坐标点进行数学变换来完成的。以下是几种常见的实现方式:

使用 Canvas 绘制图形并旋转

  • 基本原理:在 Canvas 中,可以通过设置旋转角度和坐标原点,然后重新绘制图形来实现旋转效果。当调用 rotate 方法时,它会以当前的坐标原点为中心,按照指定的角度对后续绘制的图形进行旋转。
  • 示例代码
import Canvas from '@ohos.canvas';
// 创建一个Canvas对象
let canvas: Canvas = new Canvas('2d');
let ctx: CanvasRenderingContext2D = canvas.getContext('2d');
// 设置图形的初始坐标和大小
let x: number = 50;
let y: number = 50;
let width: number = 100;
let height: number = 100;
// 设置旋转角度
let angle: number = Math.PI / 4; // 45度,以弧度为单位
// 保存当前的绘图状态
ctx.save();
// 移动到图形的中心位置
ctx.translate(x + width / 2, y + height / 2);
// 进行旋转
ctx.rotate(angle);
// 绘制图形,这里以矩形为例
ctx.fillRect(-width / 2, -height / 2, width, height);
// 恢复之前保存的绘图状态
ctx.restore();
// 可以将canvas转换为PixelMap进行显示或保存等操作
  • 注意事项:在使用 rotate 方法时,需要注意坐标原点的位置和旋转的中心点。如果没有正确设置坐标原点和移动到合适的旋转中心位置,图形可能会围绕错误的点进行旋转,导致结果不符合预期。

使用 SVG 图形并旋转

  • 基本原理:SVG(Scalable Vector Graphics)是一种基于 XML 的矢量图形格式,在 ArkTS 中可以使用 SVG 来创建和操作图形。SVG 图形支持通过设置 transform 属性来实现旋转效果,其中rotate 函数用于指定旋转角度和旋转中心。
  • 示例代码
<svg width="200" height="200">
<rect x="50" y="50" width="100" height="100" fill="blue">
<animateTransform attributeName="transform" type="rotate" from="0 100 100"
to="360 100 100" dur="5s" repeatCount="indefinite"/>
</rect>
</svg>
  • 注意事项:在使用 SVG 的 animateTransform 时,需要注意 from 和 to 属性值的设置,它们分别表示旋转的起始状态和终止状态。同时,要确保 SVG 元素的大小和位置设置正确,以使其在界面中正确显示和旋转。

通过矩阵变换实现图形旋转

  • 基本原理:任何图形的变换都可以通过矩阵乘法来实现,旋转也不例外。对于二维图形的旋转,可以使用旋转矩阵与图形的坐标矩阵相乘,得到旋转后的坐标矩阵,从而实现图形的旋转。
  • 示例代码
// 定义一个点的坐标
let point: { x: number, y: number } = { x: 50, y: 50 };
// 定义旋转角度,以弧度为单位
let angle: number = Math.PI / 4;
// 旋转矩阵
let rotationMatrix: number[][] = [
[Math.cos(angle), -Math.sin(angle)],
[Math.sin(angle), Math.cos(angle)]
];
// 应用旋转矩阵
let newX: number = point.x * rotationMatrix[0][0] + point.y * rotationMatrix[0]
[1];
let newY: number = point.x * rotationMatrix[1][0] + point.y * rotationMatrix[1]
[1];
// 更新点的坐标
point.x = newX;
point.y = newY;
// 可以根据新的坐标重新绘制图形
  • 注意事项:这种方法需要对矩阵运算有一定的了解,并且在处理复杂图形时,需要对图形的每个顶点都进行矩阵变换操作,计算过程相对较为复杂,但它提供了更底层和灵活的控制方式,可以实现更复杂的变换效果。

标签:arkts,point,32,number,旋转,let,坐标,图形
From: https://blog.csdn.net/m0_60889254/article/details/144062210

相关文章

  • AU3 通常指的是 AutoIt v3,这是一种脚本语言和自动化工具,主要用于 Windows 平台上的自
    AU3通常指的是AutoItv3,这是一种脚本语言和自动化工具,主要用于Windows平台上的自动化任务、GUI(图形用户界面)脚本和小型应用程序开发。AutoIt是一种基于简单语法的脚本语言,旨在通过模拟键盘、鼠标和窗口控制来实现自动化操作。以下是AutoItv3的一些基本特点:1. 自动化任......
  • 【AE】Adobe After Effects强大视觉效果和动态图形设计软件下载安装包
    目录1.软件简介发展历程应用领域2.系统要求操作系统要求处理器要求内存与显卡要求3.下载与安装下载安装步骤​编辑4.功能介绍合成与特效处理动画制作调色与后期处理1.软件简介AdobeAfterEffects是Adobe公司推出的强大视觉效果和动态图形设计软件。它......
  • 【8】GD32H7xx SPI Nor Flash_GD25Qxx
    目录1.GD32H7xxSPI简介1.1主要功能特性1.2SPI结构及数据收发2.GD25Q1282.1SPINorFlash简介2.2芯片引脚及存储空间3.驱动程序4.驱动程序测试1.GD32H7xxSPI简介1.1主要功能特性  GD32H7xx共有6个SPI外设(SPI0~SPI5)。SPI为串行同步......
  • SpringBoot枣阳市第二人民医院信息管理系统73263 程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统内容;医院管理员,医生,线上挂号,用户,门诊病历,药品信息,就医记录开题报告内容项目名称:SpringBoot枣阳市第二人民医院信息管理系统项目编号:73263一、项......
  • 【每日一题】3206. 交替组
    给你一个整数数组 colors ,它表示一个由红色和蓝色瓷砖组成的环,第 i 块瓷砖的颜色为 colors[i] :colors[i]==0 表示第 i 块瓷砖的颜色是 红色 。colors[i]==1 表示第 i 块瓷砖的颜色是 蓝色 。环中连续3块瓷砖的颜色如果是 交替 颜色(也就是说中间瓷砖......
  • 20222322 2024-2025-1 《网络与系统攻防技术》实验五实验报告
    1.实验内容1.1实验要求(1)从www.besti.edu.cn、baidu.com、sina.com.cn中选择一个DNS域名进行查询,获取相关信息。(2)尝试获取BBS、论坛、QQ、MSN中某一好友的IP地址,并查询获取该好友所在的具体地理位置。(3)使用nmap开源软件对靶机环境进行扫描,回答以下问题并给出操作命令。(4)使用Ne......
  • P1321 单词覆盖还原
    带点小思维首先,这题的意思就是boy,girl,。这三个单词会相应覆盖,但每个单词至少有一个单词不会被覆盖,那我们观察这三个单词发现,其里面每个字符都没有重复的,也就是说,假设我看到了一个o,那很明显就是boy的,假如看到一个l,那就是girl的,由于我们不知道每个字符被覆盖前是啥字符,那我们可以......
  • 20222326 2024-2025-1 《网络与系统攻防技术》实验五实验报告
    1.实验内容实验具体内容:一、从www.besti.edu.cn、baidu.com、sina.com.cn中选择一个DNS域名进行查询,获取如下信息:DNS注册人及联系方式该域名对应IP地址IP地址注册人及联系方式IP地址所在国家、城市和具体地理位置PS:使用whoisdignslookuptraceroute以及各类......
  • STM32和STM8开发工具、常用软件和开发环境汇总
    文章目录一、前言二、KeilC51软件三、KeilMDK-ARM四、STM32CubeMX及HAL库五、STM32CubeIDE六、STM8CubeMX七、STM32ST-LINKUtility一、前言整理一些常见的STM32/STM8开发所需要的安装包和工具。可以分别去官网下载最新的安装包。也可以通过关注【小康师兄】......
  • 代码随想录算法训练营第十天(LeetCode232.用栈实现队列;LeetCode225.用队列实现栈;LeetCo
    LeetCode232.用栈实现队列题目链接:用栈实现队列题目链接思路队列是先进先出,栈是先进后出,为了能够让栈可以模拟队列的先进先出,我们设置两个栈,一个栈作为入栈,一个栈作为出栈,我们在入栈存储完数据后,将入栈中的数据全部存储到出栈中,那么从出栈中弹出来的数据就是先进先出的......