Since I’m scripting watch faces for smart watches, I was confronted with mathematical issues from my school days nearly 30 years ago.
The basics
The circle is the main geometric form to support using watch faces. And so I was confronted with π, sine, angles and some other things from the trigonometry.
One main use for my watch faces so far, was, to move objects around a circle to a corresponding time value like I did with the eye movements of Homer in my Homer watch face or with the hours and minutes bobbles in TriGoIO.
I needed a function to place an object with the x and y coordinates in position of a circle to a given value of time. To do this, I needed sine, cosine and π.
The seconds
To move Homer’s eyes by seconds, we use the WatchMaker variable {ds}, which represents the seconds in a minute from 0 to 60.
Because we want to calculate the x and y coordinates to place the object depending of the seconds, we need to use the sine and cosine functions.
As the illustration above shows, a full circle is .
To move an object around a circle we need values from to , so we need to convert the 0 to 60 seconds to a value from 0 to 1 and multiply this with . So 60 seconds would be represented by 1 after the conversion which would result in when multiplied with , which is the full circle position.
To convert the seconds, we simple have to multiply them by . The formula, where “ds” stands for the seconds, is: .
To get the horizontal position in the clockwise movement we use the cosine function and we use the sine function for the vertical position.
Because the clock begins counting at the top of the watch face, we need to subtract inside the cosine and sine functions.
That’s it.
Of course you can control the size of the circle by simply multiplying a desired value to it.
And if you wish to change the position of the circle, just add or subtract a value.
And if you would like to use hours, just use the {dh} variable and divide by 12 instead of 60.
Homer’s eyes
For Homer’s eyes in the Homer watch face, which have a specific size and position, I’ve used this formula:
Homer’s left eye:
Homer’s right eye:
The same in Lua script for WatchMaker as follows.
Tap on the object and set the values for “Position X” and “Position Y” to:
x="-48 + math.cos(({ds}*0.016666*math.pi*2)- math.pi/2) * 25"
y="-42 + math.sin(({ds}*0.016666*math.pi*2)- math.pi/2) * 25"
And for the other eye:
x="48 + math.cos(({ds}*0.016666*math.pi*2)- math.pi/2) * 25"
y="-42 + math.sin(({ds}*0.016666*math.pi*2)- math.pi/2) * 25"
Updates
Additional formula: Move objects in a circle smoothly
Alternative formula: Moving around – the easy way
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
2 thoughts on “Back to trigonometry”