Ich bekomme nicht die erforderliche Ausgabe, d. H. X2, y2, z2 in unteren Code. Hier ist der Winkel t in Grad, (x2, y2, z2) ist der Pint der Vektorfläche nach der Drehung und (a2, b2, c2) ist der Richtungskosinus des gedrehten Vektors. Ich benutzte rviz, um den rotierenden Vektor aber zu visualisieren es kommt nicht als Gedanke, dh es dreht sich nicht.Drehen eines Vektors mit parametrischen Gleichung von 3D-Kreis
double xgp[ipgp] = 23, ygp[ipgp] = 45, zgp[ipgp] = 345; int ipgp = 0;
double a2, b2 , c2, a1, b1, c1 = ...
double la = 0.0032;
for(double t=0;t<360;t+=la)
{
double x2 = xgp[ipgp]+a2*cos(t)+a1*sin(t);
double y2 = ygp[ipgp]+b2*cos(t)+b1*sin(t);
double z2 = zgp[ipgp]+c2*cos(t)+c1*sin(t);
a2 = x2-xgp[ipgp]; // vector (xgp,ygp,zgp)->(x2,y2,z2)
b2 = y2-ygp[ipgp];
c2 = z2-zgp[ipgp];
int i = round(sqrt(pow(a2,2)+pow(b2,2)+pow(c2,2)));
std::cout<<i<<std::endl;
}
Bitte beachten Sie, dass in C++ (und vielen anderen Programmiersprachen) die trigonometrischen Funktionen einen Winkel im Bogenmaß und nicht in Grad benötigen. Ich sage das wegen der Bedingung "t <360" in der Schleife, aber Sie verwenden auch ein extrem kleines Inkrement (0.0032), so dass ich nicht wirklich sicher bin, was Sie tun. Wenn "t" in Grad ist, können Sie verwenden: 'Doppelwinkel = t * M_PI/180.0, ct = cos (Winkel), st = sin (Winkel);'. Ich würde auch normalerweise 'a2 * a2' zu 'pow (a2,2)' bevorzugen. –
o, das wusste ich nicht, danke. –