package clockface import ( "math" "time" ) // Point represents a two-dimentional Cartesian coordinate type Point struct { X float64 Y float64 } // SecondHand is the unit vector of the second hand of an analogue clock at the time `t` represented as a Point func SecondHand(t time.Time) Point { p := secondHandPoint(t) p = Point{p.X * 90, p.Y * 90} // scale p = Point{p.X, -p.Y} // flip p = Point{p.X + 150, p.Y + 150} // translate return p } func secondsInRadians(t time.Time) float64 { // XXX:Wanted 3.141592653589793 radians, but got 3.1415926535897936 // return float64(t.Second()) * (math.Pi / 30) return math.Pi / (30 / float64(t.Second())) } func secondHandPoint(t time.Time) Point { angle := secondsInRadians(t) x := math.Sin(angle) y := math.Cos(angle) // XXX: Wanted {0 -1} Point, but got {1.2246467991473515e-16 -1} return Point{x, y} }