An Angle type already exists in Foundation; see Measurement<UnitAngle>. You 
could add some convenience methods in an extension pretty easily.

import Foundation

typealias Angle = Measurement<UnitAngle>

extension Measurement where UnitType == UnitAngle {
    var sine: Double {
        let radians = self.converted(to: .radians).value
        return sin(radians)
    }
    
    static var threeQuarterTurn: Angle {
        return Angle(value: 0.75, unit: .revolutions)
    }
}

let x = Angle.threeQuarterTurn
x.sine // -1

-BJ


> On Jan 13, 2018, at 9:31 PM, Erica Sadun via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> I would like to see a full Geometry implementation but I don't think it 
> should be part of the standard library.
> 
> I've kicked around some ideas here: 
> 
> * https://gist.github.com/erica/8cb4b21cf0c429828fad1d8ad459b71b 
> <https://gist.github.com/erica/8cb4b21cf0c429828fad1d8ad459b71b>
> * https://gist.github.com/erica/ee06008202c9fed699bfa6254c42c721 
> <https://gist.github.com/erica/ee06008202c9fed699bfa6254c42c721>
> 
> and
> 
> * https://github.com/erica/SwiftGeometry 
> <https://github.com/erica/SwiftGeometry>
> 
>> On Jan 13, 2018, at 7:49 PM, Jonathan Hull via swift-evolution 
>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>> 
>> Hi Evolution,
>> 
>> I would really like to see Swift gain an Angle type in the standard library. 
>>  Every time I have to deal with an angle in an api, I have to go figure out 
>> the conventions for that call.  Is it in degrees? Is it in radians?  What if 
>> it is in radians, but I want to think about it in degrees?
>> 
>> I ended up writing an Angle type for my own code a few years back, and I 
>> have to say it is really wonderful.  It has greatly simplified my graphics 
>> work.  It takes a lot of mental load off of my brain when dealing with 
>> Angles.
>> 
>> I can of course initialize it either as degrees or radians (or revolutions), 
>> but I can also just say things like ‘.threeQuarterTurn’, and then I can get 
>> the value back out in whatever format I like.  There are also useful 
>> additions that let me normalize the angle to different ranges and which let 
>> me snap to the nearest multiple of an angle. Both of these are enormously 
>> useful for user facing features.  I can also do math on angles in a way that 
>> makes geometric sense for angles.  It is also really useful for interacting 
>> with CGVectors in intelligent ways.
>> 
>> Using Doubles or CGFloats to represent angles everywhere is just 
>> semantically wrong IMHO, and it stops us from adding all of these 
>> angle-specific niceties.
>> 
>> Happy to provide code if there is interest…
>> 
>> Thanks,
>> Jon
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-evolution
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to