W aplikacji na Androida chcę narysować nogę. Aby wyprowadzić górną część nogi, robię coś takiego:Jak uzyskać matrycę, w której tłumaczę, a następnie obracam, a następnie tłumaczę, a następnie obracam po raz drugi?
// legCX,legCY is the location on screen about which the leg rotates.
Matrix m = new Matrix();
m.postTranslate(-legCX,-legCY);
m.postRotate(legRot);
m.postTranslate(legCX,legCY);
Następnie ustawiam matrycę na płótnie i narysuję nogę.
Jak narysować drugą część nogi poniżej kolana? Obraca się z inną prędkością niż noga nad nim i ma punkt środkowy, który porusza się z nogą nad nim. Próbowałem następujących rzeczy, ale okazało się, że końcowym rezultatem jest obrót wokół jakiegoś pojedynczego punktu, który nie podąża za nogą powyżej.
Matrix m = new Matrix();
m.postTranslate(-legCX,-legCY);
m.postRotate(legRot);
m.postTranslate(0,-legLength);
m.postRotate(footRot);
m.postTranslate(0,legLength);
m.postTranslate(legCX,legCY);
Podejrzewam, że jest to prawdopodobnie konieczne, aby wykonać dwa obroty w dwóch różnych obiektów Matrix a następnie połączyć je w jakiś sposób, ale nie mogę dowiedzieć się, jak dokładnie to zrobić.
EDIT: Ten typ macierzy wydaje się nazywać "macierzą transformacji". Łączenie wielu operacji nazywa się kompozycją przekształceń. Jednak żadna ze stron na ten temat nie wspomina, jak wykonać serię tłumaczeń i rotacji.
Oczywiście, jeśli można użyć macierzy do rotacji wokół jednego punktu, musi być możliwe wykonywanie wielu operacji macierzowych, aby umożliwić obrót o jeden punkt, a następnie dodatkowy obrót wokół innego punktu.
Próbowałem przeglądać strony poświęcone animacji szkieletu, ale nie potrafię zrozumieć, o czym mówią.
Wygląda na to, że zapomniałeś cofnąć 'legRot'. Z wyjątkiem twojej najbardziej wewnętrznej rotacji wszystkie pozostałe operacje powinny być idealnie zrównoważone.Możesz to osiągnąć, dodając odwrotny obrót w odpowiedniej pozycji lub łącząc pierwsze trzy operacje w jedną macierz i stosując ją najpierw, a następnie odwrotnie. Jeśli to rozwiąże Twój problem, zmienię ten komentarz w odpowiedź. – MvG
to nie działa. Chciałbym znaleźć poradnik, jak to zrobić, ale albo nie jest to możliwe, albo szukam niewłaściwej rzeczy. – HappyEngineer