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 {
|
func secondsInRadians(t time.Time) float64 {
|
||||||
// XXX:Wanted 3.141592653589793 radians, but got 3.1415926535897936
|
// XXX:Wanted 3.141592653589793 radians, but got 3.1415926535897936
|
||||||
// return float64(t.Second()) * (math.Pi / 30)
|
// return float64(t.Second()) * (math.Pi / 30)
|
||||||
|
@ -6,6 +6,26 @@ import (
|
|||||||
"time"
|
"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) {
|
func TestSecondsInRadians(t *testing.T) {
|
||||||
cases := []struct {
|
cases := []struct {
|
||||||
time time.Time
|
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) {
|
func TestSecondHandPoint(t *testing.T) {
|
||||||
cases := []struct {
|
cases := []struct {
|
||||||
time time.Time
|
time time.Time
|
||||||
|
Loading…
Reference in New Issue
Block a user