Diskuze: Program analogových hodin - plynulé posouvání ručiček

C# .NET .NET (C# a Visual Basic) Program analogových hodin - plynulé posouvání ručiček American English version English version

Avatar
Robert Zemánek (bobánek):

Čus napadlo mě udělat si vlastní hodiny ve WPF, při spuštení programu se vygnererují čáry na základě aktuálního času. Ručičky se mi hýbají, ale hodinová se neposuvá plynule. Je-li 6.59, měla by být už na 7 a ona je stále na 6, což vypadá jako 5.59

//kolik je hodin jsem zjistil takto:
this.hours = aktualniCas.Hour;
this.minutes = aktualniCas.Minute;
this.seconds = aktualniCas.Second;
//vypočítání úhlu následovně:
uhelM = minutes * 360 / 60;
uhelS = 360 / 60 * seconds;
uhelH = (hours * (360 / 12));//tady už je chyba
//vykreslení - to by mělo být snad v pořádku
DoubleAnimation aniS = new DoubleAnimation(uhelS, uhelS + 360, new Duration(TimeSpan.FromSeconds(60)));
DoubleAnimation aniM = new DoubleAnimation(uhelM, uhelM - 6, new Duration(TimeSpan.FromSeconds(3600)));
DoubleAnimation aniH = new DoubleAnimation(uhelH, uhelH -30, new Duration(TimeSpan.FromSeconds(43200)));

Otázka zní? Jak spočítat úhel hodin, aby se hodinová ručička otáčela průběžně?? díky moc :-)

Odpovědět 19.1.2013 19:29
Jsem jako holub.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Robert Zemánek (bobánek)
David Čápka:

Vypadá to, že dělíš celočíselně. Potřebuješ dělit tak, aby ti vyšlo reálné číslo, tedy třeba 6.5. Hodinová ručička bude pak mezi 6 a 7 ;)

Nahoru Odpovědět 19.1.2013 19:36
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Robert Zemánek (bobánek):

ted už mi došlo že když je 3:20 tak hodiny budou 3.3

Nahoru Odpovědět 19.1.2013 19:39
Jsem jako holub.
Avatar
matesax
Redaktor
Avatar
Odpovídá na Robert Zemánek (bobánek)
matesax:

Já bych šel do XNA a nakreslil si to celé sám... I když WPF není ani omylem špatně.

this.hours
this.minutes
this.seconds

Proč je tam this? A vůbec - použij existující strukturu. Nejlépe DateTime...

Nevidím ale důvod, nač si tyto údaje ukládat. Normálně bych pracoval s DateTime.Now... Tak jako tady:

http://www.codeproject.com/…Clock-in-WPF

Jen se mi ten kód také úplně nezamlouvá - ale když to nebudeš jen kopírovat...

Počty zde:

secondHand.Angle = DateTime.Now.Second * 6;
minuteHand.Angle = DateTime.Now.Minute * 6;
hourHand.Angle = (DateTime.Now.Hour * 30) + (DateTime.Now.Minute * 0.5);
Editováno 19.1.2013 19:42
 
Nahoru Odpovědět 19.1.2013 19:40
Avatar
Odpovídá na matesax
Robert Zemánek (bobánek):

tak už to vypadá slibně

//tohle se jeví dobře nebo ne?
DoubleAnimation aniS = new DoubleAnimation(uhelS, uhelS + 360, new Duration(TimeSpan.FromSeconds(60)));
DoubleAnimation aniM = new DoubleAnimation(uhelM, uhelM - 6, new Duration(TimeSpan.FromSeconds(3600)));
DoubleAnimation aniH = new DoubleAnimation(uhelH, uhelH -30, new Duration(TimeSpan.FromSeconds(43200)));

jinak toto: "hourHand.Angle = (DateTime.Now.Hour * 30) + (DateTime.Now­.Minute * 0.5);" - nějaké vystvětlení?? :D

Editováno 19.1.2013 19:54
Nahoru Odpovědět 19.1.2013 19:50
Jsem jako holub.
Avatar
matesax
Redaktor
Avatar
Odpovídá na Robert Zemánek (bobánek)
matesax:

Prohlédni si, co jsem ti poslal... Trochu to jejich upravit a bude to dokonalé... Já bych to hlavně neviděl jako 3 různé animace. Nýbrž jako jednu, se 3 parametry - úhly...

A přesně jak je to tam - ručička je objekt - a tak se dá nastavovat. Nakonec by jsi ji mohl dát nastavit i obrázek... Takže si pohraj s objektovým návrhem - nezapomínej, co je C# zač...

Edit:

Musíš si stáhnout zdroják - na webu je jen ukázka - ve zdrojáku je vše...

Editováno 19.1.2013 19:55
 
Nahoru Odpovědět 19.1.2013 19:52
Avatar
Robert Zemánek (bobánek):

něco jsem pochytil, ale mají tam timer

Nahoru Odpovědět 19.1.2013 20:10
Jsem jako holub.
Avatar
Robert Zemánek (bobánek):

tak dělal jsem to přes animaci, což by mělo jít

Nahoru Odpovědět 19.1.2013 20:19
Jsem jako holub.
Avatar
matesax
Redaktor
Avatar
Odpovídá na Robert Zemánek (bobánek)
matesax:

Tady jde o to, aby byly přesné... Takže to chce Timer na 10ms.

 
Nahoru Odpovědět 19.1.2013 20:25
Avatar
Robert Zemánek (bobánek):

nějak to zkusím, dík :)

Nahoru Odpovědět 19.1.2013 20:27
Jsem jako holub.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.