# FASTKit_SampleCode_RectPartition_cpp **Repository Path**: harmonyos_samples/fastkit_samplecode_rectpartition_cpp ## Basic Information - **Project Name**: FASTKit_SampleCode_RectPartition_cpp - **Description**: 本示例基于FAST Kit算法加速套件,利用矩形划分求解器接口实现矩形区域划分功能,展示FAST Kit在网格数据处理和空间几何计算等潜在场景中的算法加速能力。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-29 - **Last Updated**: 2026-01-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于FAST Kit实现矩形区域划分 ## 介绍 本示例基于FAST Kit算法加速套件,利用矩形划分求解器接口实现矩形区域划分功能,展示FAST Kit在网格数据处理和空间几何计算等潜在场景中的算法加速能力。 矩形划分求解器接收若干个彼此不相交的矩形区域作为输入,计算出覆盖相同区域的矩形划分方案,并使输出的矩形区域数量尽可能少。 矩形划分求解器运行的时间复杂度为$O(N\log N)$,其中$N$为输入矩形数量。可以高效处理大规模输入数据。此示例处理的区域数据规模较小,仅作为演示目的。 ## 效果预览 | 应用启动后默认界面 | 用户点击按钮后显示矩形划分结果 | | -------------------------------------------------------- | ------------------------------------------------------- | | | | ## 使用说明 1. 打开应用,显示默认界面。其中上方网格区域为算法输入的编辑区域(算法输入区域由橙色表示)。 1. 点击中间的按钮计算矩形区域划分。 1. 点击后,在下方的网格展示算法输出。可以看到算法将橙色输入区域被划分为若干矩形(输出矩形由随机颜色表示)。 1. 之后,用户可以继续点击上方网格自由编辑,然后点击中间按钮进行计算,查看矩形划分结果。 ## 工程目录 ``` ├──entry/src/main/cpp // cpp代码区 │ ├──types │ │ └──libentry │ │ └──Index.d.ts // native层接口注册文件 │ ├──CMakeLists.txt // native层编译配置 │ └──napi_init.cpp // native api层接口的具体实现函数,包括矩形划分API调用 ├──entry/src/main/ets // ets代码区 │ ├──entryability │ │ └──EntryAbility.ets // 程序入口 │ ├──entrybackupability │ │ └──EntryBackupAbility.ets // 程序备份恢复 │ └──pages │ └──Index.ets // 主页界面 └──entry/src/main/resources // 应用资源目录 ``` ## 具体实现 ### UI部分 UI部分代码写在`Index.ets`主页界面中,其中网格部分使用ArkUI中的Grid网格容器组件实现。如何使用Grid组件不是本示例重点,如有需要请查阅相关官方文档,此处不进行赘述。 UI接受用户输入后,以跨语言调用的方式将输入矩形数据传入给Native层,在Native层调用FAST Kit的C API接口进行矩形划分计算,结果传回到ArkTS层的进行UI显示。 ### Native部分 Native部分接收输入矩形数据调用FAST Kit进行矩形划分计算,核心的API调用代码如下: ```cpp // 核心算法调用函数 static int32_t SolveRectPartition(FAST_Rect* inputs, size_t input_length, FAST_Rect* results, FAST_ErrorCode& ret) { size_t resultSize = 0; FAST_RectPartitionConfig* config = NULL; do { // 创建配置 ret = HMS_FAST_RectPartition_CreateConfig(&config); if (ret != FAST_ErrorCode::FAST_ERROR_CODE_SUCCESS) { OH_LOG_ERROR(LOG_APP, "Failed to create config: %{public}d\n", ret); break; } // 设置算法 ret = HMS_FAST_RectPartition_SetAlgo(config, "SweepLineAlgo"); if (ret != FAST_ErrorCode::FAST_ERROR_CODE_SUCCESS) { OH_LOG_ERROR(LOG_APP, "Failed to set algorithm: %{public}d\n", ret); break; } // 求解矩形划分 ret = HMS_FAST_RectPartition_Solve(config, input_length, inputs, results, &resultSize); if (ret != FAST_ErrorCode::FAST_ERROR_CODE_SUCCESS) { OH_LOG_ERROR(LOG_APP, "Failed to solve: %{public}d\n", ret); break; } // 打印结果 OH_LOG_INFO(LOG_APP, "Resulting rectangles(result_size=%{public}ld):\n", resultSize); for (size_t i = 0; i < resultSize; ++i) { print_rect(&results[i]); } } while (0); // 清理资源 HMS_FAST_RectPartition_DestroyConfig(config); return resultSize; } ``` ## 相关权限 - 不涉及 ## 依赖 - 不涉及 ## 约束与限制 - 设备类型:华为手机,华为平板,华为PC。 - HarmonyOS系统:HarmonyOS 6.0.2 Release及以上。 - DevEco Studio版本:DevEco Studio 6.0.2 beta及以上。 - HarmonyOS SDK版本:HarmonyOS 6.0.2 Release SDK及以上。