Diskuze: Počítání směru pomocí Atan2

C# .NET .NET (C# a Visual Basic) Počítání směru pomocí Atan2 American English version English version

Avatar
Theodor Johnson
Redaktor
Avatar
Theodor Johnson:

Ahoj mám takový problém se směrem pohybu objektu, počítám ho pomocí kódu

// Count force power
double direction = Math.Atan2(value.direction.Y - value.position.Y, value.direction.X - value.position.X);
direction = direction / Math.PI * 180;

// Set force
force = new ForcePower();
force.HorizontalForce = Math.Cos(direction) * value.power;
force.VerticalForce = Math.Sin(direction) * value.power;

kde: value.direction je bod konečný bod, value.position je bod kde se objekt nachází. Problém je v tom že se objekty rozlétnou náhodným směrem, místo směrem ke konečnému bodu

Odpovědět 15.10.2013 22:28
Přecházím na "Cross-Platform Development"
Avatar
Odpovídá na Theodor Johnson
Luboš Běhounek (Satik):

Tady se počítá úhel v radiánech a ne stupních, předpokládám, že ta 180 byla myšlena jako stupně :) .

Nahoru Odpovědět 15.10.2013 22:52
:)
Avatar
Theodor Johnson
Redaktor
Avatar
Odpovídá na Luboš Běhounek (Satik)
Theodor Johnson:

Budu se muset podívat jestli jsem nenapsal špatně určení toho konečného bodu, tenhle kód mi fungoval dobře na otáčení obdelníku po směru myši, takže minimálně první 2 řádky fungují dobře

Nahoru Odpovědět 15.10.2013 23:16
Přecházím na "Cross-Platform Development"
Avatar
Kit
Redaktor
Avatar
Odpovídá na Theodor Johnson
Kit:

Do proměnné direction strkáš nejprve radiány, pak je přepočítáš na stupně a pak s ní pracuješ, jako kdyby v ní byly radiány.

Stačí smazat řádek

direction = direction / Math.PI * 180;

je tam úplně zbytečný a je v rozporu s dobrými praktikami.

Nahoru Odpovědět  +1 15.10.2013 23:21
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Luboš Běhounek (Satik):

Řádek

direction = direction / Math.PI * 180;

bych úplně vyhodil, podle mě je to nějaký zbytek po něčem předchozím, co na tomhle místě být nemá.

Nahoru Odpovědět  +1 15.10.2013 23:24
:)
Avatar
Theodor Johnson
Redaktor
Avatar
Theodor Johnson:

Kit, Luboš Běhounek (Satik) Díky,myslel jsem si že když tám mám ten sinus a cosinus tak že by tam měly být stupně a ne radiány. Teď už to funguje :)

Nahoru Odpovědět 15.10.2013 23:29
Přecházím na "Cross-Platform Development"
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 6 zpráv z 6.