角的度量方式
角度Degree与弧度Radian
两条射线从圆心向圆周射出,形成一个夹角和夹角正对的一段弧。当弧长等于圆周长的360分之一时,夹角为一度。弧长等于圆的半径时,夹角为1弧度。
角度与弧度的换算
PI = 180度 1弧度=180度/PI 1角度=PI/180度
角度=>弧度: 弧度=角度数PI/180
API: 弧度=角度数Mathf.Deg2Rad
弧度=>角度: 角度=弧度数180/PI
API: 角度=弧度数Mathf.Rad2Deg
在日常生活中角度制应用比较广泛。
在三角函数中弧度制可以简化计算。
三角函数
- 建立了直角三角形中角与边长比值的关系。
- 可用于根据一边一角,去求另一边。
- 公式:
- 正弦 sin x = a/c
- 余弦 cos x = b/c
- 正切 tan x = a/b
- API:
- Mathf.Sin(float radian)
- Mathf.Cos(float radian)
- Mathf.Tan(float radian)
反三角函数
- 反正弦、反余弦、反正切等函数的总称
- 可用于根据两边长,求角度。
- 公式:
- 反正弦 arcsin a/c = x
- 反余弦 arcsin b/c = x
- 反正切 arctan a/b = x
- API:
- Mathf.Asin(float radian)
- Mathf.ACos(float radian)
- Mathf.Atan(float radian)
实例
在unity3d中画出cube北偏西30度,距离10的坐标v
根据三角函数求出坐标v相对于cube在z轴和x轴的偏移量,然后用在cube坐标的基础上,x加上x轴偏移量,z加上z轴偏移量得出的坐标就是v坐标了。但是这样求得的坐标,当cube旋转时v坐标是不会变的,如果需要让v坐标会随着cube的旋转而改变,可以用cube.transform.transformPoint(x偏移量,0,z偏移量)将v相对cube的坐标转为世界坐标,这样当cube旋转时,v的坐标也会跟着旋转了。脚本如下:
public class DrawTest : MonoBehaviour { // Start is called before the first frame update public GameObject cube; // Update is called once per frame void Update() { Demo(); } private void Demo() { float xAdd = Mathf.Sin(30 * Mathf.Deg2Rad) * 10; float zAdd = xAdd / Mathf.Tan(30 * Mathf.Deg2Rad); Vector3 newcube = new Vector3(cube.transform.position.x + xAdd, cube.transform.position.y, cube.transform.position.z + zAdd); //Vector3 newcube = cube.transform.TransformPoint(xAdd, 0, zAdd); Debug.DrawLine(cube.transform.position, newcube); Debug.DrawLine(Vector3.zero, newcube, Color.green); } }
效果
Vector3 newcube = new Vector3(cube.transform.position.x + xAdd, cube.transform.position.y, cube.transform.position.z + zAdd);
Vector3 newcube = cube.transform.TransformPoint(xAdd, 0, zAdd);