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

[C++]Przesunięcie punktu na płaszczyźnie o dany kąt

Ostatnio zmodyfikowano 2014-01-15 18:07
Autor Wiadomość
waldorm
Temat założony przez niniejszego użytkownika
[C++]Przesunięcie punktu na płaszczyźnie o dany kąt
» 2014-01-14 15:34:31
Mam napisać program w którym użytkownik wpisuje punkt A(x, y), punkt B(a, b) i stopnie o ile ma być przesunięty punkt A względem punktu B.

Napisałem tak:

C/C++
#include <iostream>
#include <math.h>

using namespace std;
/*
x = a + (x - a) * cosp - (y - b) * sinp
y = b + (x - a) * sinp + (y - b) * sinp
*/
int main()
{
    int x, y, a, b;
    float x2, y2;
    double r1 = 0;
    double r2 = 0;
    int p = 0;
    cin >> x >> y;
    cin >> a >> b;
    cin >> p;
    r1 = sin(( p * M_PI ) / 180 );
    r2 = cos(( p * M_PI ) / 180 );
   
    x2 =( a +( x - a ) ) *( r2 -( y - b ) * r1 );
    y2 =( b +( x - a ) ) *( r1 +( y - b ) * r1 );
   
    cout.precision( 2 );
    cout << x2 << endl;
    cout << y2;
   
   
    return 0;
}

i jest taki problem, że w ogóle cosinus jest nie prawidłowy bo np wpisuje cos90, to mi zamiast 0 to wyskakuje jakaś dziwna liczba :o
O co chodzi? y2 jest prawidłowy raczej.


@edit

zamiast stałej M_PI wziołem poporstu 3.14 i jest lepiej lecz teraz x2 zły wychodzi :o Pomimo ze mam set precision(3) to mi więcej wyskakuje... wtf...

C/C++
#include <iostream>
#include <math.h>

using namespace std;
/*
x = a + (x - a) * cosp - (y - b) * sinp
y = b + (x - a) * sinp + (y - b) * sinp
*/
int main()
{
    int x, y, a, b;
    float x2, y2;
    double r1 = 0;
    double r2 = 0;
    int p = 0;
    cin >> x >> y;
    cin >> a >> b;
    cin >> p;
    r1 = sin(( p * 3.14 ) / 180 );
    r2 = cos(( p * 3.14 ) / 180 );
   
    x2 =( a +( x - a ) ) *(( r2 -( y - b ) ) * r1 );
    y2 =( b +( x - a ) ) *(( r1 +( y - b ) ) * r1 );
   
   
    cout.precision( 3 );
    cout.setf( ios::showpoint );
    cout << x2 << endl;
    cout << y2;
    return 0;
}[ code ]
P-102153
domin568
» 2014-01-15 09:35:04
Zamiast
int zero = 0
 napisz
double zero = 0
 Bo mnozysz double przez int tracac precyzje
P-102207
waldorm
Temat założony przez niniejszego użytkownika
» 2014-01-15 18:07:39
Niestety ale nic to nie pomogło :/

Dopiero to zadziałało:
C/C++
#include <iostream>
#include <math.h>
#include <cstdio>
//by waldorm
using namespace std;
/*
x = a + (x - a) * cosp - (y - b) * sinp
y = b + (x - a) * sinp + (y - b) * sinp
*/
int main()
{
    double x, y, a, b;
    double kat;
   
    cin >> x >> y;
    cin >> a >> b;
    cin >> kat;
   
    kat = kat * 3.14 / 180; //zamiana stopni na radiany
   
    double x2, y2;
    double sin( double kat );
    double cos( double kat );
   
    x2 =( a +(( x - a ) * cos( kat ) ) -(( y - b ) * sin( kat ) ) );
    y2 =( b +(( x - a ) * sin( kat ) ) +(( y - b ) * cos( kat ) ) );
   
    //wyswietlenie wyniku z 2 liczbami po przecinku za pomoca
    //biblioteki cstdio z jezyka c
    printf( "%.2lf\n", x2 );
    printf( "%.2lf\n", y2 );
   
    return 0;
}
Tylko nie rozumiem dlaczego mam używać do wyświetlenia printfa kiedy moge cout?

Przypominam, że na cout wyskakiwał zły wynik.
P-102248
« 1 »
  Strona 1 z 1