# 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及以上。