Cześć, pytanie z funkcji trygonometrycznych:
Obr. w zalączniku...
Chodzi o kod C++ który pozwoli wyliczyc α i β mając podane x,y,z.
Wyjscie ma byc w stopniach nie w radinanach.
Najlepiej jeżeli zadanie będzie rozwiązne jako funkcja przyjmująca x,y,z oraz bool i zwracająca α dla true, β dla false
Proszę też o przykład wyliczeń dla:
z = 5;
x = 4;
y = 3;
Z góry dziękuję. Pozdro dla rozwiązujących :D
" Life is not a problem to be solved but a reality to be experienced! "
© Copyright 2013 - 2025 KUDO.TIPS - All rights reserved.
Zadałeś to pytanie również na 4programmers, c'nie? :P
Also 1: bardzo dziwne oznaczenia przyjąłeś na rysunku, ale dla nich wzory wyglądają tak:
alfa <- 180*atan2(y, z)/PI;
beta <- 180*atan2(z, y)/PI;
Also 2: Twój pomysł na funkcję jest również bezsensowny.
Zrobiłem to po ludzku:
http://ideone.com/Mm8Q4n
Oraz niesformatowany kod:
#include <iostream>
#include <cmath>
using namespace std;
void do_magic(double x, double y, double z, double& alfa, double& beta)
{
alfa = 180*atan2(y, z)/M_PI;
beta = 180*atan2(z, y)/M_PI;
}
int main()
{
double x, y, z, alfa, beta;
cin >> x >> y >> z;
do_magic(x, y, z, alfa, beta);
cout << alfa << ", " << beta;
return 0;
}
Nie byłem pewien, czy z zaożenia ma to być trójkąt prostokątny, jeśli tak to poprawna jest funkcja angle (ze zmienną boolowską tak jak chciałeś), w ogólnym przypadku jednak prawidłowa jest funkcja angle2, która korzysta z twiedzenia cosinusów.
Uwaga program nie jest idiotoodporny i jak wprowadzisz długości odcinów z których nie da się zmontować trójkąta to zgłupieje;
#include <iostream>
#include <math.h>
using namespace std;
double angle(double x, double y, double z, bool n)
{
if(n)
return atan(y/x)*180.0/M_PI;
else
return atan(x/y)*180.0/M_PI;
}
void angle2(double x,double y,double z, double res[3])
{
res[0]=acos((pow(x,2)+pow(y,2)-pow(z,2))/(2.0*x*y))*180.0/M_PI;
res[1]=acos((pow(x,2)+pow(z,2)-pow(y,2))/(2.0*x*z))*180.0/M_PI;
res[2]=acos((pow(y,2)+pow(z,2)-pow(x,2))/(2.0*z*y))*180.0/M_PI;
}
int main()
{
double x,y,z;
double res[3];
//bool n;
cout<<"\n podaj x:\t";
cin>>x;
cout<<"\n podaj y:\t";
cin>>y;
cout<<"\n podaj z:\t";
cin>>z;
angle2(x,y,z,res);
cout<<"alfa:\t"<<res[1]<<endl;
cout<<"beta:\t"<<res[2]<<endl;
cout<<"gamma:\t"<<res[0]<<endl;
cout<<"test\t"<<(res[0]+res[1]+res[2])<<endl;
cout<<"alfa:\t"<<angle(x,y,z,true)<<endl<<"beta:\t"<<angle(x,y,z,false);
return 0;
}
pozdrawiam
---------------
"non enim possumus quae vidimus et audivimus non loqui"