Unity3D C#数学系列之三角函数


1 定义

三角函数的定义:在一个平面直角坐标系中,以原点为圆心,1为半径画圆,交x轴于A点。以圆心O为旋转中心,将A点逆时针旋转θ度(一般规定逆时针旋转为正方向)至点B,设此时B点的坐标为(x, y)。
那么此时,y的值就叫做θ的正弦,记作sinθ。
x的值就叫做θ的余弦,记作cosθ。
y/x的值就叫做θ的正切,记作tanθ。
三角函数的定义

2 常用公式推导

2.1 sin²θ + cos² = 1

因为上图中单位圆上点满足x²+y²=1,又x=sinθ,y=cosθ。
所以sin²θ+cos²θ=1。

2.2 sinθ = cos(90°-θ)、 cosθ = sin(90°-θ)

sinθ=cos(90°-θ) cosθ=sin(90°-θ)
如上图,θ+β=90°。
则有sinθ=y=cosβ=cos(90°-θ)。
cosθ=x=sinβ=sin(90°-θ)。

2.3 sin(-θ) = -sinθ、 cos(-θ) = cosθ

sin(-θ)=-sin(θ) cos(-θ)=cosθ
如图,可知sin(-θ)=-y=-sinθ,cos(-θ)=x=cosθ。

2.4 sin(90°+θ) = cosθ 、cos(90°+θ)=-sinθ

sin(90°+θ)=cosθ cos(90°+θ)=-sinθ
如图,根据三角函数的定义sin(90°+θ)=y’,cos(90°+θ)=x’。
又△B‘y’o全等于△BxO,有y’=x,x’=-y。
于是sin(90°+θ)=y’=x=cosθ,cos(90°+θ)=x’=-y=sinθ。
同理可得sin(180°+θ) = -sinθ,cos(180°+θ) = -cosθ。

2.5 余弦定理

余弦定理主要用来解答三角形中已知两边长度及其夹角,求第三边的长度的问题。
余弦定理
如图,已知AB、AC的长分别为c、b,及AB、AC的夹角为θ,求BC的长度a为多少?
公式为:a² = c²+b²-2bccosθ
解法如下:
过B点做AC的垂线BD。
余弦定理求解
余弦定理推导过程

2.6 正弦定理

如图,已知△ABC外接圆的半径为r,则有a=2rsin∠A,b=2rsin∠B,c=2rsin∠C。
正弦定理
推导过程如下:
如图,设O为外接圆的圆心,则△AOB、△BOC、△AOC均为等腰三角形。
所以,∠A+∠B+∠C = (β+θ) + (β+γ) + (γ+θ) =2(β+θ+γ)= 180°
即β+θ+γ = 90°。
做辅助线OD垂直AC与点D。
正弦定理-辅助线
可知AD = b/2。
则有
正弦定理推导01

正弦定理推导02

正弦定理推导03
同理可得
正弦定理推导04

2.7 cos⁡(θ-β) = cosθcosβ + sinθsinβ

cos(α-θ)=cosα * cosθ + sinα * sinθ

此公式推导过程如下:

△OBB’中,根据余弦定理有
cos⁡(θ-β) = cosθ*cosβ + sinθ*sinβ推导过程01
又有
和差化积推导01

和差化积推导02
利用上面这个公式,咱们还可以推导出其他公式。
比如,我们设β = 90°-α,代入上面公式,则有
和差化积推导03

和差化积推导04

3 三角函数图像性质

三角函数图像

4 Unity中三角函数常用到的地方

上面说了这么多,三角函数到底有什么用?
①在Unity中,只要涉及到旋转和角度,就不可避免的要用到三角函数,比如不同坐标系的变换矩阵、向量的点积和叉积等
②sin和cos函数是周期波动的,我们可以用这个性质来模拟旗帜的飘动和水的波动
③任何信号经过傅里叶变换都可以分解为无数正余弦信号的叠加,我们可以通过这些正余弦信号的频率和幅值得出一些有意义的信息,比如图片中是否有噪声
④欧拉公式
欧拉公式
博主个人博客本文链接

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Unity中,可以使用UnityPlayer类中的UnitySendMessage方法来调用C#脚本中的方法。这个方法有三个参数:第一个参数是C#脚本附着的游戏物体的名称,第二个参数是C#脚本中的方法名,第三个参数是C#脚本方法的参数,如果没有参数则传入空字符串""。具体的代码如下所示: ```csharp public static void UnitySendMessage(String var0, String var1, String var2) { if (!o.c()) { com.unity3d.player.f.Log(5, "Native libraries not loaded - dropping message for " + var0 + "." + var1); } else { try { nativeUnitySendMessage(var0, var1, var2.getBytes("UTF-8")); } catch (UnsupportedEncodingException var3) { } } } ``` 引用<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [【Unity3D】Android Studio 工程中使用 Java 代码调用 UnityC# 脚本 ( Java 中调用 UnityPlayer#Unity...](https://blog.csdn.net/han1202012/article/details/127981676)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Unity 3D学习(基础篇)——C#基础入门](https://blog.csdn.net/qq_43551910/article/details/122435361)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值