It is currently September 14th, 2024, 10:03 pm

Transformation Matrix rotation help.

Get help with creating, editing & fixing problems with skins
oni5115
Posts: 27
Joined: October 4th, 2010, 3:33 pm

Transformation Matrix rotation help.

Post by oni5115 »

While I was messing with Polar Clock I accidentally stumbled on an interesting concept of auto determining a rotation around a circle. I thought it'd be a really interesting idea to attempt to apply in the making of a "Corner Calendar"-ish Calendar. Except one where you can actually change the font face and font size, because it is all text and not png's!

The problem I have run into is that while the transformation works quite well, the rotation is a little too much. The text/numbers are not quite straight; it's at a slight angle. Enough that it doesn't look right. I'm really no good with transformation matrices, so I was hoping someone could help with some ideas.

In the test code below the measure just causes the text to spin around the circle. In reality, it won't be doing that. But it is a good way to test the idea of the text wrapping around the circle.

Code: Select all

[Rainmeter]
update=100

[Variables]
;;;;;;;;;;;;;;;;
; Notes: Changing font style would probably mess with the pixel calculations

Center_Size=50
Ring_Gap_Size=0
Text_Gap=0.03
Start_Angle=270 *(PI/180)
Num_Rings=4

Background_Color=111,111,111,100

; Generic Font Settings
Font_Face=Trebuchet MS
Font_Color1=255,255,255,120
Font_Color2=0,255,0,255
Font_Effect=BORDER
Font_Effect_Color=0,0,0,255
Font_Case=UPPER

; Year - 16 px
Year_Font_Size=12
Year_Font_Pixs=10

; Text Day
TDay_Font_Size=12
TDay_Font_Pixs=10

; Month
Month_Font_Size=12
Month_Font_Pixs=10

; Number Day
NDay_Font_Size=24
NDay_Font_Pixs=32

[NDay_Num_Chars]
Measure=CALC
Formula=(9+(22*2))/360
;;;;;;;;;;;;;;;;;;;;;;
; MEASURES
;;;;;;;;;;;;;;;;;;;;;;
[Measure_TDay]
Measure=Time
Format=%A

[Measure_Month]
Measure=Time
Format=%B

[Measure_NDay]
Measure=Time
Format=%d

[Measure_Year]
Measure=Time
Format=%Y

;;;;;;;;;;;;;;;;;;;;;;
; CALC
;;;;;;;;;;;;;;;;;;;;;;
; Used for making the Backgrounds
[MeasureBG]
Measure=Calc
Formula=100
MaxValue=100
UpdateDivider=86400

[Radius]
Measure=CALC
Formula=#Center_Size# + #Num_Rings#*#Ring_Gap_Size# + #Year_Font_Pixs# + #TDay_Font_Size# + #Month_Font_Pixs# + #NDay_Font_Pixs#
DynamicVariables=1
UpdateDivider=86400
[Circumference]
Measure=CALC
Formula=[Radius]*2
DynamicVariables=1
UpdateDivider=86400


;;;;;;;;;;;;;;;;;;;;
; Colors
;;;;;;;;;;;;;;;;;;;;
;Reset_NDay_Color=
;Set_NDay_Color=!RainmeterWriteKeyValue [Section] [Key] [Value] ("FileSpec")
;
;
;|a c tx|*|x|=|x'| x' = ax + cy + tx.
;|b d ty| |y| |y'| y' = bx + dy + ty.
;
;    * a is used to scale the x value
;    * d is used to scale the y value
;    * c is used to skew the x value
;    * b is used to skew the y value 
;     * TX shifts X
;     * TY shifts Y
;  Skew X negative, Y positive should give clockwise rotation.
;
;    * a = cos(angle)
;    * b = -sin(angle)
;    * c = sin(angle)
;    * d = cos(angle)
;
; NDay 1
[Measure_ND1]
Measure=Calc
Formula=(Counter % 100)/100
MaxValue=100
[ND1_a]
Measure=Calc
Formula=COS(Measure_ND1*2*PI)
[ND1_b]
Measure=Calc
Formula=SIN(Measure_ND1*2*PI)
[ND1_c]
Measure=Calc
Formula=-SIN(Measure_ND1*2*PI)
[ND1_TX]
Measure=Calc
Formula=[Radius] - COS(Measure_ND1*2*PI)*[Radius] + SIN(Measure_ND1*2*PI)*[Radius]
DynamicVariables=1
[ND1_TY]
Measure=Calc
Formula=[Radius] - SIN(Measure_ND1*2*PI)*[Radius] - COS(Measure_ND1*2*PI)*[Radius]
DynamicVariables=1
[ND1_X]
Measure=Calc
Formula=[Radius] - #NDay_Font_Pixs#
DynamicVariables=1
[ND1_Y]
Measure=Calc
Formula=0
DynamicVariables=1

; NDay 2
[Measure_ND2]
Measure=Calc
Formula=[Measure_ND1] + #Text_Gap#
DynamicVariables=1
[ND2_a]
Measure=Calc
Formula=COS(Measure_ND2*2*PI)
[ND2_b]
Measure=Calc
Formula=SIN(Measure_ND2*2*PI)
[ND2_c]
Measure=Calc
Formula=-SIN(Measure_ND2*2*PI)
[ND2_TX]
Measure=Calc
Formula=[Radius] - COS(Measure_ND2*2*PI)*[Radius] + SIN(Measure_ND2*2*PI)*[Radius]
DynamicVariables=1
[ND2_TY]
Measure=Calc
Formula=[Radius] - SIN(Measure_ND2*2*PI)*[Radius] - COS(Measure_ND2*2*PI)*[Radius]
DynamicVariables=1
[ND2_X]
Measure=Calc
Formula=[Radius] - #NDay_Font_Pixs#
DynamicVariables=1
[ND2_Y]
Measure=Calc
Formula=0
DynamicVariables=1

; NDay 3
[Measure_ND3]
Measure=Calc
Formula=[Measure_ND2] + #Text_Gap#
DynamicVariables=1
[ND3_a]
Measure=Calc
Formula=COS(Measure_ND3*2*PI)
[ND3_b]
Measure=Calc
Formula=SIN(Measure_ND3*2*PI)
[ND3_c]
Measure=Calc
Formula=-SIN(Measure_ND3*2*PI)
[ND3_TX]
Measure=Calc
Formula=[Radius] - COS(Measure_ND3*2*PI)*[Radius] + SIN(Measure_ND3*2*PI)*[Radius]
DynamicVariables=1
[ND3_TY]
Measure=Calc
Formula=[Radius] - SIN(Measure_ND3*2*PI)*[Radius] - COS(Measure_ND3*2*PI)*[Radius]
DynamicVariables=1
[ND3_X]
Measure=Calc
Formula=[Radius] - #NDay_Font_Pixs#
DynamicVariables=1
[ND3_Y]
Measure=Calc
Formula=0
DynamicVariables=1

;;;;;;;;;;;;;;;;;;;;;;
; METERS
;;;;;;;;;;;;;;;;;;;;;;
[MeterBackground]
Meter=ROUNDLINE
MeasureName=MeasureBG
W=[Circumference]
H=[Circumference]
StartAngle=0
RotationAngle=6.283183
LineStart=0
LineLength=[Radius]
LineColor=#Background_Color#
Solid=1
AntiAlias=1
DynamicVariables=1

[Text_ND1]
Meter=String
x=[ND1_X]
y=[ND1_Y]
FontSize=#NDay_Font_Size#
FontFace=#Font_Face#
FontColor=#Font_Color1#
StringEffect=#Font_Effect#
FontEffectColor=#Font_Effect_Color#
StringCase=#Font_Case#
StringAlign=CENTER
Text=1
TransformationMatrix=[ND1_a];[ND1_b];[ND1_c];[ND1_a];[ND1_TX];[ND1_TY]
DynamicVariables=1

[Text_ND2]
Meter=String
x=[ND2_X]
y=[ND2_Y]
FontSize=#NDay_Font_Size#
FontFace=#Font_Face#
FontColor=#Font_Color1#
StringEffect=#Font_Effect#
FontEffectColor=#Font_Effect_Color#
StringCase=#Font_Case#
StringAlign=CENTER
Text=2
TransformationMatrix=[ND2_a];[ND2_b];[ND2_c];[ND2_a];[ND2_TX];[ND2_TY]
DynamicVariables=1

[Text_ND3]
Meter=String
x=[ND3_X]
y=[ND3_Y]
FontSize=#NDay_Font_Size#
FontFace=#Font_Face#
FontColor=#Font_Color1#
StringEffect=#Font_Effect#
FontEffectColor=#Font_Effect_Color#
StringCase=#Font_Case#
StringAlign=CENTER
Text=3
TransformationMatrix=[ND3_a];[ND3_b];[ND3_c];[ND3_a];[ND3_TX];[ND3_TY]
DynamicVariables=1
Everyone loves the [url=http://db.tt/qV9oIZZ]Dropbox[/url]!