Hallo Leute,
ich habe einen Vektor in meinem Koordinatensystem den ich gerne mit Qaternionen rotieren lassen würde, die ich von meinem Sensor bekomme. Mein ansatz habe ich wie folgt gestaltet. Zu beginn habe ich die Rotationsmatrix aus meinen Quaternionen erstellt. Das sieht wie folgt aus.
private double[,] QtoROT (string[] Quats)
{
double[,] arr1 = new double[3, 3];
double W = double.Parse(Quats[0], CultureInfo.InvariantCulture);
double X = double.Parse(Quats[1], CultureInfo.InvariantCulture);
double Y = double.Parse(Quats[2], CultureInfo.InvariantCulture);
double Z = double.Parse(Quats[3], CultureInfo.InvariantCulture);
double R11 = (W*W + X*X - Y*Y - Z*Z);
double R12 = 2.0 * (X * Y - W * Z);
double R13 = 2.0 * (X * Z + W * Y);
double R21 = 2.0 * (X * Y + W * Z);
double R22 = W*W - X*X + Y*Y - Z*Z;
double R23 = 2.0 * (Y * Z - W * X);
double R31 = 2.0 * (X * Z - W * Y);
double R32 = 2.0 * (Y * Z + W * X);
double R33 = W*W - X*X - Y*Y + Z*Z;
arr1[0, 0] = R11;
arr1[0, 1] = R12;
arr1[0, 2] = R13;
arr1[1, 0] = R21;
arr1[1, 1] = R22;
arr1[1, 2] = R23;
arr1[2, 0] = R31;
arr1[2, 1] = R32;
arr1[2, 2] = R33;
return arr1;
}
Anschließend habe ich eine weitere Funtion erstellt die nun die Multiplikation durchführen soll. Den Vektor habe ich Manuell erstellt.
private void CalcRotVec(double[,] RotMatrix)
{
double x = 0;
double y = 55.0;
double z = -35.0;
Vector3D POI = new Vector3D( x, y, z);
Vector3D PoiROT = Vector3D.Multiply(POI , RotMatrix);
}
In der Multiplikation bekomme ich nun einen Error.
Fehler CS1503 Argument "2": Konvertierung von "double[,]" in "double" nicht möglich.
Dabei geht es um die Rotationsmatrix die ich aus den Quaternionen erstellt habe. Kann mit jemand einen Tipp geben?
mfg
belayason
double[]
ist was anderes als double
. Das eine ist ein Array, das andere ein einzelner Wert.Leider scheine ich blind zu sein, welche Zeile es betrifft.
Leider markierst Du es auch nirgends.
Als Hinweis: [Artikel] C#: Richtlinien für die Namensvergabe
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Es handelt sich um diese Zeile
Vector3D PoiROT = Vector3D.Multiply(POI , RotMatrix);
Da reicht ein Blick in die Doku (oder IntelliSense): die Methode hat keine passende Signatur.
Es gibt hier keine Möglichkeit ein double-Array zu übergeben.
Wenn Du eine Matrix übergeben willst, dann musst Du halt einfach den passenden Typ dafür nehmen, den die Methode auch akzeptiert: Multiply(Vector3D, Matrix3D)
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Ich benötige eine 3x3 Matrix. Ist diese Implementierung richtig?
Matrix3D matrix1 = new Matrix3D(R11, R12, R13, 0, R21, R22, R23, 0, R31, R32, R33, 0, 0, 0, 0, 0);
Davon abgesehen, dass ich mich mit Vektoren, Matrix und Co nicht auskenne: wieso probierst Du es nicht einfach?
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Siehe auch deine letzten beiden Beiträge dazu:
Würfel in WPF mit Quaternionen drehen lassen
XAML Dateien in meinem Projekt nicht vorhanden, soll sie laut Tutorial aber öffnen?
Bevor mal mit 3D-Programmierung beginnt, solltete man erstmal verstanden haben, wie man die Datentypen des Frameworks anwendet, und wie man die Dokumentation verwendet.
Eine Matrix3D mußt du nicht implementieren. Dieser Datentyp ist bereits vorhanden, du mußt ihn nur nutzen. Du kannst eben nicht erwarten, daß eine beliebige Methode ein beliebiges Array akzeptiert und dann mit einem anderen beliebigen Array multipliziert. Wie soll das funktionieren?
Wenn etwas nicht funktioniert wie gewünscht, dann schau in die Doku. Dort steht alles, was du wissen mußt, um die Features des Frameworks anzuwenden.
[FAQ] Wie finde ich den Einstieg in C#?
[Hinweis] Bitte schau in die SDK-/MSDN-Doku
[Tipp] Schau in die Doku! - Möglichkeiten der Informationsgewinnung
Weeks of programming can save you hours of planning