kamailio-ACC模块介绍【kamailio6.0. X】
Acc 模块
作者
Jiri Kuthan
iptel.org
jiri@iptel.org
Bogdan-Andrei Iancu
Voice Sistem SRL
bogdan@voice-system.ro
Ramona-Elena Modroiu
rosdev.ro
ramona@rosdev.ro
编辑
Bogdan-Andrei Iancu
Voice Sistem SRL
bogdan@voice-system.ro
Sven Knoblich
1&1 Internet AG
sven.knoblich@1und1.de
版权
© 2002, 2003 FhG FOKUS
© 2004, 2006 Voice Sistem SRL
© 2011 1&1 Internet AG
目录
- 管理员指南
- 概述
1.1 通用示例 - 额外计费
2.1 概述
2.2 定义与语法
2.3 工作原理 - 多呼叫腿计费
3.1 概述
3.2 配置
3.3 记录的数据 - 呼叫数据记录生成
4.1 概述
4.2 CDR 额外信息
4.2.1 定义与语法
4.3 多呼叫腿的 CDR
4.3.1 概述
4.3.2 配置
4.3.2.1 螺旋代理示例
4.3.3 记录的数据 - 依赖
5.1 Kamailio 模块
5.2 外部库或应用程序 - 参数
6.1 early_media (整数)
6.2 failed_transaction_flag (整数)
6.3 failed_filter (字符串)
6.4 report_ack (整数)
6.5 report_cancels (整数)
6.6 detect_direction (整数)
6.7 acc_prepare_flag (整数)
6.8 acc_prepare_always (整数)
6.9 acc_extra_nullable (整数)
6.10 multi_leg_info (字符串)
6.11 log_flag (整数)
6.12 log_missed_flag (整数)
6.13 log_level (整数)
6.14 log_facility (字符串)
6.15 log_extra (字符串)
6.16 db_flag (整数)
6.17 db_missed_flag (整数)
6.18 db_table_acc (字符串)
6.19 db_table_missed_calls (字符串)
6.20 db_url (字符串)
6.21 acc_method_column (字符串)
6.22 acc_from_tag_column (字符串)
6.23 acc_to_tag_column (字符串)
6.24 acc_callid_column (字符串)
6.25 acc_sip_code_column (字符串)
6.26 acc_sip_reason_column (字符串)
6.27 acc_time_column (字符串)
6.28 db_extra (字符串)
6.29 db_insert_mode (整数)
6.30 cdr_enable (整数)
6.31 cdr_skip (字符串)
6.32 cdr_expired_dlg_enable (整数)
6.33 cdr_start_on_confirmed (整数)
6.34 cdr_facility (整数)
6.35 cdr_extra (字符串)
6.36 cdr_extra_nullable (整数)
6.37 cdr_start_id (字符串)
6.38 cdr_end_id (字符串)
6.39 cdr_duration_id (字符串)
6.40 cdr_log_enable (整数)
6.41 cdrs_table (字符串)
6.42 time_mode (整数)
6.43 time_attr (字符串)
6.44 time_exten (字符串)
6.45 time_format (字符串)
6.46 reason_from_hf (整数)
6.47 clone_msg (整数)
6.48 cdr_on_failed (整数)
6.49 acc_extra_size (整数)
6.50 cdr_extra_size (整数) - 函数
7.1 acc_log_request(comment)
7.2 acc_db_request(comment, table)
7.3 acc_request(comment, table)
- 概述
- 常见问题
1. 概述
ACC 模块用于将事务信息记录到不同的后端,如 syslog 和 SQL。通过单独的模块 acc_radius
可以启用对 RADIUS 的支持。
acc_diameter
模块中提供了对 Diameter 协议的早期支持,但未与当前 Diameter 协议保持同步。如果需要 Diameter 支持,请使用 ims_charging
模块。
要为事务计费并选择使用哪一组后端,脚本编写者只需设置一些标志(参见模块参数部分的标志定义)。如果为特定后端设置了计费标志,ACC 模块将在事务完成时报告。模块的典型用法不需要特定的脚本命令——功能通过事务处理隐式绑定。脚本编写者只需使用适当的 setflag
标记事务以进行计费。即使如此,模块仍允许脚本编写者通过某些脚本函数在特殊情况下强制计费。
默认情况下,计费模块会记录事务的一组固定属性。如果要通过添加更多信息来自定义计费,请参阅下一章关于额外计费的内容。
固定的最小计费信息包括:
- 请求方法名称
- From 头的 TAG 参数
- To 头的 TAG 参数
- Call-Id
- 最终回复的 3 位状态码
- 最终回复的原因短语
- 事务完成时的时间戳
如果请求中不存在某个值,则记录为空字符串。
注意:
- 单个 INVITE 可能会生成多个计费报告——这是由于 SIP 的分叉特性。
- 所有与计费相关的标志都需要在请求处理路由中设置——只有“missed-call”标志可以从其他类型的路由中切换。
- 如果 UA 在通话中途失败,代理将永远不会发现。通常,更好的做法是从终端设备(如 PSTN 网关)进行计费,因为它最了解呼叫状态(包括媒体状态和 PSTN 状态)。然而,基于 CDR 的日志记录可以选择记录来自过期对话的现有信息(
cdr_extra
中的dlg_vars
)。请参阅cdr_expired_dlg_enable
参数。
SQL 后端支持已编译到模块中。
1.1 通用示例
loadmodule "modules/acc/acc.so"
modparam("acc", "log_level", 1)
modparam("acc", "log_flag", 1)if (uri=~"sip:+40") { /* 呼叫罗马尼亚 */if (!proxy_authorize("sip_domain.net", "subscriber")) {proxy_challenge("sip_domain.net", "0");exit;}if (method=="INVITE" && !check_from()) {log("from!=digest\n");sl_send_reply("403","Forbidden");}setflag(1); /* 设置计费标志 */t_relay(); /* 进入有状态模式 */
};
2. 额外计费
2.1 概述
除了静态的默认信息外,ACC 模块还允许动态选择要记录的额外信息。这允许您记录任何伪变量(AVP、请求的部分等)。
2.2 定义与语法
通过 xxx_extra
参数选择额外信息,指定要记录的附加信息的名称。这些信息通过伪变量定义,可能包括头、AVP 值或其他消息或系统值。参数语法为:
xxx_extra = extra_definition (';'extra_definition)*
extra_definition = log_name '=' pseudo_variable
支持的伪变量列表可在 Kamailio 文档 中找到。
2.3 工作原理
某些伪变量可能返回多个值(如头或 AVP)。在这种情况下,返回的值将以逗号分隔的格式嵌入单个字符串中。
3. 多呼叫腿计费
3.1 概述
由于转发操作,SIP 呼叫可能具有多个腿。例如,用户 A 呼叫用户 B,用户 B 将呼叫转发给用户 C。只有一个 SIP 呼叫,但有两条腿(A 到 B 和 B 到 C)。记录呼叫腿对于正确计费是必要的。
3.2 配置
通过一组 AVP 为每个呼叫腿存储一组值。脚本编写者必须确保正确插入这些 AVP。
3.3 记录的数据
对于每个呼叫,所有 AVP 集的值将被记录。记录方式取决于数据后端:
- syslog:所有腿集将作为一个记录字符串添加。
- 数据库:每个腿集将单独记录。
- RADIUS:所有腿集将添加到同一 RADIUS 计费消息中。
4. 呼叫数据记录生成
4.1 概述
除了基于事务的日志记录外,还可以直接从 Kamailio 生成和记录呼叫数据记录(CDR)。CDR 记录依赖于对话框模块。
4.2 CDR 额外信息
类似于事务额外信息,CDR 额外信息通过 cdr_extra
参数定义。
4.3 多呼叫腿的 CDR
与普通计费不同,CDR 日志记录使用对话框而不是事务来记录数据。
5. 依赖
5.1 Kamailio 模块
该模块依赖于以下模块:
- tm:事务管理器
- 数据库模块:如果使用 SQL 支持
- rr:记录路由,如果启用了
detect_direction
参数 - dialog:对话框,如果启用了
cdr_enable
参数
5.2 外部库或应用程序
无。
6. 参数
6.1 early_media (整数)
是否应记录早期媒体(任何带有正文的临时回复)?
默认值为 0(否)。
6.2 failed_transaction_flag (整数)
事务失败时(SIP 状态码 >= 300)是否应记录事务的标志。
默认值为未设置(无标志)。
6.3 failed_filter (字符串)
失败响应代码的字符串(300 到 999),用逗号分隔。即使设置了 failed_transaction_flag
,如果响应代码在列表中,失败事务也不会被记录。
默认值为未设置(无过滤)。
6.4 report_ack (整数)
是否尝试记录端到端的 ACK?
默认值为 0(否)。
6.5 report_cancels (整数)
是否显式记录 CANCEL 事务?
默认值为 0(否)。
6.6 detect_direction (整数)
控制顺序请求的方向检测。
默认值为 0(禁用)。
6.7 acc_prepare_flag (整数)
事务标志,指示是否可以在稍后计费。
默认值为未设置(无标志)。
6.8 acc_prepare_always (整数)
是否始终准备所有请求以标记事务稍后计费。
默认值为未设置。
6.9 acc_extra_nullable (整数)
如果设置为 1,数据库额外字段在未定义或为 $null
时设置为 NULL。
默认值为 0。
6.10 multi_leg_info (字符串)
定义用于每条呼叫腿计费的 AVP 集。
默认值为 0(禁用)。
6.11 log_flag (整数)
请求标志,用于通过 syslog 记录事务。
默认值为未设置(无标志)。
6.12 log_missed_flag (整数)
请求标志,用于通过 syslog 记录未接呼叫。
默认值为未设置(无标志)。
6.13 log_level (整数)
记录计费消息的日志级别。
默认值为 1(L_NOTICE)。
6.14 log_facility (字符串)
记录计费消息的日志设施。
默认值为 LOG_DAEMON。
6.15 log_extra (字符串)
要记录的额外值。
默认值为 NULL。
6.16 db_flag (整数)
请求标志,用于通过数据库记录事务。
默认值为未设置(无标志)。
6.17 db_missed_flag (整数)
请求标志,用于通过数据库记录未接呼叫。
默认值为未设置(无标志)。
6.18 db_table_acc (字符串)
成功呼叫的计费表名。
默认值为 “acc”。
6.19 db_table_missed_calls (字符串)
未接呼叫的计费表名。
默认值为 “missed_calls”。
6.20 db_url (字符串)
SQL 地址。
默认值为 NULL(SQL 禁用)。
6.21 acc_method_column (字符串)
存储请求方法名称的列名。
默认值为 “method”。
6.22 acc_from_tag_column (字符串)
存储 From 头 TAG 参数的列名。
默认值为 “from_tag”。
6.23 acc_to_tag_column (字符串)
存储 To 头 TAG 参数的列名。
默认值为 “to_tag”。
6.24 acc_callid_column (字符串)
存储 Callid 值的列名。
默认值为 “callid”。
6.25 acc_sip_code_column (字符串)
存储最终回复状态码的列名。
默认值为 “sip_code”。
6.26 acc_sip_reason_column (字符串)
存储最终回复原因短语的列名。
默认值为 “sip_reason”。
6.27 acc_time_column (字符串)
存储事务完成时间戳的列名。
默认值为 “time”。
6.28 db_extra (字符串)
要记录到数据库的额外值。
默认值为 NULL。
6.29 db_insert_mode (整数)
如果设置为 1,使用 INSERT DELAYED 添加记录。
默认值为 0。
6.30 cdr_enable (整数)
启用 CDR 报告。
默认值为 0(禁用)。
6.31 cdr_skip (字符串)
跳过具有此 dlg_var
设置的对话框的 CDR 生成。
默认值为 NULL。
6.32 cdr_expired_dlg_enable (整数)
是否在对话框过期时启用 CDR 日志记录?
默认值为 0(禁用)。
6.33 cdr_start_on_confirmed (整数)
是否从对话框确认时开始计时?
默认值为 0(从对话框创建时开始)。
6.34 cdr_facility (整数)
CDR 消息的日志设施。
默认值为 LOG_DAEMON。
6.35 cdr_extra (字符串)
定义自定义 CDR 字段的伪变量集。
默认值为 NULL。
6.36 cdr_extra_nullable (整数)
自定义 CDR 字段是否可以为 NULL?
默认值为 0。
6.37 cdr_start_id (字符串)
修改用于存储开始时间的 ID。
默认值为 “start_time”。
6.38 cdr_end_id (字符串)
修改用于存储结束时间的 ID。
默认值为 “end_time”。
6.39 cdr_duration_id (字符串)
修改用于存储持续时间的 ID。
默认值为 “duration”。
6.40 cdr_log_enable (整数)
控制是否将 CDR 记录写入 syslog。
默认值为 1(启用)。
6.41 cdrs_table (字符串)
存储对话框 CDR 的数据库表名。
默认值为 “”(无数据库存储)。
6.42 time_mode (整数)
存储与事件时间相关的额外值。
默认值为 0。
6.43 time_attr (字符串)
存储事件时间的 syslog 属性或数据库列名。
默认值为未设置。
6.44 time_exten (字符串)
存储事件时间的扩展值的 syslog 属性或数据库列名。
默认值为未设置。
6.45 time_format (字符串)
指定时间格式。
默认值为 “%Y-%m-%d %H:%M:%S”。
6.46 reason_from_hf (整数)
从何处获取 sip_reason。
默认值为 0(从状态行获取)。
6.47 clone_msg (整数)
是否克隆请求结构以避免并发访问。
默认值为 1。
6.48 cdr_on_failed (整数)
是否存储失败对话框的 CDR?
默认值为 1。
6.49 acc_extra_size (整数)
设置计费记录中额外属性的最大数量。
默认值为 64。
6.50 cdr_extra_size (整数)
设置 CDR 中额外属性的最大数量。
默认值为 64。
7. 函数
7.1 acc_log_request(comment)
报告请求,例如用于报告未接呼叫。
参数:
- comment:要附加的注释,可以包含伪变量。
7.2 acc_db_request(comment, table)
将请求报告发送到数据库。
参数:
- comment:要附加的注释,可以包含伪变量。
- table:要使用的数据库表。
7.3 acc_request(comment, table)
将计费记录写入 LOG 和 DATABASE 后端。
参数:
- comment:用于生成 SIP 响应代码和文本字段的注释。
- table:要使用的数据库表。
2. 常见问题
2.1 旧的 log_fmt 参数发生了什么?
该参数已被废弃,由额外计费功能取代。
2.2 旧的 multi_leg_enabled 参数发生了什么?
该参数已被 multi_leg_info
参数取代。
2.3 旧的 src_leg_avp_id 和 dst_leg_avp_id 参数发生了什么?
这些参数已被 multi_leg_info
参数取代。
2.4 在哪里可以找到更多关于 Kamailio 的信息?
请访问 Kamailio 官方网站。
2.5 在哪里可以发布关于此模块的问题?
请查看我们的邮件列表:
- 用户邮件列表:[sr-users@lists.kamailio.org](https://lists.kamailio.org/mailman3/postorius
相关文章:
kamailio-ACC模块介绍【kamailio6.0. X】
Acc 模块 作者 Jiri Kuthan iptel.org jiriiptel.org Bogdan-Andrei Iancu Voice Sistem SRL bogdanvoice-system.ro Ramona-Elena Modroiu rosdev.ro ramonarosdev.ro 编辑 Bogdan-Andrei Iancu Voice Sistem SRL bogdanvoice-system.ro Sven Knoblich 1&1 Internet …...
数据库对象
数据库对象 数据库对象是构成数据库结构的基本单位,它们定义了数据库存储的数据类型、数据的组织方式以及数据之间的关系。在数据库中,对象可以包括表,视图,索引,触发器,存储过程,函数等多种类…...
EtherCAT主站IGH-- 27 -- IGH之globals.h文件解析
EtherCAT主站IGH-- 27 -- IGH之globals.h文件解析 0 预览一 该文件功能宏定义数据结构打印宏三 h文件翻译四 c文件翻译该文档修改记录:总结0 预览 一 该文件功能 该文件包含了一些全局定义和宏,用于 IgH EtherCAT 主站(EtherCAT Master)的实现。包括了一些超时设定、宏定义…...

2025多目标优化创新路径汇总
多目标优化是当下非常热门且有前景的方向!作为AI领域的核心技术之一,其专注于解决多个相互冲突的目标的协同优化问题,核心理念是寻找一组“不完美但均衡”的“帕累托最优解”。在实际中,几乎处处都有它的身影。 但随着需求场景的…...

15JavaWeb——Maven高级篇
Maven高级 Web开发讲解完毕之后,我们再来学习Maven高级。其实在前面的课程当中,我们已经学习了Maven。 我们讲到 Maven 是一款构建和管理 Java 项目的工具。经过前面 10 多天 web 开发的学习,相信大家对于 Maven 这款工具的基本使用应该没什…...

使用Ollama本地化部署DeepSeek
1、Ollama 简介 Ollama 是一个开源的本地化大模型部署工具,旨在简化大型语言模型(LLM)的安装、运行和管理。它支持多种模型架构,并提供与 OpenAI 兼容的 API 接口,适合开发者和企业快速搭建私有化 AI 服务。 Ollama …...

蓝桥杯刷题DAY1:前缀和
所谓刷题,讲究的就是细心 帕鲁服务器崩坏【算法赛】 “那个帕鲁我已经观察你很久了,我对你是有些失望的,进了这个营地,不是把事情做好就可以的,你需要有体系化思考的能力。” 《幻兽帕鲁》火遍全网,成为…...

【基于SprintBoot+Mybatis+Mysql】电脑商城项目之用户注册
🧸安清h:个人主页 🎥个人专栏:【计算机网络】【Mybatis篇】 🚦作者简介:一个有趣爱睡觉的intp,期待和更多人分享自己所学知识的真诚大学生。 目录 🎯项目基本介绍 🚦项…...

MINIRAG: TOWARDS EXTREMELY SIMPLE RETRIEVAL-AUGMENTED GENERATION论文翻译
感谢阅读 注意不含评估以后的翻译原论文地址标题以及摘要介绍部分MiniRAG 框架2.1 HETEROGENEOUS GRAPH INDEXING WITH SMALL LANGUAGE MODELS2.2 LIGHTWEIGHT GRAPH-BASED KNOWLEDGE RETRIEVAL2.2.1 QUERY SEMANTIC MAPPING2.2.2 TOPOLOGY-ENHANCED GRAPH RETRIEVAL 注意不含评…...

微服务入门(go)
微服务入门(go) 和单体服务对比:里面的服务仅仅用于某个特定的业务 一、领域驱动设计(DDD) 基本概念 领域和子域 领域:有范围的界限(边界) 子域:划分的小范围 核心域…...

Baklib揭示内容中台实施最佳实践的策略与实战经验
内容概要 在当前数字化转型的浪潮中,内容中台的概念日益受到关注。它不再仅仅是一个内容管理系统,而是企业提升运营效率与灵活应对市场变化的重要支撑平台。内容中台的实施离不开最佳实践的指导,这些实践为企业在建设高效内容中台时提供了宝…...
C++11新特性之lambda表达式
1.介绍 C11引入了lambda表达式。lambda表达式提供一种简洁的方式来定义匿名函数对象,使得在需要临时定义一个函数时非常方便。 2.lambda表达式用法 lambda表达式的基本用法为: [捕获列表](参数列表)->返回类型 { 函数体 …...

洛谷 P10289 [GESP样题 八级] 小杨的旅游 C++ 完整题解
一、题目链接 P10289 [GESP样题 八级] 小杨的旅游 - 洛谷 二、题目大意 n个节点之间有n - 1条边,其中k个节点是传送门,任意两个传送门之间可以 以0单位地时间相互到达。问从u到v至少需要多少时间? 三、解题思路 输入不必多讲。 cin >> …...

使用 Tauri 2 + Next.js 开发跨平台桌面应用实践:Singbox GUI 实践
Singbox GUI 实践 最近用 Tauri Next.js 做了个项目 - Singbox GUI,是个给 sing-box 用的图形界面工具。支持 Windows、Linux 和 macOS。作为第一次接触这两个框架的新手,感觉收获还蛮多的,今天来分享下开发过程中的一些经验~ 为啥要做这个…...
JWT入门
一、初识JWT:新时代的身份认证方案 在分布式系统成为主流的今天,传统的Session认证方式逐渐显露出局限性。JWT(JSON Web Token)作为现代Web开发的认证新标准,凭借其无状态、跨域友好和安全性等特性,正在成为…...

Python - Quantstats量化投资策略绩效统计包 - 详解
使用Quantstats包做量化投资绩效统计的时候因为Pandas、Quantstats版本不匹配踩了一些坑;另外,Quantstats中的绩效统计指标非常全面,因此详细记录一下BUG修复方法、使用说明以及部分指标的内涵示意。 一、Quantstats安装及版本匹配问题 可以…...

智慧园区管理系统推动企业智能运维与资源优化的全新路径分析
内容概要 在当今快速发展的商业环境中,园区管理的数字化转型显得尤为重要。在这个背景下,快鲸智慧园区管理系统应运而生,成为企业实现高效管理的最佳选择。它通过整合互联网、物联网等先进技术,以智能化的方式解决了传统管理模式…...
【数据结构-字典树】力扣14. 最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 “”。 示例 1: 输入:strs [“flower”,“flow”,“flight”] 输出:“fl” 示例 2: 输入:strs [“dog”,“racecar…...
《深入浅出HTTPS》读书笔记(31):HTTPS和TLS/SSL
《深入浅出HTTPS》读书笔记(31):HTTPS和TLS/SSL TLS/SSL协议和应用层协议无关,它只是加密应用层协议(比如HTTP)并传递给下层的TCP。 HTTP和TLS/SSL协议组合在一起就是HTTPS, HTTPS等…...

Go学习:Go语言中if、switch、for语句与其他编程语言中相应语句的格式区别
Go语言中的流程控制语句逻辑结构与其他编程语言类似,格式有些不同。Go语言的流程控制中,包括if、switch、for、range、goto等语句,没有while循环。 目录 1. if 语句 2. switch语句 3. for语句 4. range语句 5. goto语句(不常用…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...

以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...

R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...

Unity中的transform.up
2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...