Pro*_*OXO 4 trigonometry ios swift
是否可以在Swift for iOS中更改设置,属性等,以便它假设三角计算的度数而不是弧度?
例如,sin(90)将评估为1.
我有:
let pi = 3.14
var r2d = 180.0/pi
var d2r = pi/180
Run Code Online (Sandbox Code Playgroud)
......但是转换正在为一些长三角方程真正参与.
Mar*_*n R 30
正如在其他答案中已经说过的那样,标准库中没有采用度数参数的三角函数.
如果你定义自己的功能,那么你可以使用__sinpi(),
__cospi()的,等等,而不是由π乘以:
// Swift 2:
func sin(degrees degrees: Double) -> Double {
return __sinpi(degrees/180.0)
}
// Swift 3:
func sin(degrees: Double) -> Double {
return __sinpi(degrees/180.0)
}
Run Code Online (Sandbox Code Playgroud)
从__sinpi手册页(重点添加):
__sinpi()函数返回pi乘以x的正弦值(以弧度为单位).这可以比sin(M_PI*x)更精确地计算,因为它可以隐含地使用尽可能多的pi位来提供全面的结果,而不是M_PI受限的53位.对于大x,它也可能更有效,因为所涉及的参数减少非常简单.
__sinpi() 相关功能是非标准功能,但可在iOS 7/OS X 10.9及更高版本上使用.
例:
sin(degrees: 180.0) // 0
Run Code Online (Sandbox Code Playgroud)
给出了一个精确的结果,与之形成对比:
sin(180.0 * M_PI/180.0) // 1.224646799147353e-16
Run Code Online (Sandbox Code Playgroud)
只是为了好玩:这是你可以为所有浮点类型定义基于度的正弦函数,包括CGFloat函数重载(现在为Swift 3更新):
func sin(degrees: Double) -> Double {
return __sinpi(degrees/180.0)
}
func sin(degrees: Float) -> Float {
return __sinpif(degrees/180.0)
}
func sin(degrees: CGFloat) -> CGFloat {
return CGFloat(sin(degrees: degrees.native))
}
Run Code Online (Sandbox Code Playgroud)
在最后一个变体中,编译器自动从degrees.native要调用的函数的实际类型推断,以便在32位和64位平台上都能正常工作.
添加扩展名以明确识别这种类型的值将是处理此类事情的适当方法:
import Darwin // needed to get M_PI
extension Double {
public var degrees: Double { return self * M_PI / 180 }
public var ?: Double { return self * 180 / M_PI }
}
Run Code Online (Sandbox Code Playgroud)
把它放进游乐场,看看你如何得到你期望的结果:
sin(90.degrees) --> 1.0
1.? --> 57.2957795130823
1.?.degrees --> 1.0
(M_PI / 3).? --> 60.0
Run Code Online (Sandbox Code Playgroud)
没有任何设置或属性可以更改内置三角函数。如果您想简化表达式或定义自己的sindeg、cosdeg等,则应该严格使用弧度。
每个浮点类型都有一个static名为 的内置成员pi,其值是 \xcf\x80 的最佳近似值。例如:Double.pi,Float.pi,CGFloat.pi。
另外,sin 90\xcb\x9a 是 1,而不是 0。
\n| 归档时间: |
|
| 查看次数: |
8395 次 |
| 最近记录: |