当前位置: 首页 > news >正文

SimForge HSF 案例分享|复杂仿真应用定制——UAVSim无人机仿真APP(技术篇)

导读

    「神工坊」核心技术——「SimForge HSF高性能数值模拟引擎」支持工程计算应用的速开发、自动并行,以及多域耦合、AI求解加速,目前已实现航发整机数值模拟等多个系统级高保真数值模拟应用落地,支持10亿阶+、100w+核心量级的高效求解。其低代码开发能力,可面向复杂装备、中小企业专用仿真场景,快速开发定制仿真应用

    本文将通过“UAVSim无人机仿真APP”案例,带您深入了解「神工坊」团队,如何基于「SimForge HSF」,针对具体场景开发垂直应用,使产品经理也可上手操作无人机数值仿真。

 一、客户需求分析  

    1. 行业背景

    无人机广泛应用于军事侦察、民用航拍、物流配送、农业植保、应急救援等诸多领域,其市场规模呈现出爆发式增长态势。随着应用场景的不断拓展和深化,对无人机的性能、可靠性和安全性提出了越来越高的要求,这使得无人机的研发设计面临着前所未有的挑战。

    2. 客户痛点

    ➢ 精确建模与分析难度大

    在空气动力学方面,精确模拟无人机在不同飞行状态下的气流特性是确保飞行性能的关键。然而,气流与无人机机体及旋翼之间的相互作用极为复杂,受到飞行姿态、速度、环境风等多种因素的影响,准确建模和分析难度极大。

    ➢ 实物试验成本高、代价大

    在研发流程中,传统的设计方法主要依赖实物试验和经验积累。但实物试验成本高昂且耗时费力。

    ➢ 经验设计研发周期长

    经验设计在面对新型无人机的创新设计需求时,缺乏科学依据和理论支持,难以快速准确地确定最优设计方案,导致研发周期延长。

 二、解决方案设计  

    1. 自研网格模块生成自适应网格

目标:

研发可动态调整的网格模块,以满足无人机不同条件下的差异化网格需求。

    技术方案:

    UAVSim 的网络模块基于自研的结构网格自适应技术(SAMR)来生成自适应网格,其具有以下几点优势:

    ①网格自动生成

    SAMR 技术主要基于笛卡尔网格,其网格结构相对简单,天然适合自动生成网格。即使面对复杂的无人机几何形状或存在一定几何缺陷(如轻微不平整、小空洞等)的模型,也能通过适当处理成功生成网格。

    应用场景:

    对于多旋翼无人机复杂的旋翼结构和机身连接部分,模块可以自动识别并生成合适的网格。在边界处,采用脱体网格加密和合适的边界模型(如浸没边界法),确保边界条件的准确性,有效提高了网格生成的效率和质量,降低了对人工前处理的依赖。

    ②高效自适应加密

    SAMR 技术可以使网格能够精准地集中在需要加密的关键区域。

    在无人机飞行过程中,根据实时监测的物理场特征(如气流速度、压力变化等),在气流变化剧烈的区域(如高速飞行时的机翼前缘、旋翼旋转区域等)快速加密网格,而在相对稳定的区域则保持较粗的网格,从而高效利用网格资源。与传统结构化网格相比,它无需按固定维度进行加密,更加灵活;相较于非结构网格,在保持局部结构化优势的同时,利用简单直接的等分和合并规则实现网格重构,速度更快、效率更高。

    应用场景:

    当无人机从平稳飞行进入紊流区域时,网格能迅速在紊流影响区域加密,准确捕捉气流变化。

    ③多尺度特征捕捉

    SAMR 技术能够有效捕捉无人机飞行中的多尺度特征。

    无论是大尺度的气流整体分布,还是小尺度的涡旋、边界层等细节,都能通过自适应加密得到准确模拟。

    同时,由于其局部结构化特征,在适应无人机复杂几何形状的前提下,保证了局部计算效率与传统结构化网格相当。

    ④计算效率提升

    采用笛卡尔网格的 SAMR 还可大幅节约几何描述数据,缓解众核处理器内存带宽瓶颈,有利于在高性能计算平台上运行。

    SAMR 能根据不同的硬件平台(如国产神威超级计算机或传统 X86 架构计算机)特点,调整网格块分辨率,充分发挥硬件性能,进一步提高计算效率。

    应用场景:

    在使用国产神威・太湖之光超级计算机时,通过优化网格配置,实现高效计算。

无人机四旋翼侧网格生成效果图

2. LBM求解器对旋翼机体的数值仿真

目标:

实现不同工况下旋翼的高保真数值模拟,以提升无人机整体的飞行效率、机动性、稳定性和安全性。

    技术方案:

    LBM(格子玻尔兹曼方法)求解器:基于微观粒子模型,将流体空间离散为规则的格子结构,通过跟踪流体粒子在格子间的碰撞和迁移来模拟流体流动。

    在旋翼机体仿真场景下,LBM 求解器可以实现:

  • 精确描述旋翼和机体的形状和位置

  • 准确获取旋翼表面的压力分布

  • 获取旋翼关键空气动力参数

  • 捕捉气流的紊流特性和涡旋结构

  • 模拟旋翼尾流的发展和传播

  • 模拟尾流与机身等部件的相互作用

    在此技术支持下,UAVSim APP中可以通过调整旋翼的几何参数(如桨叶形状、长度、扭转角等)和飞行工况参数(如飞行速度、姿态角等),进行大量的数值实验,快速评估不同设计方案对旋翼性能的影响,为优化旋翼设计提供全面而准确的数据支持。

3. 操作界面优化

目标:

用户界面与操作流程简化,加强UAVSim APP的易上手性,降低产品经理等非专业仿真工程师的学习成本,提高协同研发效率。

    简洁直观的用户界面与便捷操作流程:

    UAVSim 的用户界面设计采用符合人机工程学的布局。

    功能模块图标直观醒目:

    主界面上,前处理、计算提交、后处理等主要功能模块功能按钮分类清晰且标识明确,用户能迅速定位所需功能入口。

    应用场景:

    在前处理模块,用户仅需简单操作,即可导入无人机几何模型,并轻松输入各旋翼的中心坐标、旋转速度、直径以及前飞速度等关键参数。

 三、总结  

    本篇详细解析了「神工坊」团队针对无人机仿真场景,提供的技术解决方案——「UAVSim无人机仿真APP」通过自研的网格模块,根据无人机真实工况生成自适应网格,进而利用LBM求解器进行计算,实现了对旋翼机体的数值仿真。软件易于操作,界面设计简洁直观,产品经理也可轻松上手,参与高效协同研发。

    关注「神工坊」,第一时间获取“案例分享”专栏最新内容,在即将发布的“操作篇”中,我们将为您展示「UAVSim无人机仿真APP」前处理-求解-后处理全流程作业的具体操作过程,敬请期待!

神工坊 _ 一站式高性能仿真服务商神工坊高性能仿真平台,源自国家超级计算无锡中心(始于2016年),是支持工程仿真应用的开发、定制和在线服务的PaaS+SaaS平台。icon-default.png?t=O83Ahttps://simforge.cn/

推荐阅读

福利放送|用户数突破2000大回馈,即刻解锁体验金福利!

SimForge 功能介绍|如何在仿真作业中实现高效协作?揭秘「在线协同」新革命

仿真科普|CAE技术赋能无人机 低空经济蓄势起飞

相关文章:

SimForge HSF 案例分享|复杂仿真应用定制——UAVSim无人机仿真APP(技术篇)

导读 「神工坊」核心技术——「SimForge HSF高性能数值模拟引擎」支持工程计算应用的快速开发、自动并行,以及多域耦合、AI求解加速,目前已实现航发整机数值模拟等多个系统级高保真数值模拟应用落地,支持10亿阶、100w核心量级的高效求解。其低…...

ROS2+OpenCV综合应用--10. AprilTag标签码追踪

1. 简介 apriltag标签码追踪是在apriltag标签码识别的基础上,增加了小车摄像头云台运动的功能,摄像头会保持标签码在视觉中间而运动,根据这一特性,从而实现标签码追踪功能。 2. 启动 2.1 程序启动前的准备 本次apriltag标签码使…...

Qanything 2.0源码解析系列6 PDF解析逻辑

Qanything 2.0源码解析系列6: PDF解析逻辑 type: Post status: Published date: 2024/12/04 summary: 深入剖析Qanything是如何拆解PDF的,核心是pdf转markdown category: 技术分享 原文:www.feifeixu.top 😀 前言: 在前面的文章中探究了图片是怎么进行解析的,这篇文章对…...

IDEA修改编译版本

目录 一、序言 二、修改maven配置 1.修改 2.代码 三、pom文件配置 1.修改 2.代码 3.问题 一、序言 有两种方法可以帮助大家解决IDEA每次刷新maven的pom配置时,会发生发行源版本不正常的报错。个人推荐第二种,原因:第二种你刷新maven后…...

Python 向量检索库Faiss使用

Faiss(Facebook AI Similarity Search)是一个由 Facebook AI Research 开发的库,它专门用于高效地搜索和聚类大量向量。Faiss 能够在几毫秒内搜索数亿个向量,这使得它非常适合于实现近似最近邻(ANN)搜索&am…...

LunarVim安装

LunarVim以其丰富的功能和灵活的定制性,迅速在Nvim用户中流行开来。它不仅提供了一套完善的默认配置,还允许用户根据自己的需求进行深度定制。无论是自动补全、内置终端、文件浏览器,还是模糊查找、LSP支持、代码检测、格式化和调试&#xff…...

机器学习随机森林回归时间序列预模型中时间滑动窗口作用以及参数设置

一、时间序列模型中时间滑动窗口作用 在时间序列模型中,时间滑动窗口(Sliding Window)起到了至关重要的作用。它是一种常见且有效的数据表示技术,通过将时间序列数据分割成多个固定大小的窗口,来捕捉和分析数据中的模式…...

【ArcGIS技巧】如何制作轨迹动画

轨迹是日常生活与工作经常要用到的,如跑步轨迹、自驾路线,考察轨迹等。地图根据路线生成轨迹也很好玩,今天小编就带大家用arcmap来实现这一功能,让你的制图动起来。 1、数据准备 在开始制作轨迹动画之前,准备一张影像…...

使用 Docker 搭建 Hadoop 集群

1.1. 启用 WSL 与虚拟机平台 1.1.1. 启用功能 启用 WSL并使用 Moba 连接-CSDN博客 1.2 安装 Docker Desktop 最新版本链接:Docker Desktop: The #1 Containerization Tool for Developers | Docker 指定版本链接:Docker Desktop release notes | Do…...

Bash 中的 2>1 | tee 命令详解

Bash 中的 2>&1 | tee 命令详解 在 Linux 和 Unix 系统中,命令行提供了强大的输出控制功能,能够灵活地处理标准输入(stdin)、标准输出(stdout)和标准错误(stderr)。本文将详…...

hpcrunner

title: 探索 Hpcrunner:高性能计算的得力助手 date: ‘2024-12-31’ category: blog tags: Hpcrunner高性能计算任务调度资源优化 sig: HPC archives: ‘2024-12’ author:way_back summary: Hpcrunner 作为高性能计算领域的一款实用工具,专注于优化任务…...

关于 PPPOE技术的详细解释

PPPoE(以太网点对点协议)是一种网络协议,它通过光纤将点对点协议(PPP)封装以实现宽带接入点。PPPoE主要用于ADSL和光纤等宽带接入技术中,它允许多个用户共享同一个交换机连接,同时为每个用户提供…...

java下载文件流,不生成中间文件。

java下载文件流,不生成中间文件。 代码设计:代码实现 代码设计: 从前端获取的数据经过后端加工后,生成文件流,并返回前端,(不生成中间文件,注意内存,记得关闭流&#xf…...

Android:bug记录(简单)

1、theme 冲突 问题: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.demokotlinapplication/com.example.demokotlinapplication.MainActivity}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (…...

【模块系列】STM321.69TFT屏幕

前言 在翻翻自己的器件盒的时候,发现这块好久之前买的TFT屏了,想起还没有用STM32点亮过,手头上正好有立创的梁山派STM32F4,就试着按照网上的文章教程顺便移植个LVGL看看,然后就有了就本文。 代码工程命名的是LvglDemo&…...

机器学习详解(11):分类任务的模型评估标准

模型评估是利用不同的评估指标来了解机器学习模型的性能,以及其优势和劣势的过程。评估对于确保机器学习模型的可靠性、泛化能力以及在新数据上的准确预测能力至关重要。 文章目录 1 介绍2 评估准则3 分类指标3.1 准确率 (Accuracy)3.2 精确率 (Precision)3.3 召回率…...

UE5材质节点Camera Vector/Reflection Vector

Camera Vector相机向量,输出像素到相机的方向,结果归一化 会随着相机移动而改变 Reflection Vector 反射向量,物体表面法线反射到相机的方向,x和y和camera vector相反 配合hdr使用...

基于Springboot + vue实现的夕阳红公寓管理系统

🥂(❁◡❁)您的点赞👍➕评论📝➕收藏⭐是作者创作的最大动力🤞 💖📕🎉🔥 支持我:点赞👍收藏⭐️留言📝欢迎留言讨论 🔥🔥&…...

ctr方法下载的镜像能用docker save进行保存吗?

ctr 和 docker 是两个不同的容器运行时工具,它们使用的镜像存储格式是兼容的(都是 OCI 标准镜像),但它们的镜像管理方式和存储路径不同。因此,直接使用 docker save 保存 ctr 拉取的镜像可能会遇到问题。 关键点 ctr 和 docker 的镜像存储位置不同: ctr(containerd)的镜…...

详解云桌面3种主流架构

本文简要介绍下云桌面(云电脑)的3种主流架构:VDI、IDV和VOI,概念、原理和区别,欢迎阅读。 云桌面作为桌面办公和云计算融合发展的产物,在一定程度上替代了传统的办公形式。目前阿里云、华为云、移动云、电…...

java实现预览服务器文件,不进行下载,并增加水印效果

通过文件路径获取文件,对不同类型的文件进行不同处理,将Word文件转成pdf文件预览,并早呢更加水印,暂不支持Excel文件,如果浏览器不支持PDF文件预览需要下载插件。文中currentUser.getUserid(),即为增加的水…...

【YOLO 项目实战】(12)红外/可见光多模态目标检测

欢迎关注『youcans动手学模型』系列 本专栏内容和资源同步到 GitHub/youcans 【YOLO 项目实战】(10)YOLO8 环境配置与推理检测 【YOLO 项目实战】(11)YOLO8 数据集与模型训练 【YOLO 项目实战】(12)红外/可…...

csrf跨站请求伪造(portswigger)无防御措施

前言:基础csrf学习(没有任何防御措施) 内容来自portswigger,一个靶场练习,国外的网站,可能需要翻墙 要使 CSRF 攻击成为可能,必须满足三个关键条件: 相关操作。应用程序中存在攻击…...

究极炫酷3D立方体宇宙

演示动画:https://life.mdjsjd.me/2024/12/27/3d-cube-animation/ 一个使用Python和Pygame制作的炫酷3D立方体动画效果。结合了多种视觉特效,包括: 动态旋转的3D立方体炫彩渐变的颜色系统星空背景粒子效果动态残影拖尾效果深度透视投影 主要特性 动态变换: 立方…...

node.js之---集群(Cluster)模块

为什么会有集群(Cluster)模块? 集群(Cluster)模块的作用 如何使用集群(Cluster)模块? 为什么会有集群(Cluster)模块 Node.js 是基于 单线程事件驱动 模型的…...

PTA数据结构作业四

7-10 判断两点之间是否存在路径 本题要求输出两个顶点之间是否存在路径 输入格式: 输入包括两部分,第一部分是邻接矩阵表示方法中对应1的两个顶点,用0 0 表示结束 第二部分是两个顶点,例如 Vi和Vj 输出格式: 如果Vi和Vj存在路径,输出1;否则输出0 输入样例: 0 1 1 0…...

Spring-kafka快速Demo示例

使用Spring-Kafka快速发送/接受Kafka消息示例代码&#xff0c;项目结构是最基础的SpringBoot结构&#xff0c;提前安装好Kafka&#xff0c;确保Kafka已经正确启动 pom.xml&#xff0c;根据个人情况更换springboot、java版本等 <?xml version"1.0" encoding&qu…...

Java开发工具-Jar命令

Java开发工具-Jar 1、jar命令全平台使用 2、jar命令的作用 为类和资源创建存档&#xff0c;并从存档中操作或恢复单个类或资源 3、摘要 jar [OPTION …] [ [–release VERSION] [-C dir] files] … 4、jar命令描述 jar命令通常作为用于压缩与解压的工具&#xff0c;基于ZIP或Z…...

flux文生图模型实践

flux文生图模型实践 flyfish https://github.com/black-forest-labs/flux Black Forest Labs发布FLUX.1 Tools&#xff0c;这是一套模型全家桶&#xff0c;旨在为FLUX.1基础文本转图像模型添加控制和可操纵性&#xff0c;从而实现对真实图像和生成图像的修改和重新创建。FLU…...

Lecture 19

冯诺依曼模型 (The von Neumann Model) 核心概念&#xff1a; 1. 冯诺依曼模型的基本结构&#xff1a; • 该模型描述了现代计算机的基本结构&#xff0c;包含以下关键组件&#xff1a; • 输入设备 (Input device)&#xff1a; • 用于从用户向计算机传递信息&#xff0c;…...

学习EDK2显示图片

原本想看看Logo是怎么显示的&#xff0c;但是发现可以通过EDK显示Logo的方式显示图片&#xff0c;因为我发现它并没有解码函数&#xff0c;就是写个Driver,代码会有点乱&#xff0c;我后面会整理后修改的。 在MdeModulePkg下&#xff0c;我们可以找到Logo此文件夹。 Logo.ibf中…...

MYSQL如何重置root密码

如果您从未为MySQL分配root密码&#xff0c;则服务器根本不需要以root身份连接的密码。但是&#xff0c;这是不安全的。建议一定要设置root密码。 如果您知道root密码并想要更改它&#xff0c;推荐使用ALTER USER user IDENTIFIED BY auth_string; 如果您之前分配了root密码但…...

基于Python实现车辆检测、机动车检测、识别位置标记、计数

目录 引言背景与应用场景车辆检测的研究意义相关工作车辆检测概述机动车检测方法分类基于传统计算机视觉的检测方法基于深度学习的检测方法技术与方法车辆检测技术概述基于Python的车辆检测方法图像处理与特征提取深度学习方法(如YOLO、SSD、Faster R-CNN等)数据集与标注常用…...

277-基于八路256Ksps 24bit AD生物电震动检测FMC子卡

一、板卡概述 板卡基于AD7768 AD芯片设计的八路低速采集的FMC 子卡&#xff0c;支持直流耦合&#xff0c;产品应用于生物电、脑电波、声音&#xff0c;震动等信号采集。 二、板卡参数及性能 板卡功能 参数 内容 ADC 芯片型号 AD7768 路数 8路ADC&#xff0c; 采样率 2…...

连接Milvus

连接到Milvus 验证Milvus服务器正在侦听哪个本地端口。将容器名称替换为您自己的名称。 docker port milvus-standalone 19530/tcp docker port milvus-standalone 2379/tcp docker port milvus-standalone 192.168.1.242:9091/api/v1/health 使用浏览器访问连接地址htt…...

GitHub 上排名前 11 的开源管理后台(Admin Dashboard)项目

如果你是一名开发者&#xff0c;经常处理数据或参与项目管理&#xff0c;那么这篇文章绝对值得收藏&#xff01;当你需要一个高效、易用的管理后台&#xff08;Admin Dashboard&#xff09;项目时&#xff0c;本文会给你灵感。 在现代企业管理和业务运营中&#xff0c;管理后台…...

C++ 实现map容器从大到小排序

map容器默认从小到大排序 利用仿函数可以修改map容器的排序规则为从大到小 示例&#xff1a; #include<iostream> #include<string> #include<map> using namespace std; class MyCompare { public: bool operator()(const int v1, const int v2) co…...

vue项目利用webpack进行优化案例

使用 Webpack 优化 Vue 项目是提升性能和减少打包体积的关键步骤。以下是几个常见的优化案例及其详细实现方法&#xff1a; 1. 优化打包大小 1.1 按需加载 (Lazy Loading) Vue 提供了路由懒加载功能&#xff0c;可以将组件拆分成独立的块&#xff0c;按需加载&#xff0c;从而…...

centos双网卡不能上网

双网卡类型 ens33 仅主机 ens34 NAT 问题 window配置一切正常&#xff0c;虚拟机不能上网 解决 方案1&#xff1a;路由引起 查看路由 route结果如下&#xff1a; [rootdata-repository ~]# route Kernel IP routing table Destination Gateway Genmask …...

十个Scala的小知识

# 1. 与Java的互操作性 Scala与Java有很好的互操作性。可以在Scala项目中直接使用Java类库&#xff0c;也可以将Scala代码编译后供Java项目使用。例如&#xff0c;一个Java框架可以轻松地集成Scala编写的代码模块。 # 2. 强大的集合库 Scala拥有功能丰富的集合库。像List、Se…...

Redis Stream:实时数据处理的高效解决方案

Redis Stream&#xff1a;实时数据处理的高效解决方案 引言 在当今这个数据驱动的时代&#xff0c;实时数据处理对于各种应用场景都至关重要。Redis&#xff0c;作为一个高性能的键值存储系统&#xff0c;自然也紧跟这一趋势&#xff0c;推出了Redis Stream——一种用于处理实…...

Bert中文文本分类

这是一个经典的文本分类问题&#xff0c;使用google的预训练模型BERT中文版bert-base-chinese来做中文文本分类。可以先在Huggingface上下载预训练模型备用。https://huggingface.co/google-bert/bert-base-chinese/tree/main 我使用的训练环境是 pip install torch2.0.0; pi…...

【Rust自学】8.5. HashMap Pt.1:HashMap的定义、创建、合并与访问

8.5.0. 本章内容 第八章主要讲的是Rust中常见的集合。Rust中提供了很多集合类型的数据结构&#xff0c;这些集合可以包含很多值。但是第八章所讲的集合与数组和元组有所不同。 第八章中的集合是存储在堆内存上而非栈内存上的&#xff0c;这也意味着这些集合的数据大小无需在编…...

使用云计算开发App 有哪些坑需要避免

当我们在云计算环境下开发App时&#xff0c;往往会觉得一切都变得“轻松”了。毕竟&#xff0c;云计算提供了无限的计算资源、灵活的存储方案&#xff0c;还有自动化的服务&#xff0c;仿佛有了一个万能的工具箱&#xff0c;啥都能搞定。可是&#xff0c;别被这种“轻松”外表骗…...

arcgis模版空库怎么用(一)

这里以某个项目的数据为例&#xff1a; 可以看到&#xff0c;属性表中全部只有列标题&#xff0c;无数据内容 可能有些人会认为空库是用来往里面加入信息的&#xff0c;其实不是&#xff0c;正确的用法如下&#xff1a; 一、下图是我演示用的数据&#xff0c;我们可以看到其中…...

C#控件开发4—仪表盘

目录 思路&#xff08;GDI绘图&#xff09;1.定义属性2.绘制图形3.最后生成&#xff08;自定义各种监控值显示&#xff09;End 如何让温度、湿度、压力等有量程的监控值如仪表盘&#xff08;DashBoard&#xff09;一样显示&#xff1f; 思路&#xff08;GDI绘图&#xff09; 定…...

基于BiTCN双向时间卷积网络实现电力负荷多元时序预测(PyTorch版)

Bidirectional Temporal Convolutional Network \begin{aligned} &\text{\Large \color{#CDA59E}Bidirectional Temporal Convolutional Network}\\ \end{aligned} ​Bidirectional Temporal Convolutional Network​ Bidirectional Temporal Convolutional Network (BiTC…...

No.2十六届蓝桥杯备战|练习题4道|数据类型|字符型|整型|浮点型|布尔型|signed|unsigned(C++)

B2002 Hello,World! - 洛谷 #include <iostream> using namespace std; int main() { cout << "Hello,World!" << endl; return 0; }打印飞机 #include <iostream> using namespace std;int main() {cout << " …...

前端项目 npm报错解决记录

1.首先尝试解决思路 npm报错就切换yarn &#xff0c; yarn报错就先切换npm删除 node_modules 跟 package-lock.json文件重新下载依 2. 报错信息&#xff1a; Module build failed: Error: Missing binding D:\vue-element-admin\node_modules\node-sass\vendor\win32-x64-8…...

正弦函数解析(sin.rs)

sin.rs文件提供了sin函数的实现&#xff0c;它计算并返回一个浮点数&#xff08;f64类型&#xff09;的正弦值。这个函数首先处理了一些特殊情况&#xff0c;如极小的值、无穷大和NaN&#xff08;非数字&#xff09;&#xff0c;然后使用rem_pio2函数将输入参数x归约到[-π/2, …...