clockface: add minute hand
This commit is contained in:
parent
b58e2436cd
commit
5a62fef4f3
@ -52,6 +52,18 @@ func SecondHand(w io.Writer, t time.Time) {
|
||||
)
|
||||
}
|
||||
|
||||
func minutesInRadians(t time.Time) float64 {
|
||||
return (secondsInRadians(t) / 60) + math.Pi/(30/float64(t.Minute()))
|
||||
}
|
||||
|
||||
func minuteHandPoint(t time.Time) Point {
|
||||
angle := minutesInRadians(t)
|
||||
x := math.Sin(angle)
|
||||
y := math.Cos(angle)
|
||||
|
||||
return Point{x, y}
|
||||
}
|
||||
|
||||
func secondsInRadians(t time.Time) float64 {
|
||||
// XXX:Wanted 3.141592653589793 radians, but got 3.1415926535897936
|
||||
// return float64(t.Second()) * (math.Pi / 30)
|
||||
|
@ -6,6 +6,26 @@ import (
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestMinutesInRadians(t *testing.T) {
|
||||
cases := []struct {
|
||||
time time.Time
|
||||
angle float64
|
||||
}{
|
||||
{simpleTime(0, 30, 0), math.Pi},
|
||||
{simpleTime(0, 0, 7), 7 * (math.Pi / (30 * 60))},
|
||||
}
|
||||
|
||||
for _, c := range cases {
|
||||
t.Run(testName(c.time), func(t *testing.T) {
|
||||
got := minutesInRadians(c.time)
|
||||
|
||||
if c.angle != got {
|
||||
t.Fatalf("Wanted %v radians, but got %v", c.angle, got)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestSecondsInRadians(t *testing.T) {
|
||||
cases := []struct {
|
||||
time time.Time
|
||||
@ -28,6 +48,25 @@ func TestSecondsInRadians(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestMinuteHandPoint(t *testing.T) {
|
||||
cases := []struct {
|
||||
time time.Time
|
||||
point Point
|
||||
}{
|
||||
{simpleTime(0, 30, 0), Point{0, -1}},
|
||||
{simpleTime(0, 45, 0), Point{-1, 0}},
|
||||
}
|
||||
|
||||
for _, c := range cases {
|
||||
t.Run(testName(c.time), func(t *testing.T) {
|
||||
got := minuteHandPoint(c.time)
|
||||
if !roughlyEqualPoint(got, c.point) {
|
||||
t.Fatalf("Wanted %v Point, but got %v", c.point, got)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestSecondHandPoint(t *testing.T) {
|
||||
cases := []struct {
|
||||
time time.Time
|
||||
|
Loading…
Reference in New Issue
Block a user