Method Interpolate:Object(a:Object,b:Object, v:Double) Abstract
' ***************************************************************' * SAMPLE *' *************************************************************** ' Smart function to convert Int32 RGB to an Int32[4] ([R,G,B,A] -> alpha filled with "255") Function IToI4:Int[](l:Long, a:Long=$FF) Local c:Int = l + a Shl(24); Return [c Shr(16) & $FF,c Shr(8) & $FF,c & $FF, c Shr(24) & $FF]; End Function Graphics 800,600,0,0 ' - 3 dimensions gradient ' season - Night/Sunrise/Sun/Sunset - Emissive/Diffuse/Specular/Refraction/Ambient Local grd:Int4Gradient3 = Int4Gradient3.Create(5,5,5); ' Winter - Emissive - Diffuse - Specular - Refraction - Ambient grd.Gradient(0,0).SetArray( [ IToI4($000000), IToI4($020202), IToI4($051015), IToI4($041014), IToI4($0a101a) ] ); ' night grd.Gradient(0,1).SetArray( [ IToI4($171a24), IToI4($d08040), IToI4($b08050), IToI4($607080), IToI4($204060) ] ); ' sunrise grd.Gradient(0,2).SetArray( [ IToI4($101217), IToI4($ecddc7), IToI4($cddbfc), IToI4($6090c0), IToI4($204060) ] ); ' day grd.Gradient(0,3).SetArray( [ IToI4($181d23), IToI4($a06080), IToI4($906030), IToI4($80a0b0), IToI4($304080) ] ); ' sunset grd.Gradient(0,4).SetArray( grd.Gradient(0,4).Objects ); ' copy first to last -> cyclic ' Springtime grd.Gradient(1,0).SetArray( [ IToI4($000000), IToI4($01080c), IToI4($070e17), IToI4($0a161e), IToI4($081924) ] ); grd.Gradient(1,1).SetArray( [ IToI4($01080c), IToI4($e0a507), IToI4($c165ba), IToI4($5c267b), IToI4($23083f) ] ); grd.Gradient(1,2).SetArray( [ IToI4($212529), IToI4($bce1e2), IToI4($105b73), IToI4($02316c), IToI4($000764) ] ); grd.Gradient(1,3).SetArray( [ IToI4($000000), IToI4($d34608), IToI4($d846a6), IToI4($55218e), IToI4($1b1057) ] ); grd.Gradient(1,4).SetArray( grd.Gradient(1,4).Objects ); ' Summer grd.Gradient(2,0).SetArray( [ IToI4($000000), IToI4($01080c), IToI4($070e17), IToI4($0a161e), IToI4($081924) ] ); grd.Gradient(2,1).SetArray( [ IToI4($01080c), IToI4($e0a507), IToI4($c165ba), IToI4($5c267b), IToI4($23083f) ] ); grd.Gradient(2,2).SetArray( [ IToI4($212529), IToI4($e8f0ff), IToI4($306070), IToI4($013070), IToI4($002050) ] ); grd.Gradient(2,3).SetArray( [ IToI4($000000), IToI4($d04010), IToI4($d840a0), IToI4($502090), IToI4($201050) ] ); grd.Gradient(2,4).SetArray( grd.Gradient(2,4).Objects ); ' Automn grd.Gradient(3,0).SetArray( [ IToI4($000000), IToI4($01080c), IToI4($070e17), IToI4($0a161e), IToI4($081924) ] ); grd.Gradient(3,1).SetArray( [ IToI4($01080c), IToI4($e0d5c7), IToI4($c1959a), IToI4($5c265b), IToI4($401040) ] ); grd.Gradient(3,2).SetArray( [ IToI4($212529), IToI4($dce1e2), IToI4($405b63), IToI4($12415c), IToI4($103754) ] ); grd.Gradient(3,3).SetArray( [ IToI4($000000), IToI4($d3c608), IToI4($d88636), IToI4($65413e), IToI4($4b2017) ] ); grd.Gradient(3,4).SetArray( grd.Gradient(3,4).Objects ); ' cycle season grd.Gradient(4,0).SetArray( grd.Gradient(0,0).Objects ); grd.Gradient(4,1).SetArray( grd.Gradient(0,1).Objects ); grd.Gradient(4,2).SetArray( grd.Gradient(0,2).Objects ); grd.Gradient(4,3).SetArray( grd.Gradient(0,3).Objects ); grd.Gradient(4,4).SetArray( grd.Gradient(0,4).Objects ); Local day:int = 100 Local hour:Int = 8 Local update:Byte = True; Repeat If MouseDown(1) If MouseX()>300 And MouseX()<300+365 If MouseY()>10 And MouseY()<170 day = MouseX()-300 hour = Float(1 - Float(MouseY()-10)/160) * 24 Update = True EndIf EndIf EndIf If update Cls() SetColor 100,100,100 DrawRect 300,10,365,160 SetColor 255,100,100 DrawLine 300,5,300,170 DrawLine 300,170,670,170 SetColor 255,255,000 DrawLine 300+day, 170, 300+day, 170-hour*170/24 DrawLine 300, 170-hour*170/24, 300+day, 170-hour*170/24 Local v:Float; For v = 0 To 160 Local a:Int[] = grd.Get(Float(day)/365, Float(hour)/24, v/160); SetColor a[0],a[1],a[2] DrawRect 10,170-v,200,1 Next SetColor 255,255,255 DrawText "Day : "+day+" hour : "+hour, 10, 190 DrawText "Days", 650, 190 DrawText "Hours ", 220, 10 Flip True update = False EndIf; Until KeyDown(KEY_ESCAPE) End
Local v:Float = d;
Local v:Float = 0.5+0.5*Sin(d*180-90); ' sinus interpolation smooth up -> higher medium -> smooth down