快速计算y方向上的新点x距离
我正在做一些sprite工具包中的代码,并且想要根据开始位置计算一个精灵的位置并在给定方向和距离上移动它。例如,假设我使用的度数是0,意思是直线上升,我想将精灵从当前位置向45度(向上和向右)方向移动10个点。快速计算y方向上的新点x距离
三角函数不是我的力量,我一直在努力弄清楚如何应用它。沿45度方向移动看起来相当简单,但我不确定如何计算方向,如110(向右和向右)或225(向左和向下)。
我第一次尝试是这样的:
public func offset(byDistance distance:CGFloat, inDirection degrees:CGFloat) { let vertical = sin(degrees) * distance
let horizontal = sqrt(pow(distance, 2.0) + pow(vertical, 2.0))
self.position = self.position.applying(CGAffineTransform(translationX:horizontal, y:vertical))
}
但我不认为这是工作的结果是这样的:
Direction 45, distance 88.26 -> New location {75.10, 115.88} Direction 135, distance 88.26 -> New location {7.79, 88.60}
Direction 225, distance 88.26 -> New location {-82.09, 120.53}
Direction 315, distance 88.26 -> New location {65.76, 110.06}
任何人都可以给我一些线索,在那里我出错了?
回答:
这里有几个线索:
sin()
采用弧度不度,所以你需要转换。0
是正确的,不起来,所以你需要调整。- 水平使用
cos()
。
这是更接近你需要的东西:
public func offset(byDistance distance:CGFloat, inDirection degrees:CGFloat) { let radians = (degrees - 90) * .pi/180
let vertical = sin(radians) * distance
let horizontal = cos(radians) * distance
self.position = self.position.applying(CGAffineTransform(translationX:horizontal, y:vertical))
}
回答:
有2个(实际上是3,但让我们忽略了第3)像正弦和余弦三角函数独立的符号:角度和弧度。两者都描述角度。度数范围从0到360,弧度范围从0到2π
。
它们之间的转换很简单:
degrees = 180 * radians/π radians = degrees/180 * π
的iOS和Mac OS使用弧度为他们的三角函数。
您可以使用度数继续跟踪角度,然后在将值输入到trig函数或转换为使用弧度之前转换为弧度。
如果您了解圆的圆周为2π • radius
,并且您假设半径为1个单位,则可以通过考虑蚂蚁沿着圆的外侧行走来了解弧度。沿圆周(外侧)的总路径距离为2π
单位。如果蚂蚁步行π/2
单位,它将行进四分之一周围的方式。一旦它行走了π
单位,它将在圆周的一半。当它走过2π
个单位时,它将完成一个完整的循环。这就是弧度的工作原理。
以上是 快速计算y方向上的新点x距离 的全部内容, 来源链接: utcz.com/qa/265226.html