MyTool_Static.EulerAngleConversion欧拉角,角度转换计算

本文介绍了一系列欧拉角和角度转换的实用方法,包括自轴旋转欧拉角计算、向量转换为欧拉角、不同范围欧拉角与角度的相互转换等。适用于游戏开发、3D建模等领域,帮助开发者解决坐标系旋转和角度标准化问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

static public class EulerAngleConversion {...}

目录

1.AxisRotation_EulerAngles 自轴旋转欧拉角计算

2.Vector3ToEulerAngles 向量转换为欧拉角

3.EulerAngles_PN_To_PN180 欧拉角转换:正负无限 转换成 正负0~180 的欧拉角

4.EulerAngles_PN_To_P360 欧拉角转换:正负无限 转换成 正0~360 的欧拉角

5.EulerAngles_P360_To_PN180 欧拉角转换:正0~360 转换成 正负0~180 的欧拉角

6.Angle_PN_To_PN180 角度转换:正负无限 转换成 正负0~180 的角度

7.Angle_PN_To_P360 角度转换:正负无限 转换成 正0~360 的角度

8.Angle_P360_To_PN180 角度转换:正0~360 转换成 正负0~180 的角度


1.AxisRotation_EulerAngles 自轴旋转欧拉角计算

/// <summary>
/// 自轴旋转欧拉角计算
/// </summary>
/// <param name="OriginEulerAngle">当前物体欧拉角(transform.eulerAngles)</param>
/// <param name="direction">旋转轴向量及角度大小(Vector3.up)</param>
/// <returns>return : 自转后的欧拉角</returns>
static public Vector3 AxisRotation_EulerAngles(Vector3 OriginEulerAngle,Vector3 direction){
	return (Quaternion.Euler(OriginEulerAngle) * Quaternion.Euler(direction)).eulerAngles;
}

2.Vector3ToEulerAngles 向量转换为欧拉角

/// <summary>
/// 向量转换为欧拉角
/// </summary>
/// <param name="AngleVector3">指向向量</param>
/// <returns>return : 欧拉角</returns>
static public Vector3 Vector3ToEulerAngles(Vector3 AngleVector3){
	return Quaternion.LookRotation(AngleVector3).eulerAngles;
}

3.EulerAngles_PN_To_PN180 欧拉角转换:正负无限 转换成 正负0~180 的欧拉角

/// <summary>
/// 欧拉角转换:正负无限 转换成 正负0~180 的欧拉角
/// </summary>
/// <param name="EulerAngles">要转换的欧拉角</param>
/// <returns>return : 转换成 正负0~180 的欧拉角</returns>
static public Vector3 EulerAngles_PN_To_PN180(Vector3 EulerAngles){
	EulerAngles.x = Angle_PN_To_PN180(EulerAngles.x);
	EulerAngles.y = Angle_PN_To_PN180(EulerAngles.y);
	EulerAngles.z = Angle_PN_To_PN180(EulerAngles.z);
	return EulerAngles;
}

4.EulerAngles_PN_To_P360 欧拉角转换:正负无限 转换成 正0~360 的欧拉角

/// <summary>
/// 欧拉角转换:正负无限 转换成 正0~360 的欧拉角
/// </summary>
/// <param name="EulerAngles">要转换的欧拉角</param>
/// <returns>return : 转换成 正0~360 的欧拉角</returns>
static public Vector3 EulerAngles_PN_To_P360(Vector3 EulerAngles){
	EulerAngles.x = Angle_PN_To_P360(EulerAngles.x);
	EulerAngles.y = Angle_PN_To_P360(EulerAngles.y);
	EulerAngles.z = Angle_PN_To_P360(EulerAngles.z);
	return EulerAngles;
}

5.EulerAngles_P360_To_PN180 欧拉角转换:正0~360 转换成 正负0~180 的欧拉角

/// <summary>
/// 欧拉角转换:正0~360 转换成 正负0~180 的欧拉角
/// </summary>
/// <param name="EulerAngles">要转换的欧拉角</param>
/// <returns>return : 转换成 正负0~180 的欧拉角</returns>
static public Vector3 EulerAngles_P360_To_PN180(Vector3 EulerAngles){
	EulerAngles.x = Angle_P360_To_PN180(EulerAngles.x);
	EulerAngles.y = Angle_P360_To_PN180(EulerAngles.y);
	EulerAngles.z = Angle_P360_To_PN180(EulerAngles.z);
	return EulerAngles;
}

6.Angle_PN_To_PN180 角度转换:正负无限 转换成 正负0~180 的角度

/// <summary>
/// 角度转换:正负无限 转换成 正负0~180 的角度
/// </summary>
/// <param name="Angle">要转换角度</param>
/// <returns>return : 转换成 正负0~180 的角度</returns>
static public float Angle_PN_To_PN180(float Angle){
	Angle = Angle_PN_To_P360(Angle);
	return Angle_P360_To_PN180(Angle);
}

7.Angle_PN_To_P360 角度转换:正负无限 转换成 正0~360 的角度

/// <summary>
/// 角度转换:正负无限 转换成 正0~360 的角度
/// </summary>
/// <param name="Angle">要转换角度</param>
/// <returns>return : 转换成 正0~360 的角度</returns>
static public float Angle_PN_To_P360(float Angle){
	return ((Angle%=360)<0)?Angle+360:Angle;
}

8.Angle_P360_To_PN180 角度转换:正0~360 转换成 正负0~180 的角度

/// <summary>
/// 角度转换:正0~360 转换成 正负0~180 的角度
/// </summary>
/// <param name="Angle">要转换角度</param>
/// <returns>return : 转换成 正负0~180 的角度</returns>
static public float Angle_P360_To_PN180(float Angle){
	return (Angle>=180)?Angle-360:Angle;
}

 

实验六 Linux开发工具的使用(二) 班级: 姓名: 学号: 上机时间: 任课教师: 实验教师: 实验成绩: 一、实验目的 理解makefile文件,学会make工具的使用。 二、实验注意事项 实验室内的实验环境与系统是共用设施,请不要在系统内做对系统或对其他用户不安全的事情。 要求每个同学登录后系统后,要在自己的家目录下创建一个属于自己的子目录(以自己(拼音)名字或学号)。以后所有工作都要在自己的目录内进行。建议以后的实验都在同台计算机上做,这样可以保持连续性。 用户要按通常实验要认真书写实验报告。 三、实验内容及步骤 1.假设我们有一个程序由5个文件组成,源代码如下所示,根据以下步骤,熟悉makefile编程。 /*main.c*/ #include "mytool1.h" #include "mytool2.h" int main() { mytool1_print("hello mytool1!"); mytool2_print("hello mytool2!"); return 0; } /*mytool1.c*/ #include "mytool1.h" #include <stdio.h> void mytool1_print(char *print_str) { printf("This is mytool1 print : %s ",print_str); } /*mytool1.h*/ #ifndef _MYTOOL_1_H #define _MYTOOL_1_H void mytool1_print(char *print_str); #endif /*mytool2.c*/ #include "mytool2.h" #include <stdio.h> void mytool2_print(char *print_str) { printf("This is mytool2 print : %s ",print_str); } /*mytool2.h*/ #ifndef _MYTOOL_2_H #define _MYTOOL_2_H void mytool2_print(char *print_str); #endif 根据实验要求,写出第一个Makefile如下: main:main.o mytool1.o mytool2.o gcc -o main main.o mytool1.o mytool2.o main.o:main.c mytool1.h mytool2.h gcc -c main.c mytool1.o:mytool1.c mytool1.h gcc -c mytool1.c mytool2.o:mytool2.c mytool2.h gcc -c mytool2.c clean: rm -f *.o 在shell提示符下输入make,执行显示: gcc -c main.c gcc -c mytool1.c gcc -c mytool2.c gcc -o main main.o mytool1.o mytool2.o 执行结果如下: [armlinux@lqm makefile-easy]$ ./main This is mytool1 print : hello mytool1! This is mytool2 print : hello mytool2! 这只是最为初级的Makefile,现在来对这个Makefile进行改进。 改进一:使用变量 一般在书写Makefile时,各部分变量引用的格式如下: 1. make变量(Makefile中定义的或者是make的环境变量)的引用使用“$(VAR)”格式,无论“VAR”是单字符变量名还是多字符变量名。 2. 出现在规则命令行中shell变量(一般为执行命令过程中的临时变量,它不属于Makefile变量,而是一个shell变量)引用使用shell的“$tmp”格式。 3. 对出现在命令行中的make变量同样使用“$(CMDVAR)” 格式来引用。 OBJ=main.o mytool1.o mytool2.o main:$(OBJ)
05-09
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值