Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

"Wyciąganie" kąta z funkcji trygonometrycznych

Ostatnio zmodyfikowano 2013-03-16 13:55
Autor Wiadomość
RazzorFlame
Temat założony przez niniejszego użytkownika
"Wyciąganie" kąta z funkcji trygonometrycznych
» 2013-03-15 08:38:20
Siostra mi powiedziała jak to zrobić no ale jest pytanie: Czy jest jakiś wzór na obliczenie tego czy trza brać ciągle z tabeli? Hmm teraz mi tak przyszło do głowy czy by tak nie zrobić:
C/C++
int GetAngle( double a, double b )
double c, c2;
c2 = pow( a, 2 ) + pow( b, 2 );
c = sqrt( c2 );
int kat = 0;
for( kat = 0; sin( getRadian( kat ) != a / c; kat++ )
{
}

return kat;
}
Czy to zadziała?
P-78403
pekfos
» 2013-03-15 14:49:19
Nie zadziała.

Czy jest jakiś wzór na obliczenie tego czy trza brać ciągle z tabeli?
Są funkcje cyklometryczne.
P-78430
ison
» 2013-03-15 15:03:42
P-78433
RazzorFlame
Temat założony przez niniejszego użytkownika
» 2013-03-15 16:20:24
Coś czytałem o tym że to przeciwieństwo Czy to jest to że robi się totalnie odwrotnie? Że podajesz długości masz kąt czy co? I jeszcze jedno - czym różni się funkcja atan od funkcji atan2?
P-78438
pekfos
» 2013-03-15 16:29:04
Czy to jest to że robi się totalnie odwrotnie? Że podajesz długości masz kąt czy co?
Jakie długości? Z kąta masz sinus więc z sinusa masz kąt. Totalnie odwrotnie.

czym różni się funkcja atan od funkcji atan2?
Leń. Dostałeś linki do dokumentacji. Bez trudu znajdziesz tam też atan i atan2.
P-78440
RazzorFlame
Temat założony przez niniejszego użytkownika
» 2013-03-15 17:26:06
Hehe dzięki ;) Doobra pooszukam ;p

Edit:
Poradziłem sobie:
Obliczam ręcznie przeciwprostokątną a później używam 'asin' i tzw. result z funkcji to wartość asin przeliczony na stopnie ;)
P-78443
RazzorFlame
Temat założony przez niniejszego użytkownika
» 2013-03-16 11:33:26
Edit coś nie działa HMM paczajcie:
Trygonometria.cpp (w trygonometria.h mam deklaracje)
C/C++
#include "Trygonometria.h"

double getAngle( int aX, int aY, int bX, int bY )
{
    int a = abs( bX - aX );
    int b = abs( bY - aY );
    long double c, c2;
    c2 = pow( a, 2 ) + pow( b, 2 );
    c = sqrt( c2 );
    long double angle = asin(( long double )( a / c ) );
    //cout<<angle<<endl;
    angle =( long double )( 180 * angle / M_PI );
    //cout<<angle<<endl;
    return angle;
}
long double getSinCos( char sc, int angle )
{
    if( sc == GETSINUS )
    {
        return sin(( M_PI * angle / 180 ) );
    }
    else if( sc == GETCOSINUS )
    {
        return cos(( M_PI * angle / 180 ) );
    }
    else return RETNULL;
   
}
Używam tego tak (main.cpp)
C/C++
#include "main.h"
#include "Trygonometria.h"

using namespace std;

int main()
{
    sf::RenderWindow app( sf::VideoMode( 800, 600, 32 ), "Okienko", sf::Style::Close );
    sf::Event ev;
   
    sf::Image imgAndrew;
    imgAndrew.LoadFromFile( "obrazek.bmp" );
    imgAndrew.CreateMaskFromColor( sf::Color( 255, 0, 255 ) );
    imgAndrew.SetSmooth( false );
   
    sf::Sprite spr( imgAndrew );
    spr.SetCenter( 20, 20 );
    double x = 400, y = 300;
    spr.SetPosition( x, y );
   
    double mouseX = 0, mouseY = 0;
   
   
    while( app.IsOpened() )
    {
        while( app.GetEvent( ev ) )
        {
            if( ev.Type == sf::Event::Closed ) app.Close();
           
            if( ev.Type == sf::Event::MouseMoved )
            {
                mouseX = ev.MouseMove.X;
                mouseY = ev.MouseMove.Y;
            }
        }
        spr.SetRotation( getAngle( x, y, mouseX, mouseY ) );
        app.Clear( sf::Color( 0, 0, 255 ) );
        app.Draw( spr );
        app.Display();
    }
   
    return 0;
}
Zły kąt pokazuje, gdzie może być błąd?
P-78514
pekfos
» 2013-03-16 12:40:26
Twój kod na obliczanie kąta jest bezsensowny. Wyliczając wartość bezwzględną z różnic tracisz informacje o ćwiartce układu. Dodatkowo sam kąt wyliczasz nieefektywnie. Niepotrzebnie obliczasz przeciwprostokątną.

Zły kąt pokazuje
Niedokładny? A może odwrócony o 180 stopni w kierunku przeciwnym do odwrotnego?
P-78517
« 1 » 2
  Strona 1 z 2 Następna strona