0

0

从二维数组中按圆形模式获取点并实现动态效果

聖光之護

聖光之護

发布时间:2025-09-08 10:57:18

|

736人浏览过

|

来源于php中文网

原创

从二维数组中按圆形模式获取点并实现动态效果

本教程详细阐述了如何从预先生成的二维点阵中,以圆形模式高效地筛选出指定半径范围内的点,并进一步探讨了如何利用此机制实现点阵的圆形渐进式消失动画。文章涵盖了基于距离的筛选方法、性能优化建议,并对比了使用三角函数生成圆周点的方法及其适用场景。

1. 点阵的初始化与构建

在Android等图形应用中,经常需要创建规则的点阵背景。以下代码片段展示了如何根据屏幕尺寸(width, height)和固定间隔(constant)生成一个二维点阵,并将其坐标存储在一个三维数组 point_matrix 中。point_matrix[xn][yn][0] 存储 x 坐标,point_matrix[xn][yn][1] 存储 y 坐标。

// 定义点阵间隔
int constant = 60;

// 计算X轴和Y轴的起始填充,使点阵居中
int padding_X = (int) Math.floor((width % constant)/2f);
if (padding_X == 0) {
    padding_X = (int) Math.floor(constant / 2);
}
int padding_Y = (int) Math.floor((height % constant)/2f);
if (padding_Y == 0) {
    padding_Y = (int) Math.floor(constant/2);
}

// 计算X轴和Y轴上点的最大索引
int max_xn = Math.round((width-(padding_X*2)) / constant);
int max_yn = Math.round((height-(padding_Y*2)) / constant);

// 初始化三维数组,用于存储点的屏幕坐标
// point_matrix[xn_index][yn_index][0] = x_coordinate
// point_matrix[xn_index][yn_index][1] = y_coordinate
int[][][] point_matrix = new int[max_xn+1][max_yn+1][2];

// 遍历生成所有点的坐标并存储
for (int yn = 0; yn <= max_yn; yn++) {
    int y = (int) (padding_Y + (yn*constant));
    for (int xn = 0; xn <= max_xn; xn++) {
        int x = (int) (padding_X + (xn*constant));
        // 将点绘制到Canvas上(示例中为白色)
        // canvas.setPixel(x,y,Color.parseColor("#ffffff"));

        // 存储点的坐标
        point_matrix[xn][yn][0] = x;
        point_matrix[xn][yn][1] = y;
    }
}
// lens[0] = max_xn+1; lens[1] = max_yn+1; // 可用于存储点阵的维度信息

这段代码确保了点阵在给定区域内均匀分布,并考虑了边缘填充以达到视觉上的居中效果。

2. 从点阵中按圆形模式筛选点

核心需求是从已生成的 point_matrix 中,筛选出距离某个中心点在特定半径范围内的所有点。

2.1 基于距离的筛选方法

最直接且普遍的方法是利用勾股定理计算每个点到指定中心点的欧几里得距离,然后与给定半径进行比较。

倍塔塞司
倍塔塞司

AI职业规划、AI职业测评、定制测评、AI工具等多样化职业类AI服务。

下载

原理: 对于点 (x, y) 和圆心 (cx, cy),它们之间的距离 d 为: d = sqrt((x - cx)^2 + (y - cy)^2) 如果 d

效率考量与优化: 用户曾担心这种方法效率低下,尤其是在需要多次执行时。

  • 对于单次或少量查询: 这种方法简单、直观,且在现代CPU上计算速度足够快,通常不会成为性能瓶颈。
  • 对于高频率、大规模查询:
    • 边界框优化: 在计算距离之前,可以先判断点是否落在圆的轴对齐矩形边界框内。如果点 (x, y) 不满足 cx - radius
    • 避免开方: 比较距离时,可以比较距离的平方与半径的平方,即 (x - cx)^2 + (y - cy)^2
    • 空间索引: 对于非常大的点集和频繁的查询,可以考虑使用四叉树 (Quadtree) 或 K-D 树等空间数据结构来预组织点,从而加速范围查询。

示例代码:基于距离的筛选

假设我们有一个 Point 类来更好地封装点的属性:

class Point {
    int x;
    int y;
    int xn_index; // 原始点阵的x索引
    int yn_index; // 原始点阵的y索引

    public Point(int xn, int yn, int x, int y) {
        this.xn_index = xn;
        this.yn_index = yn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
php中三维数组怎样求和
php中三维数组怎样求和

php中三维数组求和的方法:1、创建一个php示例文件;2、定义一个名为“$total”的变量,用于记录累加的结果。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

96

2024.02.23

treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

539

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

21

2025.12.22

深入理解算法:高效算法与数据结构专题
深入理解算法:高效算法与数据结构专题

本专题专注于算法与数据结构的核心概念,适合想深入理解并提升编程能力的开发者。专题内容包括常见数据结构的实现与应用,如数组、链表、栈、队列、哈希表、树、图等;以及高效的排序算法、搜索算法、动态规划等经典算法。通过详细的讲解与复杂度分析,帮助开发者不仅能熟练运用这些基础知识,还能在实际编程中优化性能,提高代码的执行效率。本专题适合准备面试的开发者,也适合希望提高算法思维的编程爱好者。

31

2026.01.06

android开发三大框架
android开发三大框架

android开发三大框架是XUtil框架、volley框架、ImageLoader框架。本专题为大家提供android开发三大框架相关的各种文章、以及下载和课程。

291

2023.08.14

android是什么系统
android是什么系统

Android是一种功能强大、灵活可定制、应用丰富、多任务处理能力强、兼容性好、网络连接能力强的操作系统。本专题为大家提供android相关的文章、下载、课程内容,供大家免费下载体验。

1753

2023.08.22

android权限限制怎么解开
android权限限制怎么解开

android权限限制可以使用Root权限、第三方权限管理应用程序、ADB命令和Xposed框架解开。详细介绍:1、Root权限,通过获取Root权限,用户可以解锁所有权限,并对系统进行自定义和修改;2、第三方权限管理应用程序,用户可以轻松地控制和管理应用程序的权限;3、ADB命令,用户可以在设备上执行各种操作,包括解锁权限;4、Xposed框架,用户可以在不修改系统文件的情况下修改应用程序的行为和权限。

2047

2023.09.19

android重启应用的方法有哪些
android重启应用的方法有哪些

android重启应用有通过Intent、PendingIntent、系统服务、Runtime等方法。本专题为大家提供Android相关的文章、下载、课程内容,供大家免费下载体验。

277

2023.10.18

2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

54

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 14.7万人学习

Java 教程
Java 教程

共578课时 | 54.3万人学习

Uniapp从零开始实现新闻资讯应用
Uniapp从零开始实现新闻资讯应用

共64课时 | 6.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号