There are a number of triaxial Facer watch faces available, and they are quite unique (links further below). But I have not come across a triaxial watch face where the dials rotate as well. Do post if you know of such jewels!

Inspired by @russellcresser’s picture, I had to take on the challenge:

This is the result:

The face is made up of the following parts:

**10 Second disk (or last digit of the seconds):**

This disk rotates at: `((#DWFSS#*6)+60)`

6x as fast as the normal speed of a seconds had (should be logical…). The `+60`

is the offset, so that the seconds can be read at around 5 o’clock.

**1st digit of seconds disk:**

The disk should stand still and only rotate when the 9th second approaches. So the disk rotates every 10 seconds, for 60 degrees:

`$(#Ds#%10)=9?((floor(#Ds#/10)*60)+60)+(clamp(((((#DWFSS#/6)%60)-#Ds#)*60),0,60)):((floor(#Ds#/10)*60)+60)$`

*Explanation*: if 60 seconds (Ds) are divisible by 10 and the remainder is 9, then rotate from current position (floor…) +60° (+clamp…). And in all other cases, stay where you are (:floor…)

**The minutes:**

This one is straight forward, rotates as a normal smooth minute hand: `#DWFMS#`

**The rotor:**

I must confess, I did not manage without the rotor. The idea was to have the 3 disks for the hours rotate in an orbit, but I did not find a way to change X and Y position for only 120° at a certain point in time. So the rotor becomes active every 4 hours, rotates 120° and then the single disk, positioned at 3 o’clock are overlayed using opacity.

The rotor rotates at 1, 5, and 9 of the value `#Dh#`

(1-12). So, for example, when the time is 12:59:59 and it is going to be 1:00:00, the rotor rotates by 120 degrees to put the 1-4 hour disk into position. Since `#Dh#`

is only a full hour value I add a second condition using the minutes=0 to initiate the rotation:

´$#Dh#=1&&#DWFMS#/6=0?`

Rotation is: `(120-(clamp(((((#DWFSS#/6)%60)-#Ds#)*120),0,120)))`

*Explanation*: current position (120) - max 120°

The speed of the rotation always starts at 0, hence subtracting `#Ds#`

Putting all that into one expression for the 1, 5, and 9:

`$#Dh#=1&&#DWFMS#/6=0?(120-(clamp(((((#DWFSS#/6)%60)-#Ds#)*120),0,120))):$$#Dh#=5&&#DWFMS#/6=0?(0-(clamp(((((#DWFSS#/6)%60)-#Ds#)*120),0,120))):$$#Dh#=9&&#DWFMS#/6=0?(240-(clamp(((((#DWFSS#/6)%60)-#Ds#)*120),0,120))):(480-ceil(#Dh#/4)*120)$`

For all other values, the rotor should stay in position, so: `(480-ceil(#Dh#/4)*120)`

The formula gives the value 0, 120, and 240, depending on current hour.

**The 3-hour disks**

The disks

- stay in position at 3 o’clock,
- are visible at respective hours,
- rotate at the hour

*Challenges*:

- rotation at hours 1, 5, and 9 should be delayed, since the rotor needs to finish rotating
- 100% opacity should also only be true when the rotor stops
- Each opacity will differ depending on the hour, and should be valid for 4 values. Example for the duration from 1 to 4

Opacity:

Disk 1-4h: `$(ceil((#Dh#)/4))=1&&(#DWFMS#+#DK#)>1?100:0$`

Disk 5-8h: `$(ceil((#Dh#)/4))=2&&(#DWFMS#+#DK#)>5?100:0$`

Disk 9-12h: `$(ceil((#Dh#)/4))=3&&(#DWFMS#+#Dh#)>9?100:0$`

*Explanation*:

`(ceil((#Dh#)/4))`

will always be 1, for Dh 1, 2, 3, and 4

The second condition makes sure the 100% opacity kicks in when `#DK#`

(0-1) is greater than 1. If ´#DK#` is not added to the smooth minute value, opacity is “0” every hour for a split second.

**Rotation of the hour disks:**

The disk rotation is made up of 3 parts:

- a delayed rotation at the hour 1, 5, and 9
- normal rotation at the hour
- stationery value other wise

Example for disk 1-4hour:

`$#Dh#=1&&(toFixed(#DWFMS#/6,3))=0.017?(90-(clamp(((((#DWFSS#/6)%60)-#Ds#)*90),0,90))):$$#Dh#=2&&#DWFMS#/6=0?(360-(clamp(((((#DWFSS#/6)%60)-#Ds#)*90),0,90))):$$#Dh#=3&&#DWFMS#/6=0?(270-(clamp(((((#DWFSS#/6)%60)-#Ds#)*90),0,90))):$$#Dh#=4&&#DWFMS#/6=0?(180-(clamp(((((#DWFSS#/6)%60)-#Ds#)*90),0,90))):(450-ceil(#Dh#%4)*90)$`

*Explanation:*

- The delayed rotation is done using the “toFixed” function to give an exact value a little later than at the exact minute value of 0. In this case 0.017 (trial and error value).
- the formula after the “?” is the usual rotation, in this case by 90°, always at a starting position
- the last expression is the value at which the disk should stay put

The other 2 disk rotation formulas are the same, but using 5-8 and 9-12.