やはりremap関数の汎用性は異常だと思います。
そこでとりあえずジェネリックな関数が欲しくなります。
ですが、どうやらC++のテンプレートとは違い、protocolに一工夫必要のようです。
//まあ、もうほとんどDouble決め打ちでいい気もしますが
protocol FourArithmeticOperations {
func +(lhs: Self, rhs: Self) -> Self
func -(lhs: Self, rhs: Self) -> Self
func *(lhs: Self, rhs: Self) -> Self
func /(lhs: Self, rhs: Self) -> Self
}
extension Float: FourArithmeticOperations { }
extension Double: FourArithmeticOperations { }
func remap<T: FourArithmeticOperations>(value: T, #inputMin: T, #inputMax: T, #outputMin: T, #outputMax: T) -> T
{
return (value - inputMin) * ((outputMax - outputMin) / (inputMax - inputMin)) + outputMin;
}
for i in 0...100 {
let t = remap(Double(i), inputMin: 0.0, inputMax: 100.0, outputMin: 0.0, outputMax: M_PI * 2.0)
let v = sin(t)
println("i[\(i)] => \(v)")
}
こちらを参考にさせていただきました。
http://stackoverflow.com/questions/24046792/swift-generics-requiring-addition-and-multiplication-abilities-of-a-type