Verfasst am: 28.01.2020, 09:40
Titel: Problem mit hgtransform und makehgtform
Eine hoffentlich letzte Frage zu meinem kleinen Projekt...Leider wird es vermutlich ein bisschen umständlich, das zu erklären...
Als Ausgangsmaterial habe ich eine Grafik, bestehend aus vertices und faces sowie Bewegungsdaten, genauer gesagt Rotationsdaten um eine x-,y- und z-Achse. Diese Vertices verschiebe ich durch eine selbtgeschriebene Funktion, sodass der Mittelpunkt meines Objektes im Koordinatenursprung liegt.
(Danke an dieser Stelle noch einmal an Harald, ohne dessen Hilfe ich das so nie geschafft hätte).
Nun das eigentliche Problem:
Der User soll mittels drei Slidern das Objekt in x,y und z-Richtung verschieben können und somit den Nullpunkt verändern, um den die Vertices gedreht werden. Das bedeutet also, wenn ich beispielsweise einen Würfel habe, dessen Zentrum initial um die eigene Achse rotiert (wie etwa ein Dönerspies ), soll durch die Slider so ausgelenkt werden, dass er danach (je nach Wert des Sliders) mit größerem Abstand zur Achse (wie der Mond um die Erde) rotiert. Ich hoffe, das war halbwegs Verständlich?
Vom Prinzip her scheint makehftform(translate [x,y,z] diesen Job erledigen zu können, allerdings gelingt mir die Kombination nicht so richtig. Ich habe schon verschiedene Varianten durchprobiert, jedoch leider bisher ohne Erfolg.
Eine (schematische)Abfolge von
Code:
g = hgtransform(gca) patch(faces, vertices) while(true)
t = makehgtform(translate[x.Value,y.Value,z.Value]),
r = makehgtform(xrotate,rotationX,yrotate,rotationY,zrotate,rotationZ) set(g.Matrix, t*r) drawnow end
läuft zwar, allerdings wird das Objekt als Ganzes incl. Rotation an der jeweiligen Achse verschoben.
Ich habe auch schon probiert erst translate, dann drawnow, dann rotate und erneut drawnow, funktioniert nicht. Vor der makehgtform(xrotate...) habe ich versucht, meine vertices mit vertices = vertices - Verschiebung zu verschieben, dies erscheint aber gar nicht.
Ich werde nun ein bisschen weiter probieren, aber vielleicht hat jemand einen Ansatz, wie ich das lösen kann, mir fehlt gerade ein bisschen die Idee.
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.