Diskuze: Určení směru rotace
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 6 zpráv z 6.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj, jestli to chápu dobře, chceš zkoumat, zda-li se uživatel při pohybu myší drží té kružnice? IMHO ty body bylo lepší ukládat jako struct.
struct Point{
public int x, y;
public Point(int x, int y){
this.x = x;
this.y = y;
}
Já bych převedl ty body na polární souřadnice. Potom, pokud se úhel zvyšuje -> jeden směr, jinak druhý. Poloměr Ti pak udává, jak moc je uživatel mimo od tvé kružnice.
Myslím, že k určení toho směru pohybu by stačilo pouze využít
geometrického významu determinantu. (v našem případě nám stačí počáteční
A a koncový bod B, kde souřadnice tvoří matici 2x2).
Determinant spočítáš jako A.x*B.y - B.x*A.y. Pokud je kladný, tak je pohyb
proti směru hodinových ručiček, pokud záporný, tak po směru hodinových
ruriček. Nulový znamená pohyb od nebo směrem do středu kružnice.
Samozřejmě musíš vzít v úvahu směr os. Ve výše zmíněném případě
by x-ová osa šla doprava a y-ová nahoru. V grafice je ale často y-ová osa
dolů, takže to bude naopak. Pokud je determinant kladný, tak je pohyb po
směru hodinových ručiček, pokud záporný, tak proti směru.
No, každopádně průser je v tom, že když přesáhnu s cílovým bodem půlku obvodu kružnice, bere to tak, že jsem jel druhou stranou
Tady jsem se zapomněl zmínit, že musíš brát ohled na počátek. Tady se
pohybujeme po kružnici s počátkem v bodě [0,0]. Náš počátek je ale
fixovaný v jednom rohu. Program to bere tak, že se pohybuješ jen po části
kružnice v III. kvadrantu, takže když se pohybuješ po směru, tak je to ok,
ale když začneš hýbat kurzorem nahoru, tak se pohybuješ proti směru.
Potřebuješ tedy znát střed toho kruhu.Tu novou souřadnici pak namapuješ na
systém s počátkem [0,0], kde je střed kružnice. (jednoduše posuneš
souřadnice nového bodu o souřadnice středu kružnice. [newpoint.X -
center.X, newpoint.Y - center.Y]). Pak už by to mělo fungovat.
Zobrazeno 6 zpráv z 6.