三角函数在编程中的实际运用—永劫无间脚本
- 前言
- 需求
- 思路
- 代码
- ■ 转义码
- ■ 源码
- 具体讲解
- 三角函数计算相对移动
- 求余跳过不需要的位置
- 成品
- 最后
前言
义务教育下,年轻人从初中就开始学三角函数却半辈子也没用上,除了特殊行业,做开发的可能也就大学oj刷题用到。在编写永劫无间脚本的时候,灵机一动用上了三角函数,实属有趣,记之。
需求
在永劫无间中,我需要做这么一个脚本功能。游戏中按下X+鼠标向方向移动+松开X就是发表情。用脚本实现快速转一圈把所有表情都发一遍并循环,而且还要跳过225°和270°的两个非表情动作。
思路
普通思路就是创建数组坐标常量,遍历循环,简单粗暴,没毛病。但是有洁癖的码农都会追求优雅,脑子里立马浮现了三角函数,利用角度可以计算正负数表示方向,改个参数就能换场景使用。
代码
话不多说,上代码。
■ 转义码
■ 源码
Sub 嘲讽()
int num = 8
count = 0
pi = 3.1415926535897932
degrees = 360/8
For 1120
mx = Sin(degrees * count * pi/180)*10
my = -Cos(degrees * count * pi/180)*10
KeyDown "X", 1
Delay 120
For 3
dm.MoveR mx, my
Delay 10
Next
KeyUp "X", 1
count = count + 1
// 跳过调息敬礼的位置
If degrees * count mod 360 = degrees * 5 Then
count = count + 1
End If
If degrees * count mod 360 = degrees * 6 Then
count = count + 1
End If
Next
End Sub
具体讲解
三角函数计算相对移动
我们以上面的表情作为第一个表情也就是起始位置,即为0°
一圈是360°,8个表情说明一个占用45°,第二表情就是45°。
第一个表情只需要鼠标向上移动,对应x轴不变,y轴负数移动。
三角函数可得Sin0°等于0,Cos0°等于1。
同理,第二个表情需要鼠标向右上移动,对应x轴正数移动,y轴负数移动。
三角函数可得Sin 45°等于0.707,Cos45°等于0.707。
推导得出,Sin可以表示x轴移动,-Cos表示y轴移动。
求余跳过不需要的位置
这个就经常用了,对总表情量取模,就可以表示循环中的位置,只不过要灵活运用,加入度数来计算。
degrees * count mod 360 = degrees * 5
成品
成品就不发了,有兴趣可以抖音搜索永劫无间求饶脚本查看。
最后
这样,我们就成功利用三角函数优雅的表示移动方向,是不是强迫症一下子就舒服了。很多知识可能花了我们很大精力去学习却无用武之地,但是增加储备粮,并活学活用,终有一天会在一个个小小的场景中起到丁点力量,虽微末,却心旷神怡,岂不乐哉。