Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Zdravím,
potřeboval bych pomoct s algoritmem pro simulaci rulety (nebo spíš kola štěstí).
Potřebuju ale, aby se mi ruleta zastavila na konkrétním políčku a taky potřebuju, aby mi ruleta zpomalovala a zrychlovala, když nějaký prvek projíždí kolem šipky (takový magnetizmus), co určuje výhru (určitě si pamatujete soutěž Kolotoč apod.).
Napsal jsem si oba způsoby, ale nepodařilo se mi je zkombinovat.
Mám proměnné:
- speed // rychlost rulety
- rotation // úhel otočení rulety
Políček v ruletě je 18, takže pokud je rotation dělitelné 20, je některé políčko na šipce.
Postup pro zpomalování (bez magnetizmu):
Nastavím libovolnou rotaci (třeba -1000 stupnu) a přičítám rychlost dokud není rotace větší nebo rovna 0. Rychlost vypočítám jako speed = rotation/50, kde 50 je konstanta určující jak rychle se bude ruleta točit.
Postup s magnetizmem (nefunguje zastavení na předem vybrané výhře):
Rychlost nastavím třeba na 10 (stupňů za snímek), rotaci třeba na 1000. Pokud je (rotace % 20) <> 10, přičítám nebo odečítám k rychlosti 0.1. Tu pak přičtu k rotaci a rychlost vynásobím 0.99 (čímž ji spomalím).
Kdybych u postupu z magnetismem zjistil na jakou hodnotu nastavit výchozí rotaci a rychlost, tak určitě budu schopný ovlivnit na jakém dílku se ruleta má zastavit. Podařilo se mi spočítat rychllost: speed = 1/(10*0.99^300). Kde 10 je omezení, že se ruleta bude točit dokud je rychlost větší než 0.1, 0.99 je konstanta o kterou spomaluju rychlost každý průběh a 300 je počet snímků, které se ruleta bude točit (30FPS * 10 vteřin).
Za každou radu budu moc vděčný, pokud někdo navrhnete lepší nápad, budu ještě radši.
Předem díky za pomoc,
Pazzi
Offline
Zdravím,
již vyřešené, nebo stále bádáš? Pokud bádáš, klidně pomohu (naznač implementačně).
Díky za odpověď.
Offline
Stálé bádám. Napadlo mě řešení, kdy bych pustil algoritmus pozpátku ve for cyklu. Dal bych rotaci na 0 a rychlost 0.1 (což je hranice, kdy se rotace nakonec zastaví), potom bych k rotaci přičítal rychlost a tu každý cyklus bych rychlost násobil o konstantu a přičítal opačný magnetizmus.
Tohle řešení ale není optimální, protože jak se bude ruleta dotáčet, chci, aby ruleta přestřelila místo zastavení (o kousek) a magnetizmus by ji vrátil na správnou pozici (rychlost by se dostala do záporu). Tohle druhý algoritmus umí.
Za pomoc budu určitě rád
Offline
Ten problém je poněkud složitější (to jsem zjistil fakt brzo :-D). Takže se omlouvám, zkusím to ještě nastudovat. Jak dlouho na to máš a v čem to píšeš?
Pomoci Ti můžou určitě zdejší matematici. Hledej toto: roulette wheel selection.
Já Tě mohu (prozatím) odkázat na toto:
Odkaz-1
Odkaz-2
Odkaz-3
Odkaz-4
Odkaz-5
Offline