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

Unity Mono和.Net平台浮点算法的区别

        static void TestFloat(){{//float speed=2.0f/20;float speed = 0.1f;float distance = 2.0f;long needTime = (long)(distance / speed);Log.Debug($"needTime={needTime}");
#if UNITY_EDITORif (needTime != 19)
#elseif (needTime != 20)//.Net服务器和安卓手机
#endifLog.Warning("平台浮点算法变了");}}static void TestFixInt(){{FixInt fi2 = 20000;FixInt fi1 = 10000;if (fi1 / fi2 != 0.5f){Log.Warning($"TestFixInt,{fi2}/{fi1} != 0.5");}}{FixInt fi2 = 20000;FixInt fi1 = 10000;if (fi2 / fi1 != 2){Log.Warning($"TestFixInt,{fi2}/{fi1} != 2");}}{const long l = 20000;FixInt fi = new(6000);if (l < fi){Log.Warning($"TestFixInt,{l} < {fi}");}}{FixInt fi3 = new(3);FixInt fi5 = new(5);if (fi3 + 1000 < fi5){Log.Warning($"TestFixInt,{fi3} , {fi5}");}}{const long l = 3000;FixInt fi = l;if (fi.RawLong != l){Log.Warning($"TestFixInt,{fi.RawLong} != {l}");}}}static void TestGetPolygonFormation(){var points = TeamFormationComponentSystem.GetPolygonFormation(new(),new() { x = 230.33540344238281f, y = -0.0000019073486328125f, z = 62.280677795410156f },new() { x = -6.1755828857421875f, y = -0.045724689960479736f, z = 9.5355415344238281f },4,2);List<float3> list = new(){new(){x = 230.429f, y = 0.0f, z = 62.135f },new(){ x = 233.077f, y = 0.0f, z = 60.689f },new(){ x = 233.317f, y = 0.0f, z = 57.679f },new(){ x = 230.669f, y = 0.0f, z = 59.125f },};if (points.Count != list.Count){Log.Warning($"TestGetPolygonFormation,{points} != {list}");}for (int i = 0; i <points.Count; ++i){var cal = points[i];var want = list[i];if (!cal.Equals(want)){Log.Warning($"TestGetPolygonFormation,{cal} != {want}");}}}static void TestGetPointOnEllipse(){var radius = 2.82842707633972f;var intervalAngle = 90;var radian = -32.9286422729492f + (intervalAngle * 3);var dChangZhouAngle = -45f;var xShaft = 0.5f * radius;var yShaft = 1f * radius;var ptCenter = new float2(231.872909545898f, 59.9066619873047f);var cal = VectorHelper.GetPointOnEllipse(ptCenter,xShaft,yShaft,radian,dChangZhouAngle); //算出旋转后的向量float3 want = new() { x = 230.669f, y = 0.0f, z = 59.125f };if (!cal.Equals(want)){Log.Warning($"TestGetPointOnEllipse,{cal} != {want}");}}static void TestMath(){var radius = 2.82842707633972f;var intervalAngle = 90;var radian = -32.9286422729492f + (intervalAngle * 3);var dChangZhouAngle = -45f;var xShaft = 0.5f * radius;var yShaft = 1f * radius;var ptCenter = new float2(231.872909545898f, 59.9066619873047f);radian -= dChangZhouAngle;dChangZhouAngle *= VectorHelper.Mathf.Deg2Rad;radian *= VectorHelper.Mathf.Deg2Rad;float dLiXin = math.atan2(yShaft * math.sin(radian), xShaft * math.cos(radian)); //离心角if (dLiXin != -1.46427190303802f){Log.Warning($"TestMath,{dLiXin} ");}if (yShaft != 2.8284270763397221f){Log.Warning($"TestMath,{yShaft} ");}if (dLiXin != -1.4642719030380249f){Log.Warning($"TestMath,{dLiXin} ");}if (dChangZhouAngle != -0.78539818525314298f){Log.Warning($"TestMath,{dChangZhouAngle} ");}if (xShaft != 1.4142135381698611f){Log.Warning($"TestMath,{xShaft} ");}var cosLiXin = math.cos(dLiXin);var sinChangZhouAngle = math.sin(dChangZhouAngle);var sinLiXin = math.sin(dLiXin);var cosChangZhouAngle = math.cos(dChangZhouAngle);if (cosLiXin != 0.10632307827472701f){Log.Warning($"TestMath,{xShaft} ");}if (sinChangZhouAngle != -0.70710676908492998f){Log.Warning($"TestMath,{xShaft} ");}if (sinLiXin != -0.99433165788650502f){Log.Warning($"TestMath,{xShaft} ");}if (cosChangZhouAngle != 0.70710676908492998f){Log.Warning($"TestMath,{xShaft} ");}var x = yShaft * cosLiXin * sinChangZhouAngle + xShaft * sinLiXin * cosChangZhouAngle + ptCenter.x;
#if UNITY_EDITORif (x != 230.665939331055f)
#elseif (x != 230.66592407226563f)
#endif{Log.Warning($"平台浮点加法或乘法算法变了,{x} ");}float y = yShaft * math.cos(dLiXin) * math.cos(dChangZhouAngle) - xShaft * math.sin(dLiXin) * math.sin(dChangZhouAngle) + ptCenter.y;}

结论
.Net和安卓手机IL2CPP算法相同
Windows下Unity的Mono算法不同,就它不同

相关文章:

Unity Mono和.Net平台浮点算法的区别

static void TestFloat(){{//float speed2.0f/20;float speed 0.1f;float distance 2.0f;long needTime (long)(distance / speed);Log.Debug($"needTime{needTime}"); #if UNITY_EDITORif (needTime ! 19) #elseif (needTime ! 20)//.Net服务器和安卓手机 #endif…...

【SA8295P 源码分析 (二)】64 - QNX 与 Android GVM 显示 Dump 图片方法汇总

【SA8295P 源码分析】64 - QNX 与 Android GVM 显示 Dump 图片方法汇总 一、QNX侧1.1 surfacedump 功能1.2 screenshot 功能二、Android GVM 侧2.1 screencap -p 导出 PNG 图片2.2 screencap 不加 -p 参数,导出 RGB32 图片2.3 dumpsys SurfaceFlinger --display-id 方法系列文…...

shell命令以及运行原理和lLinux权限

shell命令以及运行原理 什么是shell shell是操作系统的外壳程序统称&#xff0c;我们是通过shell去和操作系统沟通的。 从技术角度&#xff0c;shell最简单的定义就是命令行解释器&#xff0c;主要包含两个功能&#xff1a; 将使用者的命令翻译给核心处理 将核心的处理结果…...

斯坦福JSKarel编程机器人使用介绍

斯坦福JSKarel编程机器人使用介绍 为了避免被编程语言固有的复杂性所困扰&#xff0c;有一个被称为卡雷尔&#xff08;Karel&#xff09;机器人的微型世界&#xff08;microworld&#xff09;的简化环境&#xff0c;可以让编程初学者从中学习理解编程的基本概念&#xff0c;而…...

SpringBoot中pom.xml不引入依赖, 怎么使用parent父项目的依赖

在Spring Boot项目中&#xff0c;如果你想使用父项目的依赖&#xff0c;而不想在pom.xml中显式引入依赖&#xff0c;你可以使用Maven的继承机制。 首先&#xff0c;确保你的Spring Boot项目是一个子项目&#xff0c;即它继承自一个父项目。要实现这一点&#xff0c;在pom.xml文…...

基于vue3+ts5+vue-router4+pinia2的PC端项目搭建教程

导语&#xff1a;在日常开发中&#xff0c;有时候会在项目中引入 ts 来解决一些 js 的问题&#xff0c;下面就简单介绍一下如何使用 vue3tsrouterpinia 来搭建一个项目。 目录 简介创建安装配置实战 简介 vue3 目前是常用的 vue 版本&#xff0c;提供了组合式 API 以及一些新…...

6个无版权、免费、高清图片素材库

找免费无版权图片素材&#xff0c;就上这6个网站&#xff0c;超高质量&#xff0c;可商用&#xff0c;赶紧收藏&#xff01; 1、菜鸟图库 https://www.sucai999.com/pic.html?vNTYwNDUx 网站主要为新手设计师提供免费素材&#xff0c;这些素材的质量都很高&#xff0c;类别也…...

什么是响应式设计?响应式设计的基本原理是什么?如何兼容低版本的 IE?

什么是响应式设计: 响应式设计&#xff08;Responsive Design&#xff09;是一种Web设计和开发方法&#xff0c;旨在使网站在不同设备和屏幕尺寸上都能提供一致的用户体验。响应式设计的目标是适应多种终端&#xff0c;包括桌面计算机、笔记本电脑、平板电脑和移动设备&#x…...

LeetCode 2906. 构造乘积矩阵【前后缀分解,数组】中等

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…...

vue3+koa+axios实现前后端通信

vue3koaaxios实现前后端通信 写了一个小demo来实现前后端通信,涉及跨域问题&#xff0c;非常简单可以给大家平时开发的时候参考 服务端&#xff1a; 目录结构如下&#xff1a; router index.js // router的入口文件 // 引入路由 const Router require("koa-router&quo…...

Required MultipartFile parameter ‘file‘ is not present

出现这个原因我们首先想到的是加一个RequestParam("file")&#xff0c;但是还有可能的原因是因为我们的名字有错误 <span class"input-group-addon must">模板上传 </span> <input id"uploadFileUpdate" name"importFileU…...

vue3后台管理系统之layout组件的搭建

1.1静态布局 <template><div class"layout_container"><!-- 左侧导航 --><div class"layout_slider"></div><!-- 顶部导航 --><div class"layout_tabbar"></div><!-- 内容展示区 --><…...

Minio 文件上传(后端处理同文件判断,同一文件秒传)

记录minio 文件上传 MinIO提供多个语言版本SDK的支持&#xff0c;下边找到java版本的文档&#xff1a; 地址&#xff1a;https://docs.min.io/docs/java-client-quickstart-guide.html maven依赖如下&#xff1a; XML <dependency><groupId>io.minio</groupId…...

模拟IIC通讯协议(stm32)(硬件iic后面在补)

一、IIC基础知识总结。 1、IIC通讯需要两条线就可以&#xff0c;SCL、SDA。 2、IIC的数据传输的速率&#xff0c;不同的ic是不同的&#xff0c;根据电平维持的延时函数的时间来确定IIC数据传输的速率. 3、IIC的延时函数可以使用延时函数&#xff0c;延时函数一般使用系统滴答时…...

使用注解读取properties配置文件

文章目录 1、背景2、注解方式2.1 PropertySource 、 ConfigurationProperties2.2 读取properties中全部字段值ConfigurationProperties2.3 读取properties中部分字段值&#xff1a;value("${自定义key}") 1、背景 服务中使用到了redis&#xff0c;需要配置redis连接…...

Python---练习:求世界杯小组赛的总成绩(涉及:布尔类型转换为整型)

案例 世界杯案例 需求&#xff1a; 世界杯案例&#xff0c;世界杯小组赛的比赛规则是我们的球队与其他三支球队进行比赛&#xff0c;然后根据总成绩(积分)确定出线资格。小组赛球队实力已知(提示用户输入各球队实力&#xff09;&#xff0c;我们通过一个数字表示。如果我们赢…...

vue3学习源码笔记(小白入门系列)------KeepAlive 原理

目录 说明组件是如何被缓存的&#xff0c;什么时候被激活对于KeepAlive 中组件 如何完成激活的对于KeepAlive 中组件 如何完成休眠的 总结 说明 Vue 内置了 KeepAlive 组件&#xff0c;实现缓存多个组件实例切换时&#xff0c;完成对卸载组件实例的缓存&#xff0c;从而使得组…...

边写代码边学习之mlflow

1. 简介 MLflow 是一个多功能、可扩展的开源平台&#xff0c;用于管理整个机器学习生命周期的工作流程和工件。 它与许多流行的 ML 库内置集成&#xff0c;但可以与任何库、算法或部署工具一起使用。 它被设计为可扩展的&#xff0c;因此您可以编写插件来支持新的工作流程、库和…...

基于吉萨金字塔建造优化的BP神经网络(分类应用) - 附代码

基于吉萨金字塔建造优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于吉萨金字塔建造优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.吉萨金字塔建造优化BP神经网络3.1 BP神经网络参数设置3.2 吉萨金字…...

axios的post请求所有传参方式

Axios支持多种方式来传递参数给POST请求。以下是一些常见的方式&#xff1a; 作为请求体&#xff1a; 你可以将参数作为请求体的一部分&#xff0c;通常用于发送表单数据或JSON数据。例如&#xff1a; const data { key1: value1, key2: value2 }; axios.post(/api/endpoint, …...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...

R 语言科研绘图第 55 期 --- 网络图-聚类

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

深入理解Optional:处理空指针异常

1. 使用Optional处理可能为空的集合 在Java开发中&#xff0c;集合判空是一个常见但容易出错的场景。传统方式虽然可行&#xff0c;但存在一些潜在问题&#xff1a; // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)

目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 &#xff08;1&#xff09;输入单引号 &#xff08;2&#xff09;万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...

Qt 事件处理中 return 的深入解析

Qt 事件处理中 return 的深入解析 在 Qt 事件处理中&#xff0c;return 语句的使用是另一个关键概念&#xff0c;它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别&#xff1a;不同层级的事件处理 方…...

前端中slice和splic的区别

1. slice slice 用于从数组中提取一部分元素&#xff0c;返回一个新的数组。 特点&#xff1a; 不修改原数组&#xff1a;slice 不会改变原数组&#xff0c;而是返回一个新的数组。提取数组的部分&#xff1a;slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...