clockface: add minute hand

This commit is contained in:
vinchent 2024-09-23 22:09:10 +02:00
parent b58e2436cd
commit 5a62fef4f3
2 changed files with 51 additions and 0 deletions

View File

@ -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)

View File

@ -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